Grafy a jejich implementace

Z FAV wiki
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(→Implementace grafu pomocí matice sousednosti)
m (kategorizace)
 
(Nejsou zobrazeny 2 mezilehlé verze od 1 uživatele.)
Řádka 11: Řádka 11:
 
== Implementace grafu pomocí spojového seznamu (seznam sousednosti) ==
 
== Implementace grafu pomocí spojového seznamu (seznam sousednosti) ==
  
−
[[Soubor:Graf-spojovy-seznam.jpg]]
+
[[Soubor:Graf-spojovy-seznam.jpg|500px]]
  
 
Máme seznam vrcholů a pro každý z nich máme seznam vrcholů, se kterými sousedí. Lze tak implementovat všechny 3 typy grafů (v obousměrných budou sousednosti v seznamech obou vrcholů sdílejících hranu, ohodnocení vrcholů je uloženo v seznamu vrcholů, ohodnocení hran je v seznamu sousednosti)
 
Máme seznam vrcholů a pro každý z nich máme seznam vrcholů, se kterými sousedí. Lze tak implementovat všechny 3 typy grafů (v obousměrných budou sousednosti v seznamech obou vrcholů sdílejících hranu, ohodnocení vrcholů je uloženo v seznamu vrcholů, ohodnocení hran je v seznamu sousednosti)
  
 
Problém metody je v složitosti hledání existence hrany, jelikož musíme procházet seznamy sousednost (Pro velké grafy pomalé, na druhou stranu pro řídké grafy méně pamětově náročné)
 
Problém metody je v složitosti hledání existence hrany, jelikož musíme procházet seznamy sousednost (Pro velké grafy pomalé, na druhou stranu pro řídké grafy méně pamětově náročné)
−
 
−
 
  
 
== Implementace grafu pomocí matice sousednosti ==
 
== Implementace grafu pomocí matice sousednosti ==
Řádka 33: Řádka 31:
  
 
// co třeba hledání kostry grafu a podobný vylomeniny?
 
// co třeba hledání kostry grafu a podobný vylomeniny?
 +
 +
{{fav-kiv-bzinf}}
 +
[[Kategorie:fav-kiv-bzinf]]

Aktuální verze z 20. 2. 2014, 06:35

Graf je reprezentován množinou vrcholů (uzlů) V, které mohou být spojeny určitým počtem hran H. Graf je poté definován jako G(V,H)



[editovat] Implementace grafu pomocí spojového seznamu (seznam sousednosti)

Graf-spojovy-seznam.jpg

Máme seznam vrcholů a pro každý z nich máme seznam vrcholů, se kterými sousedí. Lze tak implementovat všechny 3 typy grafů (v obousměrných budou sousednosti v seznamech obou vrcholů sdílejících hranu, ohodnocení vrcholů je uloženo v seznamu vrcholů, ohodnocení hran je v seznamu sousednosti)

Problém metody je v složitosti hledání existence hrany, jelikož musíme procházet seznamy sousednost (Pro velké grafy pomalé, na druhou stranu pro řídké grafy méně pamětově náročné)

[editovat] Implementace grafu pomocí matice sousednosti

Stejný graf jako v předchozím případě

Graf-seznam-sousednosti.jpg

Vytvoříme matici v*v prvků, kde v je počet vrcholů a hrany reprezentujeme jedničkami, zbytek matice jsou nuly.

Vidíme, že neorientovaný graf produkuje symetrickou matici, je tedy možné horní polovinu zanedbat a ušetřit tak paměť. Věškeré operace jsou O(1) (pokud použijeme 2rozměrné pole), paměťově je však tato implementace náročnější, jelikož alokujeme paměť i pro místa, kde hrany nejsou. Tato metoda je tedy vhodná pro časté vyhledávání ve větších grafech.

Ohodnocení lze provést uložením hodnoty místo jedniček, na diagonále lze ohodnotit vrcholy.


// co třeba hledání kostry grafu a podobný vylomeniny?


Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje