Seznam sousedství a maticová reprezentace grafu

I když vypadají jinak, všechny typy grafů lze reprezentovat podobným způsobem. Obecně existují dva typy reprezentace grafu:

  1. Matice sousedství
  2. Seznam sousedů

Seznam sousedů

Adjacency List se skládá z Linked Lists. Každý vrchol je považován za index pole a každý prvek představuje propojený seznam. Tyto propojené seznamy obsahují vrcholy, které mají hrany s vrcholem indexu.

Zde je příklad seznamu sousedství:

Seznam sousedů

Řekněme, že graf obsahuje V počet vrcholů a E počet hran.

Obecně bude složitost prostoru O(V + E).

Nejhorší případ bude složitost prostoru O(V2) pokud je daný graf úplným grafem

Matice sousedství

Adjacency Matrix se skládá z 2D pole. Graf s počtem V vrcholů, velikost matice bude VxV.

Říci, matrix[i][j] = 5. Znamená to, že mezi uzlem i a j je hrana, kde je váha 5.

Podívejme se na následující graf a jeho matici sousedství:

Matice sousedství

Vytvořili jsme 2D pole pomocí těchto kroků:

Krok 1) Vrchol A má přímou hranu s B a váha je 5. Buňka v řádku A a sloupci B bude tedy vyplněna 5. Zbytek buněk v řádku A bude vyplněn nulou.

Krok 2) Vrcholy B mají přímou hranu s C a váha je 4. Buňka v řádku B a sloupci C tedy bude vyplněna 4. Zbývající buňky v řádku B budou vyplněny nulou, protože B nemá žádnou výstupní hranu. další uzly.

Krok 3) Vrcholy C nemají žádné přímé hrany s žádnými jinými vrcholy. Takže řádek C bude vyplněn nulami.

Krok 4) Vertice D má směrovanou hranu s A a C.

  • Zde bude mít buňka v řádku D a sloupci A hodnotu 7. Buňky v řádku D a sloupci C budou mít hodnotu 2.
  • Zbytek buněk v řádku D bude vyplněn nulami.

Krok 5) Vrcholy E mají orientovanou hranu s B a D. Buňka v řádku E a sloupci B bude mít hodnotu 6. Buňky v řádku E a sloupci D budou mít hodnotu 3. Zbytek buněk v řádku D bude vyplněné nulami.

Zde je několik bodů, kterých si musíte všimnout:

  • Graf nemá žádné vlastní smyčky, když je primární diagonála matice sousedství 0.
  • Graf je orientovaný graf, pokud indexy (a,b) a (b,a) nemají stejnou hodnotu. Jinak je graf orientovaný graf.
  • Graf bude váženým grafem, pokud je hodnota buněk větší než 1.

S maticí sousedství je určitý problém, protože vyžaduje čtvercové mezery. Zde ukládáme hrany, které nejsou spojené. Tyto hrany alokují místo v paměti.

Máme-li například graf se 100 uzly, je potřeba 10 tisíc buněk k jeho uložení do RAM. S menším počtem okrajů v grafu může být alokace tak velké paměti plýtváním. Prostorová složitost pomocí matice sousedství tedy bude O(N2), kde N znamená počet uzlů v grafu.