24. MINIMÁLIS KÖLTSÉGŰ UTAK I.

Hasonló dokumentumok
26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

23. SZÉLESSÉGI BEJÁRÁS

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

Gráfalgoritmusok ismétlés ősz

GRÁFOK, GRÁF ALGORITMUSOK. Jegyzet

Gráfalgoritmusok Legrövidebb utak egy forrásból Dijkstra algoritmus Bellman-Ford algoritmus 31

Diszkrét matematika 2.C szakirány

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Gráfalgoritmusok 3 Néhány probléma modellezése gráfokkal 3 Alapfogalmak, jelölések 7 Gráfok ábrázolása 9 Bejárási stratégiák, szélességi bejárás 15

22. GRÁFOK ÁBRÁZOLÁSA

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Algoritmuselmélet 7. előadás

A számítástudomány alapjai

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Algoritmusok és adatszerkezetek 2.

Euler tétel következménye 1:ha G összefüggő síkgráf és legalább 3 pontja van, akkor: e 3

HÁLÓZAT Maximális folyam, minimális vágás

Diszkrét matematika 1. estis képzés

Diszkrét matematika 2.C szakirány

Algoritmusok bonyolultsága

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Gráf-algoritmusok Legrövidebb utak

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Gráfok. Programozás II. előadás. Szénási Sándor.

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

További forgalomirányítási és szervezési játékok. 1. Nematomi forgalomirányítási játék

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

Dijkstra algoritmusa

Diszkrét matematika 2.

HAMILTON KÖR: minden csúcson PONTOSAN egyszer áthaladó kör. Forrás: (

Diszkrét matematika 2.C szakirány

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

minden x D esetén, akkor x 0 -at a függvény maximumhelyének mondjuk, f(x 0 )-at pedig az (abszolút) maximumértékének.

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Algoritmuselmélet 18. előadás

Mohó algoritmusok. Példa:

Algoritmuselmélet 11. előadás

Gráfelméleti alapfogalmak

A gráffogalom fejlődése

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

HAMILTON ÚT: minden csúcson PONTOSAN egyszer áthaladó út

Programozási módszertan. Mohó algoritmusok

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

angolul: greedy algorithms, románul: algoritmi greedy

28. MÉLYSÉGI BEJÁRÁS

Diszkrét Matematika MSc hallgatók számára 7. Előadás Párosítási tételek Előadó: Hajnal Péter Jegyzetelő: Kovácsházi Anna

Analízis I. Vizsgatételsor

17. előadás: Vektorok a térben

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Adatszerkezetek 2. Dr. Iványi Péter

KOVÁCS BÉLA, MATEMATIKA I.

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.

Az optimális megoldást adó algoritmusok

Analízis II. Analízis II. Beugrók. Készítette: Szánthó József. kiezafiu kukac gmail.com. 2009/ félév

Algoritmusok bonyolultsága

Algoritmuselmélet 2. előadás

Intelligens Rendszerek Elmélete IRE 4/32/1

Programozási segédlet

6. Függvények. Legyen függvény és nem üreshalmaz. A függvényt az f K-ra való kiterjesztésének

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

Adatszerkezetek II. 1. előadás

SHk rövidítéssel fogunk hivatkozni.

Javító és majdnem javító utak

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Hálózati folyamok. Tétel: A maximális folyam értéke megegyezik a minimális vágás értékével.

Diszkrét matematika 1. estis képzés

Diszkrét matematika 2.C szakirány

Sarokba a bástyát! = nim

Formális nyelvek - 9.

SzA II. gyakorlat, szeptember 18.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Struktúra nélküli adatszerkezetek

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

Diszkrét matematika 2.

2. Visszalépéses stratégia

Sorozatok. 5. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Sorozatok p. 1/2

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Sorozatok, sorok, függvények határértéke és folytonossága Leindler Schipp - Analízis I. könyve + jegyzetek, kidolgozások alapján

Gráfelmélet/Diszkrét Matematika MSc hallgatók számára. 3. Előadás

Átírás:

24. MINIMÁLIS KÖLTSÉGŰ UTAK I. Az útvonaltervezés az egyik leggyakrabban végrehajtott eljárása a gráfok alkalmazásai körében. A feladat például a közlekedésben jelentkezik. A gráfot itt az a térkép jelenti, amely tartalmazza a kiindulási pontot és a célállomást, amellett a szóba jövő utak sem futnak le róla. Az egyes útszakaszok megtételéhez (például üzemanyag és idő) ráfordítás szükséges, ezért olyan utat szeretnénk ezekből a szakaszokból összeállítani, amelynek a költsége minél kisebb, esetleg minimális. A gráf éleihez tehát nemnegatív költségértékeket rendelünk. Az útszakaszok lehetnek mindkét irányban járhatók, ha például a navigációs probléma az ország térképén két város között merül fel, illetve lehetnek egyirányúak, ha egy városon belül keresünk legrövidebb utat két pont között. Ennek megfelelően a gráf egyaránt lehet irányítás nélküli, illetve irányított. A gráfon megfogalmazott, minimális költségű útvonal keresése során alapesetben nem támaszkodhatunk más ismeretre, mint az élsúlyok értékére. Nincs olyan háttértudásunk, amely eleve kizárná bármelyik csúcsot az útvonalból. A feladatot ezért az általános esetben úgy fogalmazzuk meg, hogy egy kiinduló csúcsból a gráf minden pontjához keressük az oda vezető minimális költségű utat. A kitűzött feladat megoldására Dijkstra nevezetes algoritmusát ismertetjük. Ez egy mohó eljárás, amely a startcsúcsból kiindulva, minden lépésben az addigi legkisebb költséggel elérhető csúcsot választja ki, és annak szomszédjaiba új költségeket számol. (Könnyen felismerhetjük majd, hogy a szélességi bejárásnál egyszerűbb esetben találkoztunk már ennek a megoldásnak az elvével.) Az eljárás ismertetésénél újra hasznát vesszük annak, hogy megkülönböztetjük az absztrakt adatszerkezet, illetve az adatok reprezentálásnak a szintjét. Az ADS szinten megadott algoritmus nem csak szemléletes, hanem a megengedhető mértékig nemdeterminisztikus, valamint az eltérő reprezentációk közös kiindulópontját képezi. Adatábrázolás szintjén mindkét gráf-reprezentációra, valamint az algoritmusban szereplő elsőbbségi sor két megvalósítására meggondoljuk a műveletigényét. 24.1. A minimális költségű utak problémája A bevezetőben körvonalazott problémát pontosabban is megfogalmazzuk, mint gráfon értelmezett feladatot. Feladat. Adott egy G = (V, E) élsúlyozott, véges gráf és egy s V csúcs, a kezdőcsúcs. A gráf élei lehetnek irányítatlanok, és rendelkezhetnek irányítással. Szeretnénk meghatározni minden v V csúcsra az s-ből v-be vezető legkisebb költségű utat, a költségértékével együtt. Elterjedt az a szóhasználat, amely a kezdőcsúcsot startcsúcsnak vagy forrásnak nevezi, a minimális költségű utat pedig optimális útnak, vagy (kissé megtévesztően) legrövidebb útnak mondja, amit mindjárt meg is indokolunk. Módosítsuk a szélességi bejárásnál bevezetett úthossz fogalmunkat. Legyen G = (V, E) élsúlyozott, irányított vagy irányítás nélküli gráf c: V V R súlyfüggvénnyel. A v 0 v k = v 0, v 1,, v k út költsége (összsúlya, hossza) az utat alkotó élek súlyainak az összege, azaz 0 ha k = 0 k d(p) = { c(v i 1, v i ) egyébként i=1

Vezessük be a legkisebb költségű (minimális költségű, optimális vagy legrövidebb) út fogalmát. Az u-ból a v-be (u, v V) vezető minimális költségű út súlya (összköltsége, hossza) legyen min{d(u v)} ha u v út a gráfban δ(u, v) = { különben Az u csúcsból a v-be vezető legrövidebb úton a δ(u, v) súlyú utak egyikét értjük. A szélességi keresésnél már találkoztunk hasonló feladattal, az ottani legrövidebb (legkisebb élszámú) utak nyilvántartásával. Most is ugyanúgy járunk el, egy P[1 n] tömbben tartjuk nyilván minden csúcsnak a megelőzőjét, az algoritmus által talált (egyik) legrövidebb úton. A szélességi fához hasonlóan definiálhatjuk a legrövidebb utak feszítőfáját is. Az F(V, E ) gráf a G = (V, E) gráfban a legrövidebb utak fája, ha V elemei az s-ből elérhető csúcsok, E E és minden v V csúcsra pontosan egy egyszerű út vezet s-ből v-be, és ez az út egyike az s-ből v-be vezető legrövidebb G-beli utaknak. 24.2. A megoldás módszere A megoldás elve a következő. Minden lépésben tartsuk nyilván az összes csúcsra, a forrástól az illető csúcsba vezető, eddig talált legkisebb összsúlyú utat. A már megismert módon a d[1.. n] tömbben a távolságot, és P[1.. n] tömbben a megelőző csúcsot tároljuk. Azt mondhatjuk, hogy egy v V csúcs már KÉSZ, ha ismert a hozzá vezető legrövidebb út. Kezdetben egyetlen csúcs sem KÉSZ, és azt szeretnénk elérni, hogy az eljárás először magát az s kezdőcsúcsot válassza ki, hiszen innen indul a keresés és formálisan nézve az önmagából hozzá vezető legrövidebb út nulla költsége eleve ismert. 1. Kezdetben a forrástól vett távolság legyen a kezdőcsúcsra 0, a többi csúcsra. 2. Minden lépésben a nem KÉSZ csúcsok közül tekintsük az egyik legkisebb eddigi költségű v csúcsot. A v-t terjesszük ki, azaz a szomszédjaira számítsuk ki a v-be vezető, és onnan egy kimenő éllel meghosszabbított út költségét. Amennyiben ez jobb (kisebb), mint az illető szomszédba eddig talált legrövidebb út összsúlya, akkor innen kezdve ezt az utat tekintsük az adott szomszédba vezető, eddig talált legrövidebb útnak. Ezt az eljárást szokás közelítésnek is nevezni. 24.3. Az eljárás helyessége Az algoritmus helyességét több lépésben igazoljuk. 1. Állítás. A v 0 V csúcsból a v k V csúcsba vezető, bármely legrövidebb v 0,, v k 1, v k út olyan, hogy a v 0,, v k 1 út is egyike a v 0 -ból a v k 1 -be vezető legrövidebb utaknak. Bizonyítás. Az úthossz definíciójából tudjuk, hogy d( v 0,, v k 1, v k ) = d( v 0,, v k 1 ) + c(v k 1, v k ). Indirekt tegyük fel, hogy létezik q = v 0,, v k 1 útnál rövidebb p út v k 1 -be. Ekkor ezen az úton eljutva v k 1 -be az úthossz: d(p) + c(v k 1, v k ) < d(q) + c(v k 1, v k ), mivel d(p) < d(q). Tehát találtunk a legrövidebb útnál rövidebb utat, ami ellentmondás. 2. Az előző állításból következik, elegendő a legrövidebb úton csak a megelőző csúcsot eltárolni. Az állítás könnyen általánosítható "a legrövidebb út részútja is legrövidebb út" állításra.

3. Állítás. v 0,, v k úton, a d(v 0 v 0 ), d(v 0 v 1 ),, d(v 0 v k ) részutak költségei monoton növő sorozatot alkotnak. Bizonyítás. Mivel nincsenek negatív élsúlyok, ezért d(v 0 v i ), i = 0 k nem negatív tagú sorozatnak tekinthető. 4. Állítás. Az egyes lépések után, u V\KÉSZ csúcs esetén, ha s u út a gráfban, akkor az u csúcshoz vezető legrövidebb úton v KÉSZ csúcs. Bizonyítás. Az s KÉSZ biztosan teljesül. 5. Állítás. Minden lépésben, u V\KÉSZ csúcsra teljesül d min δ(s, u), azaz s-ből u-ba vezető utak távolsága nem csökkenhet a jelenlegi minimum alá. Bizonyítás. Az első lépésben triviálisan teljesül az állítás, mivel d min = 0 és nincs negatív élsúly. Indirekt tegyük fel, hogy u V\KÉSZ, amelyre az eddig talált legrövidebb p út d(p) d min, de a legrövidebb p = s u útra d min > d(p ). Tudjuk, hogy van KÉSZ csúcsa a p útnak (2. lépéstől kezdve). Legyenek v KÉSZ és w Szomszéd(v)\KÉSZ egymást követő csúcsai p -nak (biztos létezik w, mivel u V\KÉSZ, legfeljebb w = u). Mivel v KÉSZ, így már ismert v-be vezető egyik legrövidebb út, ami része az u-ba menő egyik legrövidebb útnak. Legyen u-ba menő egyik legrövidebb útnak w-ig tartó részútja p = s v w, aminek a hossza már w ismert, mivel v-t már KÉSZ-nek választottuk, ezért p ismert, továbbá v-t kiterjesztettük, v így p w is ismert. Azt is tudjuk, hogy d min d(p ), mivel w KÉSZ. A monotonitás w tulajdonság miatt d(p w ) d(p ) d min d(p w ) d(p ), ami ellentmond az indirekt feltevésnek. 6. Állítás. Az egyes lépésekben az algoritmus által KÉSZ-nek kiválasztott u V csúcsra valóban ismert az egyik legrövidebb s u út. Bizonyítás. Legyen p = s u a jelenleg ismert legrövidebb út (ami lehet távolságú is), amelyre tudjuk d(p) = d min, és indirekt tegyük fel, hogy p = s u út, amelyre d(p ) < d(p). Tudjuk, hogy v V\KÉSZ és w Szomszéd(v)\KÉSZ csúcs a p úton. A korábbiakban látott módon levezethető, hogy d(p) = d min d(p w ) d(p ) ami ellentmond az indirekt feltevésnek. Tehát rövidebb s v utat a későbbiekben sem találhatunk. 7. Állítás. A fenti algoritmus, negatív élsúlyokat nem tartalmazó G = (V, E) véges gráf esetén, s V forrás (kezdőcsúcs) és v V csúcsra, meghatározza s-ből v-be vezető legrövidebb utat és annak hosszát. Bizonyítás. Az algoritmus minden lépésben KÉSZ-nek választ egy csúcsot. Mivel véges sok csúcsa van a gráfnak, az algoritmus véges időn belül terminál, és v V csúcs KÉSZ-en van, azaz ismert a legrövidebb s v út. 24.4. Dijkstra algoritmusa A d[1.. n] és P[1.. n] tömböket, a korábban ismertetett módon, a távolság és a megelőző csúcs nyilvántartására használjuk. A KÉSZ halmazba rakjuk azokat a csúcsokat, amelyekhez már ismerjük az egyik legrövidebb utat. Ezen kívül, használunk egy minimumválasztó elsőbbségi (prioritásos) sort (minq), amelyben a csúcsokat tároljuk a már felfedezett, legrövidebb d(s u) távolsággal, mint kulcs értékkel. A Dijkstra algoritmusa a 24.1. ábrán látható.

24.1. ábra. A Dijkstra algoritmus és műveletigénye 24.5. Az algoritmus megvalósítása reprezentációs szinten Vizsgáljuk meg a prioritásos sor (minq) megvalósításának két, természetes módon adódó lehetőségét. 1. A prioritásos sort valósítsuk meg rendezetlen tömbbel, azaz a prioritásos sor legyen maga a d[1.. n] tömb. Ekkor a minimum kiválasztására egy feltételes minimum keresést kell alkalmazni, amelynek a műveletigénye Θ(n). A Feltölt(minQ) és a Helyreállít(minQ) absztrakt műveletek megvalósítása pedig egy SKIP-pel történik. 2. Kupac adatszerkezet használatával is reprezentálhatjuk a prioritásos sort. Ekkor a Feltölt(minQ) eljárás, egy kezdeti kupacot épít, amelynek a műveletigénye lineáris (lásd: 16. fejezet). Azonban most a d[1..n] tömb változása esetén a kupacot is karban kell tartani, mivel a kulcs érték változik. Ezt a Helyreállít(minQ) eljárás teszi meg, amely a csúcsot a gyökér felé "szivárogtatja" fel, ha szükséges (mivel a kulcs értékek csak csökkenhetnek). Ennek a műveletigénye Θ(log n)-es. Megjegyzés. Nem szükséges kezdeti kupacot építeni, felesleges a kupacba rakni a végtelen távolságú elemeket. Kezdetben csak a kezdőcsúcs legyen a kupacban, majd amikor először elérünk egy csúcsot és a távolsága már nem végtelen, elég akkor berakni a kupacba. 24.6. Az algoritmus szemléltetése A 24.2. ábrán megfigyelhető Dijkstra algoritmusának működése lépésenként. A KÉSZ halmazhoz való tartozást színezéssel valósítjuk meg. Legyenek a nem KÉSZ csúcsok fehérek, a KÉSZ csúcsok pedig fekete színűek. A csúcsokra a címkén kívül, felírtuk az eddig talált legrövidebb út hosszát is (d tömbbeli értékeket). A végtelen nagy távolságot jelöljük '#' jellel. A forrás legyen az 1-es címkéjű csúcs. Az inicializáló lépés után a kezdőcsúcs 0, a többi csúcs végtelen súllyal szerepel az elsőbbségi sorban. Az első lépésben kivesszük a prioritásos sorból az 1-es csúcsot (mivel az ő prioritása a legkisebb). Az 1-es csúcshoz már ki van számítva a legrövidebb út, tehát ez a csúcs már elkészült, színezzük feketére. Kiterjesztjük az 1-est, azaz a szomszédjaira

kiszámítjuk az 1-esből kimenő éllel meghosszabbított utat. Ha ez javító él, azaz az 1-esen átmenő út rövidebb, mint az adott szomszédba eddig talált legrövidebb út, akkor a szomszédban ezt feljegyezzük (d és P tömbbe). Az ábrán kiemeltük a javító éleket. Megfigyelhető, hogy a 2-es csúcsba már korábban is találtunk 10 hosszú utat 1, 2, de a második lépésben, a 4-es csúcs kiterjesztésekor, találunk, a 4-es csúcson átmenő rövidebb 8 hosszú utat. A 2-es csúcs kiterjesztésekor a 3-as csúcsba találtunk egy rövidebb utat. A negyedik lépésben még találunk rövidebb utat az 5-ös csúcsba, majd az utolsó lépésben kivesszük a prioritásos sorból az 5-ös címkéjű csúcsot is. Az utolsó lépésben berajzoltuk a legrövidebb utak fáját alkotó éleket. 24.2. ábra. A Dijkstra algoritmus lépésenkénti végrehajtása

24.7. Műveletigény A prioritásos sor fenti két megvalósítása esetén, a következőképpen alakul az algoritmus műveletigénye. A 24.1-es ábrán feltüntettük az egyes műveletek költségét a két ábrázolás estén. A belső ciklust célszerű globálisan kezelni, ekkor mondható, hogy összesen legfeljebb annyiszor fut le, ahány éle van a gráfnak. 1. Rendezetlen tömb esetén: T(n) = Ο(1 + n 1 + 1 + 0 + n 2 + n + e) = Ο(n 2 + e) = Ο(n 2 ) 2. Kupac esetén: T(n) = Ο(1 + n 1 + 1 + n + n log n + n + e log n) = Ο((n + e) log n) Rendezetlen tömbbel való ábrázolás műveletigénye csak a csúcsok számától függ, míg a kupacos ábrázolás műveletigénye, az élek számának is a függvénye. Sűrű gráfnak nevezzük az olyan gráfokat, amelyre e n 2, ritka gráfoknak pedig, amelyre e n (vagy "kevesebb"). Tehát a kupacos ábrázolás műveletigénye ritka gráf esetén Ο(n log n), míg sűrű gráf esetén Ο(n 2 log n). Az az érdekes helyzet adódott, hogy a gráf sűrűsége befolyásolja milyen ábrázolást érdemes választani. A kupac, csak a ritka gráfok esetén hatékonyabb, míg sűrű gráfok esetén a rendezetlen tömbbel való reprezentáció az olcsóbb. Tehát a reprezentáció szintjén sűrű gráf esetén csúcsmátrix és rendezetlen tömb, titka gráf esetén szomszédsági lista és kupac javasolt. 24.8. Megjegyzések A mohó algoritmus mindig az adott lépésben optimálisnak látszó döntést hozza, vagyis a lokális optimumot választja abban a reményben, hogy ez globális optimumhoz fog majd vezetni. Dijkstra algoritmusa is mohó stratégiát követ, amikor minden lépésben KÉSZ-nek választ egy csúcsot. Mivel a legrövidebb út részútja is legrövidebb út, így a lokális optimumok választásával elérhetjük a globális optimumot. Most vizsgáljuk meg a szélességi keresés és a Dijkstra algoritmus kapcsolatát. Mindkét algoritmusnál, egy kezdőcsúcsból kiinduló legrövidebb utakat állítunk elő, csak a Dijkstra algoritmusnál az utak hosszának fogalmát általánosítjuk. Legyen minden él súlya egységnyi, ekkor a Dijkstra algoritmus egy szélességi keresést hajt végre. Tehát mondhatjuk, hogy a szélességi keresés speciális esete a Dijkstra algoritmusnak, ahol a prioritásos sor helyett, egy egyszerű sort használunk, amellyel javítunk a műveletigényen. Azt kell belátni, hogy a sor használatával is mindig a legkisebb távolságú csúcsot választjuk KÉSZ-nek, de ez következik a szélességi keresésnél megvizsgált invariáns tulajdonságból.