Trumpiausio kelio algoritmas Trumpiausio kelio problema graf teorijos
Trumpiausio kelio algoritmas
• Trumpiausio kelio problema - grafų teorijos problema, bendru atveju formuluojama kaip radimas tokio kelio tarp dviejų svorinio grafo (arba daugiau) viršūnių, kad briaunų svorių suma būtų mažiausia.
• Nesvorinis grafas • Nesvoriniame grafe galima naudoti paiešką į gylį (DFS – depth first search) arba paiešką į plotį (BFS - breadth first search). • Svorinis grafas
Kruskalo algoritmas
Svarbiausi kelio radimo algoritmai: • Dijkstros algoritmas, naudojamas rasti kelią tarp dviejų viršūnių tokiuose grafuose, kur kiekvienos briaunos svoris ne mažesnis už 0. Algoritmu pakankamai efektyviai galima skaičiuoti ir trumpiausius kelius nuo pradinės viršūnės s iki bet kurios kitos viršūnės • Floydo algoritmas (ar Floido-Varšalo algoritmas), randantis trumpiausius kelius tarp kiekvienos viršūnių poros. • Belmano-Fordo algoritmas, randantis kelius ir tuose grafuose, kur briaunos svoris gali būti neigiamas • A* algoritmas - euristinis algoritmas keliui tarp dviejų viršūnių rasti Praktikoje naudojamos įvairios jų modifikacijos. [7]
Dijkstra (liet. Deikstros) - algoritmas, kurį sukūrė kompiuterių specialistas Edgar Dijkstra; Edsger Wybe Dijkstra [1930, Rotterdam (the Netherlands) - 06. 08. 2002, Nuenen (the Netherlands)]
Dijkstros algoritmas sprendžia vieno šaltinio trumpiausių kelių problemą kryptiniame grafe su ne neigiamais kraštinių svoriais. • Pavyzdžiui, jei grafo viršūnės vaizduoja miestus ir kraštinių svoriai vaizduoja atstumą tarp tų miestų, sujungtą tiesioginiu keliu, Dijkstra algoritmas naudojamas surasti trumpiausius kelius tarp tų miestų.
Algoritmo pradiniai duomenys • yra kryptinis grafas G su kraštinių svoriais ir šaltinių viršūne S grafe G. • Mes pavadinsime V visų viršūnių rinkinį grafe G. • Kiekviena grafo kraštinė yra sutvarkyta viršūnių pora (u, v), parodanti ryšį tarp viršūnių u ir v. • Visų kraštinių rinkinys yra E. • Kraštinių svoriai yra užduodami pagal svorių funkciją w: E; čia u(u, v) yra ne neigiama kaina tiesiogiai einant nuo viršūnės U iki viršūnės V. Kraštinės kaina yra laikoma atstumu tarp šitų dviejų viršūnių. Kelio kaina tarp dviejų viršūnių yra kraštinių kainų suma tame kelyje.
Kintamieji: • • S - pradžios viršūnė F - aplankytų viršūnių sąrašas G – grafas E - briauna su viršūnėmis (v 1, v 2) V – viršūnėdis t(i) - atstumų nuo S iki kiekvienos V masyvas prev(i) - rodyklė į ankstesnes Vi – indeksas U - neaplankytų viršūnių sąrašas
Pseudokodas: FOR i=0 to |V|-1 dist(i)=INFINITY prev(i)=NULL END FOR WHILE F nepilnas imame viršūnę v is U su artimiausiu keliu iki S pridedame V į F FOR V briaunai(v 1, v 2) IF (dist(v 1)+ilgis(v 1, v 2) < dist(v 2)=dist(v 1)+ilgis(v 1, v 2) prev(v 2)=v 1 [galbūt reikia atnaujinti U] END IF END FOREND WHILE
- Slides: 12