31
Grafov Grafov é é algoritmy: algoritmy: minimálna kostra, minimálna kostra, najkratšie cesty najkratšie cesty

Grafov é algoritmy: minimálna kostra, najkratšie cesty

  • Upload
    callia

  • View
    76

  • Download
    0

Embed Size (px)

DESCRIPTION

Grafov é algoritmy: minimálna kostra, najkratšie cesty. Čo máme v pláne ?. 2 problémy a algoritmy na ich riešenie: boli motivované potrebami praxe formulácia v „reči“ ohodnotených grafov jednoduché riešenia zložitejšie dôkazy , že algoritmy naozaj fungujú Problém minimálnej kostry - PowerPoint PPT Presentation

Citation preview

Page 1: Grafov é algoritmy: minimálna kostra, najkratšie cesty

GrafovGrafové algoritmy:é algoritmy:minimálna kostra, najkratšie cestyminimálna kostra, najkratšie cesty

Page 2: Grafov é algoritmy: minimálna kostra, najkratšie cesty

22

Čo máme v pláne Čo máme v pláne ??

2 problémy a algoritmy na ich riešenie:2 problémy a algoritmy na ich riešenie:

boli motivované boli motivované potrebami praxepotrebami praxe

formulácia v „reči“ ohodnotených formulácia v „reči“ ohodnotených grafovgrafov

jednoduchéjednoduché riešenia riešenia

zložitejšie zložitejšie dôkazydôkazy, že algoritmy naozaj , že algoritmy naozaj fungujúfungujú

Problém minimálnej kostryProblém minimálnej kostry

Nájdenie najkratších ciest v grafeNájdenie najkratších ciest v grafe

Page 3: Grafov é algoritmy: minimálna kostra, najkratšie cesty

33

S čím budeme pracovať S čím budeme pracovať ??

Neorientovaný Neorientovaný graf bez násobných hrán a graf bez násobných hrán a slučiekslučiek

Ku každej hrane Ku každej hrane ee grafu bude priradené kladné grafu bude priradené kladné čísločíslo w(e)w(e): : váha hranyváha hrany (cena hrany, ohodnotenie (cena hrany, ohodnotenie hrany) hrany)

Graf je Graf je súvislýsúvislý

““AlternatAlternatívny pohľadívny pohľad””::

““guliguličky a čiaryčky a čiary”, nad”, nad čiarami budú napísané čísla čiarami budú napísané čísla

nneorientovaný eorientovaný = budeme pou= budeme používať čiary a nie šípkyžívať čiary a nie šípky (tak ako na minulej predn(tak ako na minulej prednáškeáške))

Page 4: Grafov é algoritmy: minimálna kostra, najkratšie cesty

44

PrPríklad íklad (a mo(a možné interpretáciežné interpretácie))

Page 5: Grafov é algoritmy: minimálna kostra, najkratšie cesty

55

Interpretácie v reálnom sveteInterpretácie v reálnom svete

Príklad 1:Príklad 1:

Vrcholy Vrcholy = mest= mestáá

Hrany Hrany = priame cesty medzi mestami= priame cesty medzi mestami

VVáha hrany áha hrany = d= dĺžka priamej cestyĺžka priamej cesty

Príklad 2:Príklad 2:

Vrcholy Vrcholy = elektrick= elektrické rozvodneé rozvodne

Hrany Hrany = elektrick= elektrické vedenie medzi rozvodňamié vedenie medzi rozvodňami

Váha hrany Váha hrany = cena za rekon= cena za rekonštrukciu vedeniaštrukciu vedenia

Page 6: Grafov é algoritmy: minimálna kostra, najkratšie cesty

66

Ako reprezentovaAko reprezentovať ť ohodnotenohodnotený graf ý graf ??

Zoznam hrZoznam hránán + ku ka+ ku každej hrane pridáme váhu:ždej hrane pridáme váhu:

[A, B, 7], [B, C, 8], ….[A, B, 7], [B, C, 8], ….

Matica susednostiMatica susednosti::

22-rozmern-rozmerné pole é pole intovintov (resp. (resp. doublovdoublov): ): mapamapa

nn x x nn, kde , kde nn je počet vrcholov grafu je počet vrcholov grafu ((““miest”)miest”)

polpolíčko íčko mapamapa[X][Y][X][Y] obsahuje obsahuje

vváhu hrany medzi vrcholmi áhu hrany medzi vrcholmi XX a a YY

-1-1 ak hrana neexistuje ak hrana neexistuje

mapa[A][B] = 7mapa[A][B] = 7, mapa, mapa[B][A] = 7, mapa[B][C] = 8, …[B][A] = 7, mapa[B][C] = 8, …

A A veľaveľa iných spôsobov ... iných spôsobov ...

Page 7: Grafov é algoritmy: minimálna kostra, najkratšie cesty

77

Graf v poliGraf v poli ((matica susednostimatica susednosti) …) …AA BB CC DD EE FF GG

AA -1-1 77 -1-1 55 -1-1 -1-1 -1-1

BB 77 -1-1 88 99 77 -1-1 -1-1

CC -1-1 88 -1-1 -1-1 55 -1-1 -1-1

DD 55 99 -1-1 -1-1 1515 66 -1-1

EE -1-1 77 55 1515 -1-1 88 99

FF -1-1 -1-1 -1-1 66 88 -1-1 1111

GG -1-1 -1-1 -1-1 -1-1 99 1111 -1-1

V reálnom programe vrcholy nebude označovať písmenami, ale číslami, aby sme označenie vrcholu použili ako indexy do poľa

Page 8: Grafov é algoritmy: minimálna kostra, najkratšie cesty

88

Graf ako objektGraf ako objekt

Ako znalAko znalý objektového programovania v Jave a ý objektového programovania v Jave a kolekckolekciií, si môžeme vytvoriť triedu í, si môžeme vytvoriť triedu GraphGraph, ktorá , ktorá by reprezentovala graf by reprezentovala graf (mno(množina vrcholov žina vrcholov + + mnomnožina žina hrhránán))

VrcholVrchol reprezentovan reprezentovaný ako objekt triedy ý ako objekt triedy VertexVertex

HranaHrana reprezentovaná ako objekt triedy reprezentovaná ako objekt triedy EdgeEdge

Očakávané Očakávané metódymetódy triedy triedy GraphGraph::

public Setpublic Set<Vertex> getVertices()<Vertex> getVertices()

vvrráti množinu vrcholov, ktoré tvoria grafáti množinu vrcholov, ktoré tvoria graf

public Set<Edge> getEdges()public Set<Edge> getEdges()

vráti množinu hrán, ktoré tvoria grafvráti množinu hrán, ktoré tvoria graf

Page 9: Grafov é algoritmy: minimálna kostra, najkratšie cesty

99

Problém minimálnej Problém minimálnej kostry kostry – motiv– motiváciaácia

Uvažujme Uvažujme dopravnú sieťdopravnú sieť

Máme nejaké Máme nejaké peniazepeniaze z EÚ na z EÚ na výstavbu diaľnícvýstavbu diaľníc

KtoréKtoré cesty máme prerobiť na diaľnice, cesty máme prerobiť na diaľnice, aby existovalo aby existovalo (nie nutne priame) (nie nutne priame) spojeniespojenie medzi medzi kakaždými 2 mestamiždými 2 mestami výhradne po diaľniciach výhradne po diaľniciach a pritom aby a pritom aby sme minuli, sme minuli, čo čo najmenejnajmenej

Vstup:Vstup: pre každý úsek spájajúci 2 pre každý úsek spájajúci 2 mestá náklady na jeho prestavbu na mestá náklady na jeho prestavbu na diaľnicudiaľnicu

Page 10: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1010

Iné praktické motivácieIné praktické motivácie

Telefónna sieť:Telefónna sieť: ktoré linky prebudovať na ktoré linky prebudovať na optické, aby bolo možné presmerovať všetky optické, aby bolo možné presmerovať všetky hovory po optických linkách a chceme pritom hovory po optických linkách a chceme pritom minúť čo najmenej minúť čo najmenej ??

Algoritmus na riešenie ako prvý navrhol Algoritmus na riešenie ako prvý navrhol v roku v roku 19261926 Otakar Bor Otakar Borůvkaůvka, ke, keď riešil ď riešil problémproblém efektívnejefektívnej konštrukcie konštrukcie elektrickej sieteelektrickej siete na na MoraveMorave

Page 11: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1111

Čo je kostra grafu Čo je kostra grafu ??

Kostra grafuKostra grafu je tak je taká á podmnožinapodmnožina T T hránhrán grafu G, že platí:grafu G, že platí:

1.1. Medzi každými 2 vrcholmi grafu Medzi každými 2 vrcholmi grafu existuje existuje cestacesta využívajúca len hrany kostry T využívajúca len hrany kostry T

2.2. OdobratímOdobratím ľu ľubbovoľnej hrany kostry už ovoľnej hrany kostry už vlastnosť 1 vlastnosť 1 nebude platiťnebude platiť

„„Kostra“ sú hrany, ktoré graf „držia po Kostra“ sú hrany, ktoré graf „držia po kope“kope“

Page 12: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1212

Vlastnosti kostier Vlastnosti kostier (bez d(bez dôkazuôkazu))Graf môže mať Graf môže mať veľa kostierveľa kostier

Každá kostra grafu s Každá kostra grafu s nn vrcholmi má práve vrcholmi má práve n-1n-1 hrhránán

Hrany kostry Hrany kostry nevytvnevytvárajú cyklusárajú cyklus

PridaniePridanie ľubovoľnej nekostrovej hrany ku kostre ľubovoľnej nekostrovej hrany ku kostre vytvorí cyklusvytvorí cyklus

Medzi každými 2 vrcholmi grafu existuje Medzi každými 2 vrcholmi grafu existuje jediná jediná cestacesta využívajúca len kostrové hrany využívajúca len kostrové hrany

Minimálna kostra:Minimálna kostra: taká kostra, taká kostra, v v ktorej súčet ktorej súčet ohodnotení ohodnotení (v(váháh)) hrán je hrán je minimálnyminimálny spomedzi spomedzi všetkých všetkých momožných kostieržných kostier grafu grafu

Page 13: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1313

Algoritmus na nájdenie minimálnej Algoritmus na nájdenie minimálnej kostry: Kruskalov algoritmuskostry: Kruskalov algoritmus

1.1. UtriedimeUtriedime vzostupne hrany grafu podľa váhy: vzostupne hrany grafu podľa váhy:

ee11, e, e22, e, e33, …, e, …, emm

tak, tak, že wže w(e(e11) <= w(e) <= w(e22) <= w(e) <= w(e33) <= …, <= w(e) <= …, <= w(emm))

2.2. Množina hrán kostry T Množina hrán kostry T = {}= {}

3.3. Postupne skPostupne skúšameúšame hranu e hranu eii pre i pre i = 1..m= 1..m

Ak T + Ak T + eeii neobsahuje cyklusneobsahuje cyklus, tak do, tak do množiny hrán množiny hrán

kostrykostry T T pridpridámeáme hranu hranu eeii

Page 14: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1414

BC

E

GF

D

A

5

7

9

15

8

11

7 5

96

8

Červené sú hrany vybrané do vytváranej kostry.

Page 15: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1515

Ako to naprogramovať Ako to naprogramovať ??ProblProblémy:émy:

Utriediť hrany podľa váh Utriediť hrany podľa váh (QuickSort, HeapSort)(QuickSort, HeapSort)

Zistiť, či po pridaní hrany eZistiť, či po pridaní hrany eii k aktuálne vybraným k aktuálne vybraným

hranám kostry T vznikne cyklushranám kostry T vznikne cyklus

Pozorovanie:Pozorovanie:

CyklusCyklus po pridan po pridaní hrany eí hrany eii = {X, Y} = {X, Y} vzniknevznikne práve práve

vtedyvtedy, , keďkeď medzi vrcholmi X a Y medzi vrcholmi X a Y už už existuje cestaexistuje cesta po vybranpo vybraných kostrových hranáchých kostrových hranách

Počas algoritmu vznikajú Počas algoritmu vznikajú skupiny skupiny vrcholovvrcholov, ktor, ktoré é ssú ú prepojené kostrovými hranami: „ostrovčeky prepojené kostrovými hranami: „ostrovčeky súvislostisúvislosti” ” (komponenty) (komponenty) vzhvzhľadom na hrany ľadom na hrany vytváranej kostry Tvytváranej kostry T

Page 16: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1616

““Komponenty súvislostiKomponenty súvislosti””

PozorovaniePozorovanie vlastností komponentov: vlastností komponentov:

Medzi Medzi vrcholmi vrcholmi X a Y X a Y existuje cestaexistuje cesta po aktuálnych po aktuálnych kostrových hranáchkostrových hranách, ak , ak patria rovnakpatria rovnakýmým komponentomkomponentom

PridanímPridaním hrany e hrany eii = {X, Y}= {X, Y}, kde , kde X a Y sX a Y sú v rôznych ú v rôznych

komponentoch, sa tieto komponenty „komponentoch, sa tieto komponenty „zlúčiazlúčia““

Ako efektívne zistiť, že vrcholy sú v rovnakom Ako efektívne zistiť, že vrcholy sú v rovnakom komponente komponente ??

Page 17: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1717

““Komponenty súvislostiKomponenty súvislosti” 2” 2

Pre každý vrchol budeme udržiavať Pre každý vrchol budeme udržiavať ““identifikidentifikátorátor“ komponentu, do ktorého patrí“ komponentu, do ktorého patrí

PorovnanímPorovnaním „identifikátorov“ vieme rýchlo „identifikátorov“ vieme rýchlo zistiťzistiť, , či sú v rovnakom alebo rôznom komponenteči sú v rovnakom alebo rôznom komponente

Na začiatku je vrchol Na začiatku je vrchol ii v komponente s v komponente s identifikátorom identifikátorom ii

Ak sa 2 komponenty Ak sa 2 komponenty (pridan(pridaním hranyím hrany) ) zlzlúčiaúčia, tak , tak všetkýmvšetkým vrcholom vrcholom jednéhojedného z komponentom z komponentom nastavímnastavímee identifikátor identifikátor druhéhodruhého komponentu komponentu

Page 18: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1818

Programujeme ...Programujeme ...

Page 19: Grafov é algoritmy: minimálna kostra, najkratšie cesty

1919

Prečo to funguje Prečo to funguje ? (D? (Dôkaz sporomôkaz sporom))Nech Nech TT je kostra vypočítaná algoritmom a je kostra vypočítaná algoritmom a YY je nejaká je nejaká minimálna kostraminimálna kostra, ktorá má s kostrou , ktorá má s kostrou TT najviac najviac spoločnýchspoločných hrán hrán

Keďže Keďže TT je rôzne od je rôzne od YY existuje taká hrana z existuje taká hrana z TT, , ktorktorá á nepatrí do nepatrí do YY a naopak (preto a naopak (pretože že TT aj aj YY majú presne majú presne nn-1-1 hrhránán))

Nech Nech ee je je prvá hranaprvá hrana vybraná algoritmo vybraná algoritmomm do kostry do kostry TT, , ktorá ktorá nie jenie je v v YY

Y+eY+e vytv vytvára cyklus ára cyklus (v(viď tvrdeniiď tvrdeniaa o kostrách o kostrách), ktor), ktorý ý musí musí obsahovaťobsahovať nejakú hranu f, ktorá nie je z nejakú hranu f, ktorá nie je z TT (inak by (inak by cyklus ucyklus už existoval v ž existoval v TT, čo nie je možné, čo nie je možné))

Y+e–f Y+e–f je opje opäť kostra, ale keďže äť kostra, ale keďže YY je najlacnejšia, musí je najlacnejšia, musí platiť, že platiť, že ww(e) > w(f)(e) > w(f)

w(e) = w(f)w(e) = w(f) nemnemôže platiťôže platiť, lebo potom , lebo potom Y+e-f Y+e-f by bola by bola kostra s minimkostra s minimálnou cenou, ktorá má viac spoločných álnou cenou, ktorá má viac spoločných hrán s hrán s TT ako ako YY

Page 20: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2020

Prečo to funguje Prečo to funguje ? (? (PokraPokračovaniečovanie))

Keďže wKeďže w(e) > w(f) v algoritme sme spracovali (e) > w(f) v algoritme sme spracovali hranu hranu f predf pred hranou hranou ee

Pripomenutie: Pripomenutie:

e je prvá hrana zaradená do T, ktorá nie je v Ye je prvá hrana zaradená do T, ktorá nie je v Y

f je hrana okrem iného hrana z Y, ktorá nie je v Tf je hrana okrem iného hrana z Y, ktorá nie je v T

KeKeďže sme f nezaradili do T musela vytvárať ďže sme f nezaradili do T musela vytvárať cyklus s hranami, ktoré boli dovtedy vybrané do cyklus s hranami, ktoré boli dovtedy vybrané do T, čo sú T, čo sú zároveňzároveň hrany z Y (vihrany z Y (viď pripomď pripomenutie)enutie)

Teda Teda už časť hrán z Y spolu s f vytvára cyklus, už časť hrán z Y spolu s f vytvára cyklus, čo je čo je sporspor s tým, že Y je kostra s tým, že Y je kostra (t.j. neobsahuje (t.j. neobsahuje žiaden cyklusžiaden cyklus))

Page 21: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2121

ZloZložité otázky o zložitosti ...žité otázky o zložitosti ...

m hrán, n vrcholovm hrán, n vrcholov

Utriedenie hránUtriedenie hrán: O: O(m log m)(m log m)

NNájdenie kostryájdenie kostry: O: O(m) + O(n(m) + O(n22))

Spracovanie jednej z m hrán stojí čas OSpracovanie jednej z m hrán stojí čas O(1)(1)

ZlZlúčenie komponentov stojí čas Oúčenie komponentov stojí čas O(n), ale to (n), ale to vykonvykonávame iba návame iba n-1 kr-1 krátát

Celková časová zložitosť Celková časová zložitosť O(nO(n2 2 + m log m)+ m log m)

ChytreChytrejjšie implementácie: Ošie implementácie: O(m log n)(m log n)

Page 22: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2222

NajkratNajkratšie cesty v grafe šie cesty v grafe – motiv– motiváciaácia

MapaMapa s informáciami o s informáciami o priamych cestách priamych cestách (spojniciach)(spojniciach) medzi medzi mestamimestami

Hľadáme Hľadáme najkratšiunajkratšiu (najr(najrýchlejšiu, ýchlejšiu, najlacnejšiunajlacnejšiu) ) cestucestu medzi medzi 2 mestami2 mestami

Aplikácie: GoogleMaps, Aplikácie: GoogleMaps, GPS GPS + navig+ navigátor, ...átor, ...

Page 23: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2323

Mať orientáciu sa oplatíMať orientáciu sa oplatí

Orientované grafyOrientované grafy sú niekedy sú niekedy lepšielepšie na na modelovanie reálnej situácie:modelovanie reálnej situácie:

Cesta z A do B Cesta z A do B (do kopca) (do kopca) trvá 1 hodinytrvá 1 hodiny

CCesta z B do A esta z B do A (z kopca) (z kopca) trvá 45 minúttrvá 45 minút

Orientovaný ohodnotený grafOrientovaný ohodnotený graf: :

HranyHrany majú svoj majú svoj smer smer

Medzi Medzi 2 vrcholmi najviac 2 hrany: ka2 vrcholmi najviac 2 hrany: každá má iný ždá má iný smersmer

„„guliguličky čky + + šípky, nad ktorými sú čísla“šípky, nad ktorými sú čísla“

Reprezentácia: Reprezentácia: Matica susednostiMatica susednosti nemusínemusí byť byť symetrická symetrická ((mapa[A][B] = 60, mapa[B][A] = 45mapa[A][B] = 60, mapa[B][A] = 45))

Page 24: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2424

Dijkstrov algoritmusDijkstrov algoritmus

1959, Edsger Dijkstra (Holandsko)1959, Edsger Dijkstra (Holandsko)

Vstup: Vstup:

ohodnotenohodnotený ý orientovanorientovanýý/neorientovan/neorientovaný graf G s ý graf G s kladnými ohodnoteniami hránkladnými ohodnoteniami hrán

vrchol vrchol vv grafu G grafu G

Výstup:Výstup:

pre každý vrchol pre každý vrchol ww dĺžka najkratšej cestydĺžka najkratšej cesty z vrcholu z vrcholu vv do vrcholu do vrcholu ww

informinformácia na zrekonštruovanie ácia na zrekonštruovanie najkratnajkratších ších ciestciest

Page 25: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2525

Princíp algoritmuPrincíp algoritmu

Počas výpočtu si Počas výpočtu si udržiavameudržiavame::

Množinu vrcholov Množinu vrcholov SS, do ktorých sa podarilo , do ktorých sa podarilo definitívnedefinitívne vypočítaťvypočítať dĺžku najkratšej cesty zo dĺžku najkratšej cesty zo štartovacieho vrcholuštartovacieho vrcholu vv

Pre každý vrchol Pre každý vrchol ww dĺžku najkratšej cesty dĺžku najkratšej cesty dd[w][w] z z vrcholu vrcholu vv do vrcholu do vrcholu ww, ktorá vedie len cez vrcholy z , ktorá vedie len cez vrcholy z množiny množiny SS

Iniciálne:Iniciálne:

SS = = prázdna množinaprázdna množina

d[w] =d[w] = nekone nekonečno čno (budeme reprezentova(budeme reprezentovať ako ť ako zápornú hodnotuzápornú hodnotu), pre v), pre všetkyšetky ww z z V-{v}V-{v}

d[v] = 0d[v] = 0

Page 26: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2626

Dijkstrov algoritmusDijkstrov algoritmus

KKým existuje vrchol ým existuje vrchol xx z z VV-S-S tak taký, že ý, že dd[x][x] nie je nie je nekonenekonečno:čno:

1.1. Vyber vrchol Vyber vrchol uu z z VV-S-S taký, že taký, že dd[u][u] je je minimminimálneálne

2.2. Pridaj Pridaj uu do mno do množinyžiny SS

3.3. Pre každý vrchol Pre každý vrchol ww z z VV-S-S skúsime zlepšiťskúsime zlepšiť dd[w][w] pomocou cesty prichpomocou cesty pricháádzajdzajúcej z úcej z uu::

Ak Ak dd[w] > d[u] + w((u, w)),[w] > d[u] + w((u, w)), tak tak

d[w] = d[u] + w((u, w))d[w] = d[u] + w((u, w))

Page 27: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2727

Simulácie a vizualizácie algoritmuSimulácie a vizualizácie algoritmu

http://cam.zcu.cz/~rkuzel/aplety/Dijkstra/Dijkstra.http://cam.zcu.cz/~rkuzel/aplety/Dijkstra/Dijkstra.htmlhtml

http://http://www.cs.auckland.ac.nzwww.cs.auckland.ac.nz/software//software/AlgAnimAlgAnim//dijkstra.htmldijkstra.html

http://www.unf.edu/~wkloster/foundations/Dijkstrhttp://www.unf.edu/~wkloster/foundations/DijkstraApplet/DijkstraApplet.htmaApplet/DijkstraApplet.htm

Page 28: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2828

Programujeme ...Programujeme ...

Page 29: Grafov é algoritmy: minimálna kostra, najkratšie cesty

2929

PrePrečo to funguje čo to funguje ? (N? (Náznakáznak/Bonus)/Bonus)

KKľúčové pozorovanieľúčové pozorovanie::

Ak Ak (v, v(v, v11, v, v22, v, v33, …, x, …, w), …, x, …, w) je najkrat je najkratšia cesta z šia cesta z vv

do do ww, potom , potom (v, v(v, v11, v, v22, v, v33, …, x), …, x) je najkrat je najkratšia cesta z šia cesta z

vv do do xx

Pre formálny dôkaz treba ukázať:Pre formálny dôkaz treba ukázať:

Ak zaradíme nejaký vrchol Ak zaradíme nejaký vrchol uu dodo S S, tak naozaj , tak naozaj hodnota hodnota dd[u][u] obsahuje obsahuje dĺžku najkratšej cesty z dĺžku najkratšej cesty z vrcholu vrcholu vv do vrcholu do vrcholu uu

Platnosť Platnosť invariantovinvariantov (tvrdenia platiace v(tvrdenia platiace vždy keďždy keď prechprechádzame istým miestom programuádzame istým miestom programu))

Page 30: Grafov é algoritmy: minimálna kostra, najkratšie cesty

3030

Zložitosť algoritmuZložitosť algoritmu

KaKaždý vrchol ždý vrchol (z (z nn vrcholov) vrcholov) je zaradený do je zaradený do SS najviac raznajviac raz::

Výber prvku Výber prvku uu z minimálnym z minimálnym dd[u][u] : O(n) : O(n)

ZlepZlepšenie šenie dd[w][w] cez vrchol cez vrchol uu: : O(n)O(n)

CelkovCelková časová zložitosť: á časová zložitosť: OO(n(n22))

Úloha na cvičenia:Úloha na cvičenia: Algoritmus nájde dĺžku Algoritmus nájde dĺžku najkratšej cesty z vrcholu najkratšej cesty z vrcholu vv do ostatných do ostatných vrcholov. Ako zistíme, ako vrcholov. Ako zistíme, ako najkratšia cesta najkratšia cesta vyzerávyzerá ??

Page 31: Grafov é algoritmy: minimálna kostra, najkratšie cesty

3131

Ďakujem za pozornosť

Otázky ???