Wiem, że istnieją dwa sposoby reprezentowania mojego wykresu: jeden używa macierzy, a drugi używa listy.Jak odwrócić wykres w czasie liniowym?
Jeśli używam matrycy, muszę odwrócić wszystkie bity w macierzy. Czy to nie zajmuje czasu O (V^2)?
Jeśli użyję listy, czy nie będę musiał przechodzić przez każdą listę, jeden po drugim, i utworzyć nowy zestaw? Wydaje się, że zajmuje to czas O (V + E), który jest liniowy. Mam rację?
Mam tu kolejne pytanie. Rozważmy na przykład, że używam algorytmu Dijkstra na moim wykresie (albo macierzy lub listy), i używamy kolejki priorytetowej dla struktury danych za sceną. Czy istnieje jakaś relacja reprezentacji wykresu i wykorzystania struktury danych? Czy wpłynie to na działanie algorytmu?
Załóżmy, że mam użyć listy dla reprezentacji i kolejki priorytetowej dla algorytmu Dijkstra, czy istnieje różnica między macierzą a kolejką priorytetową dla Dijkstra?
Podejrzewam, że dotyczy tylko operacji makeQueue
? Czy w ogóle nie mają innych?
przemierzania list przylegania nie zdarza się w czasie liniowej ogólnie jako E = V^O (2). – collapsar
@collapsar To * zawsze * dzieje się w czasie liniowym względem wierzchołków * i krawędzi *. Aby zdefiniować złożoność czasu tylko na części danych wejściowych (tj. Tylko wierzchołkach) (bez wyraźnego jej podawania) wydaje się nieco nielogiczne, * szczególnie * gdy czas jest bezpośrednio związany z inną częścią danych wejściowych (ale nie mogę twierdzić, że wiele ludzie mogą definiować to tak, jak ty). A E = O (V^2) jest dla gęstych wykresów. Rzadkie wykresy to E = O (V). – Dukeling
@dukeling masz rację wskazując, że zmniejszenie "rozmiaru" problemu do pojedynczego skalara wiąże się z brakiem precyzji. Otoh, notacja big-Oh opisuje najgorszy przypadek i, biorąc pod uwagę wykresy, bez dodatkowych ograniczeń najgorszy przypadek oznacza E = O (V^2). będąc dokładnym, O (V^2) nie jest poprawne dla odwrócenia krawędzi na macierzy sąsiedztwa - jeśli reprezentacja ma flagę rząd-major vs. col-dur, transpozycja to O (1). – collapsar