Grafové algoritmy

Z Kiwiki
Verzia z 22:22, 16. august 2010, ktorú vytvoril Juraj (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Skočit na navigaci Skočit na vyhledávání
Imbox draft.png
Toto je projekt, na ktorom sa ešte stále pracuje!!

Aj keď sú v tomto dokumente použiteľné informácie, ešte nie je dokončený. Svoje návrhy môžete vyjadriť v diskusii o tejto stránke.

Teória grafov je časť diskrétnej matematiky, ktorá skúma vlastnosti grafov.

Graf

Graf G je usporiadaná dvojica (V,E), kde

  • V – množina vrcholov
  • E – množina hrán

Každá hrana e ([math]e\in E[/math]) je pár (v,w), kde [math]v,w\in V[/math]

Neorientovaný graf

Neorientovaný graf

Graf alebo neorientovaný graf G je usporiadaná dvojica G = (V, E), kde:

  • V je neprázdna konečná množina vrcholov grafu,
  • E je množina neusporiadaných dvojíc typu {u, v}, kde u ≠ v, nazývaných hrany grafu.

Príklad neorientovaného grafu:

V={1,2,3,4,5}
E={(1,2),(1,4), (1,5), (2,4), (2,3), (3,4), (4,5)}

Orientovaný graf

Orientovaný graf

Orientovaný graf alebo digraf G je usporiadaná dvojica G = (V, E), kde:

  • V je neprázdna konečná množina vrcholov grafu,
  • E je množina usporiadaných dvojíc typu (u, v), kde u ≠ v, nazývaných orientované hrany grafu.

Príklad neorientovaného grafu:

V={1,2,3,4,5}
E={(1,2),(1,4), (2,4), (3,2), (4,3), (4,5),(5,1)}

Hranovo ohodnotený graf

Ohodnotený orientovaný graf

Hranovo ohodnotený graf je graf s ohodnotenými hranami.

Definícia: Graf G(v,e) sa nazýva hranovo ohodnotený, ak každej hrane [math]e\in E[/math] je priradené nejaké číslo [math]w\in R[/math].

Definícia: Kladne hranovo ohodnotený graf je taký graf G, w, že [math]w\left( e \right)\gt 0[/math]

Príklad ohodnoteného orientovaného grafu:

V={1,2,3,4,5}
E={(1,2,4),(1,4 ,1), (2,4,8), (3,2,9), (4,3,7), (4,5,5),(5,1,3)}

Základné pojmy v teórii grafov

Cesta v grafe: c={1,2,4,3}
Cesta
je postupnosť vrcholov spojených hranami grafu (Napríklad: c={1,2,4,3})
Dĺžka cesty
  • neohodnotený graf: je počet hrán v ceste (d=3),
  • ohodnotený graf: súčet hodnôt na hraných grafu, ktoré sú v ceste (d=19)
Stupeň vrcholu V
počet hrán, vo vrchole V
Cyklus
V orientovanom grafe je cesta začínajúca a končiaca v tom istom vrchole a obsahujúca najmenej jednu hranu
Strom
je graf bez cyklov.

Reprezentácia grafov

Matica susednosti

Vzájomné súvislosti hrán a vrcholov sú popísané pomocou matice susednosti MG.

  • Nech G=<V,E>;, [math]E\in \left\{ {{e}_{1}},{{e}_{2}},...,{{e}_{m}} \right\}[/math]
  • Matica susednosti MG grafu G je štvorcová matica rádu m, kde
[math]{{m}_{i,j}}=\langle \begin{matrix} 1,\ \ \text{Ak}\,\text{medzi}\,\text{vrcholmi i a j existuje hrana } \\ 0,\ \text{Ak}\,\text{medzi}\,\text{vrcholmi i a j nrexistuje hrana} \\ \end{matrix}[/math]

Príklad:

Matica susednosti pre neorienotvaný graf (na prvom obrázku)

[math]{{M}_{G}}=\left( \begin{matrix} 0 & 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 0 \\ 1 & 1 & 1 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 \\ \end{matrix} \right)[/math]

Matica susednosti pre orienotvaný graf (na druhom obrázku)

[math]{{M}_{G}}=\left( \begin{matrix} 0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 \\ 1 & 0 & 0 & 0 & 0 \\ \end{matrix} \right)[/math]

Matica susednosti MG grafu G s ohodnotenými hranami:

Každému vrcholu je priradený zoznam jeho susedov (využitie lineárneho zoznamu).

  • Matica susednosti MG grafu G je štvorcová matica rádu m, kde
[math]{{m}_{i,j}}=\langle \begin{matrix} 1,\ \ \text{Ak}\,\text{medzi}\,\text{vrcholmi i a j existuje hrana } \\ c,\ \text{Ak}\,\text{medzi}\,\text{vrcholmi i a j nrexistuje hrana} \\ \end{matrix}[/math]

Matica susednosti pre orienotvaný ohodnotený graf (na treťom obrázku)

[math]{{M}_{G}}=\left( \begin{matrix} 0 & 4 & 0 & 1 & 0 \\ 0 & 0 & 0 & 8 & 0 \\ 0 & 9 & 0 & 0 & 0 \\ 0 & 0 & 7 & 0 & 5 \\ 3 & 0 & 0 & 0 & 0 \\ \end{matrix} \right)[/math]

Implementácia matice susednosti v jazyku C

Úloha:Vytvorte maticu susednosti pre graf G. Graf G bude zadávaný nasledovne:

prvý bude počet vrcholov (pocetV) a potom počet hrán (pocetH) grafu G. Potom bude nasledovať pocetH dvojíc vrcholov + cena hrany c.

Vzorový vstup:

5 7 
1 2 4
1 4 1
2 4 8
3 2 9
4 3 7
4 5 5
5 1 3

Analýza úlohy

Vlastnosť matice susednosti neorientovaného grafu je, že daná matica je súmerná vzhľadom na hlavnú diagonálu. Túto vlastnosť môžeme formulovať nasledovne: ak vrchol i susedí s vrcholom j, tak potom aj vrchol j susedí s vrcholom i.

Pri orientovaných grafoch takéto tvrdenie nemôžeme povedať, pretože ak existuje iba orientovaná hrana s vrcholu i do vrcholu j, tak potom neexistuje spôsob ako sa z vrcholu j dostať do vrcholu i.

Príprava dátovej štruktúry dvojrozmerné pole celých čísel (matica susednosti)

 int i,j,pocetV,pocetH,v1,v2,c;
 cin>>pocetV>>pocetH;
 int **Mg=new int*[pocetV];
    for(i=0;i<pocetV;i++)
    	Mg[i]=new int[pocetV];

// vynulovanie matice 
//Mg predstavuje pr8zdny graf.
for(i=0;i<pocetV;i++)
  for(j=0;j<pocetV;j++)
    Mg[i][j]=0;

Vytvorenie orientovaného grafu

    for(i=0;i<pocetH;i++)
    {	cin>>v1>>v2>>c;
    	Mg[v1-1][v2-1]=c;
    }

Vytvorenie neorientovaného grafu

    for(i=0;i<pocetH;i++)
    {	cin>>v1>>v2>>c;
    	Mg[v1-1][v2-1]=c;
        Mg[v2-1][v1-1]=c; 
    }

Zoznam vrcholov

Grafové algoritmy

V súvislosti s grafmi existuje veľa úloh, ktoré sa dajú efektívne riešiť práve pomocou grafov. Napríklad:

  • Prechádzanie stromom
  • Hľadanie najkratšej cesty
  • Prehľadávanie bludiska
  • Hľadanie optimálnej cesty
  • Ofarbenie grafu - problém ofarbenia politickej mapy sveta
  • Toky v sieťach (elektrické schémy)
  • Rozdhodovacie stromy
  • a mnohé iné[1]

Medzi najzaujímavejšie úlohy patria úlohy o prehľadávaní grafu a hľadaní najkratšej (optimálnej) cesty. Hovoríme o nasledujúcich algoritmoch:

Referenicie