Problém nejkratší cesty

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 20. srpna 2021; kontroly vyžadují 4 úpravy .

Problém nejkratší cesty  je problém najít nejkratší cestu (řetězec) mezi dvěma body (vrcholy) na grafu , ve kterém je minimalizován součet vah hran , které cestu tvoří.

Problém nejkratší cesty je jedním z nejdůležitějších klasických problémů v teorii grafů . Dnes je známo mnoho algoritmů pro jeho řešení .

Tento problém má jiná jména: problém minimální cesty nebo v zastaralé verzi problém dostavníku.

Význam tohoto úkolu je dán jeho různými praktickými aplikacemi . Například navigátoři GPS hledají nejkratší cestu mezi výchozím bodem a cílem. Křižovatky fungují jako vrcholy a silnice jsou hrany, které leží mezi nimi. Pokud je součet délek silnic mezi křižovatkami minimální, pak je nalezená cesta nejkratší.

Definice

Problém nalezení nejkratší cesty v grafu lze definovat pro neorientovaný , řízený nebo smíšený graf. Dále se budeme zabývat zadáním problému v nejjednodušší podobě pro neorientovaný graf. U smíšeného a orientovaného grafu musí být navíc zohledněny směry hran.

Graf je soubor neprázdné množiny vrcholů a hran (množiny dvojic vrcholů). Dva vrcholy v grafu sousedí, pokud mají společnou hranu. Cesta v neorientovaném grafu je posloupnost vrcholů , která sousedí s for . Taková cesta se nazývá cesta délky od vrcholu k ( udává číslo vrcholu cesty a nemá nic společného s číslováním vrcholů na grafu).

Dovolit být  hrana spojující dva vrcholy: a . Je dána váhová funkce , která mapuje hrany na jejich váhy, jejichž hodnoty jsou vyjádřeny jako reálná čísla, a neorientovaný graf . Pak bude nejkratší cesta z vrcholu k vrcholu cesta (kde a ), která má minimální hodnotu součtu .

Existují různé formulace problému nejkratší cesty:

V různých formulacích úlohy mohou hrát roli délky hrany nejen samotné délky, ale také čas, náklady, výdaje, množství vynaložených zdrojů (materiálové, finanční, palivo a energie atd.) popř. další charakteristiky spojené s průchodem každé hrany. Problém tak nachází praktické uplatnění ve velkém množství oblastí (informatika, ekonomie, geografie atd.).

Problém nejkratší cesty podléhá dalším omezením

S problémem nejkratší cesty se velmi často setkáváme v situaci, kdy je třeba vzít v úvahu další omezení. Jejich přítomnost může výrazně zvýšit složitost úkolu [1] . Příklady takových úkolů:

  1. Nejkratší cesta procházející danou množinou vrcholů. Lze uvažovat o dvou omezeních: nejkratší cesta musí procházet vybranou množinou vrcholů a nejkratší cesta musí obsahovat co nejméně nevybraných vrcholů. První z nich je dobře známá v teorii operačního výzkumu [2] .
  2. Minimální pokrytí vrcholů orientovaného grafu cestami. Provádí se hledání minimálního počtu cest pokrývajících graf, konkrétně podmnožiny všech cest tak, aby každý vrchol orientovaného grafu patřil alespoň jedné takové cestě [3] .
  3. Problém požadovaných cest. Je požadováno najít sadu st cest s minimální mohutností tak, aby pro kteroukoli existovala cesta , která ji pokrývá.  je množina některých cest v orientovaném grafu G [4] .
  4. Minimální pokrytí oblouků orientovaného grafu cestami. Problém je najít minimální podmnožinu všech cest z hlediska počtu cest tak, aby každý oblouk patřil alespoň jedné takové cestě. V tomto případě je možný další požadavek, aby všechny cesty vycházely z jednoho vrcholu [5] .

Algoritmy

Vzhledem k tomu, že existuje mnoho různých formulací tohoto problému, existují nejoblíbenější algoritmy pro řešení problému nalezení nejkratší cesty v grafu:

Práce (Cherkassky et al., 1993) [8] uvádí několik dalších algoritmů pro řešení tohoto problému.

Problém hledání nejkratší cesty z jednoho vrcholu ke všem ostatním

V této formulaci úlohy se provádí hledání nejkratší cesty z vrcholu v ke všem ostatním vrcholům grafu.

Nevážený orientovaný graf

Algoritmus Složitost Autor
Šířka první hledání O ( V+E )
Toto je neúplný seznam a nemusí nikdy splňovat určité standardy úplnosti. Můžete jej doplnit z renomovaných zdrojů .

Orientovaný graf s nezápornými váhami

Algoritmus Složitost Autor
- O ( V 2 EL ) Ford 1956
Bellman-Fordův algoritmus O ( VE ) Bellman 1958 [9] , Moore 1957 [10]
- O ( V 2 log V ) Danzig 1958, Danzig 1960, Minty (srov. Pollack & Wiebenson 1960), Whiting & Hillier 1960
Algoritmus Dijkstrova seznamu . O ( V2 ) _ Leyzorek a kol. 1957 [11] , Dijkstra 1959 [12]
Dijkstrův algoritmus s modifikovanou binární haldou O (( E + V ) log V ) -
. . . . . . . . .
Dijkstrův algoritmus využívající Fibonacciho haldu O ( E + V log V ) Fridman & Tarjan 1984 [13] , Fridman & Tarjan 1987 [14]
- O ( E log log L ) Johnson 1982, Karlsson & Poblete 1983
Gabovův algoritmus O ( E log E / V L ) Gabow 1983, Gabow 1985
- O ( E + V √ log L ) Ahuja a kol. 1990
Toto je neúplný seznam a nemusí nikdy splňovat určité standardy úplnosti. Můžete jej doplnit z renomovaných zdrojů .

Orientovaný graf s libovolnými váhami

Algoritmus Složitost Autor
Bellman-Fordův algoritmus O ( VE ) Bellman [9] , Moore [10]
Toto je neúplný seznam a nemusí nikdy splňovat určité standardy úplnosti. Můžete jej doplnit z renomovaných zdrojů .

Problém nejkratší cesty mezi všemi dvojicemi vrcholů

Problém s nejkratší cestou mezi všemi dvojicemi vrcholů pro nevážený orientovaný graf předložil Simbel v roce 1953 [15] , který zjistil, že jej lze vyřešit lineárním počtem maticových manipulací (násobení). Složitost takového algoritmu je O ( V 4 ).

Existují také další rychlejší algoritmy pro řešení tohoto problému, jako je Floyd-Warshallův algoritmus se složitostí O ( V 3 ) a Johnsonův algoritmus (což je kombinace Bellman-Fordova a Dijkstrova algoritmu) se složitostí O ( VE + V 2 log V ).

Aplikace

Problém hledání nejkratší cesty na grafu lze interpretovat různými způsoby a aplikovat v různých oblastech. Následují příklady různých aplikací problému. Další aplikace jsou zkoumány v disciplíně, která se zabývá operačním výzkumem [16] .

Mapové služby

Algoritmy nejkratší cesty grafu se používají k nalezení cest mezi fyzickými objekty v mapových službách, jako jsou Google Maps nebo OpenStreetMap . Ve výukovém videu od Google se můžete naučit různé efektivní algoritmy, které se v této oblasti používají [17] .

Nedeterministický stroj

Pokud si představíme nedeterministický abstraktní stroj jako graf, kde vrcholy popisují stavy a hrany definují možné přechody, pak lze použít algoritmy nejkratší cesty k nalezení optimální sekvence řešení k dosažení hlavního cíle. Pokud jsou například vrcholy stavy Rubikovy kostky a hrana představuje jednu akci na kostce, pak lze algoritmus použít k nalezení řešení s minimálním počtem tahů.

Silniční sítě

Problém nalezení nejkratší cesty na grafu je široce používán při určování nejkratší vzdálenosti v silniční síti.

Silniční síť lze znázornit jako graf s kladnými váhami. Vrcholy jsou silniční křižovatky a okraje jsou silnice, které je spojují. Váhy hran mohou odpovídat délce daného úseku, času potřebnému k jeho překonání nebo nákladům na cestu po něm. Orientované hrany lze použít k zobrazení jednosměrných ulic. V takovém sloupci můžete zadat charakteristiku, která označuje, že některé silnice jsou pro dlouhé cesty důležitější než jiné (například dálnice). Byl formalizován v konceptu (myšlence) dálnic [18] .

Pro implementaci přístupu, kde jsou některé silnice důležitější než jiné, existuje mnoho algoritmů. Řeší problém najít nejkratší cestu mnohem rychleji než podobné na běžných grafech. Takové algoritmy se skládají ze dvou fází:

  1. fázi předzpracování. Graf je předzpracován bez zohlednění počátečních a konečných vrcholů (může to trvat i několik dní, pokud pracujete s reálnými daty). Obvykle se provádí jednorázově a poté se přijatá data použijí.
  2. fáze žádosti. Provádí se požadavek a hledání nejkratší cesty, přičemž jsou známy počáteční a konečný vrchol.

Nejrychlejší algoritmus dokáže tento problém vyřešit na silnicích Evropy nebo Ameriky ve zlomku mikrosekundy [19] .

Další přístupy (techniky), které se v této oblasti používají:

Podobné problémy

Existují problémy, které jsou podobné problému hledání nejkratší cesty v grafu.

Sdělení problému lineárního programování

Nechť je dán orientovaný graf ( V , A ), kde V  je množina vrcholů a A  množina hran, s počátečním vrcholem s , koncem t a váhami w ij pro každou hranu ( i , j ) v A . Váha každé hrany odpovídá programové proměnné x ij .

Pak je problém položen následovně: najděte minimum funkce , kde , za předpokladu, že pro všechna i a j platí následující nerovnost :

Viz také

Poznámky

  1. Aplikace teorie grafů na programování, 1985 .
  2. Aplikace teorie grafů v programování, 1985 , str. 138-139.
  3. Aplikace teorie grafů v programování, 1985 , str. 139-142.
  4. Aplikace teorie grafů v programování, 1985 , str. 144-145.
  5. Aplikace teorie grafů v programování, 1985 , str. 145-148.
  6. 1 2 Diskrétní matematika. Kombinatorická optimalizace na grafech, 2003 .
  7. Aplikace teorie grafů v programování, 1985 , str. 130-131.
  8. Čerkasskij, Goldberg, Radzik, 1996 .
  9. 1 2 Bellman Richard, 1958 .
  10. 12 Moore , 1957 .
  11. M. Leyzorek, 1957 .
  12. Dijkstra, 1959 .
  13. Michael Fredman Lawrence, 1984 .
  14. Fredman Michael, 1987 .
  15. Shimbel, 1953 .
  16. Vývoj algoritmů a softwaru pro problémy plánování geometrických cest, 1996 .
  17. Rychlé plánování trasy .
  18. Dimenze dálnice, 2010 .
  19. A Hub-Based Labeling Algorithm, 2011 .
  20. Ladyzhensky Y., Popoff Y. Algorithm, 2006 .

Literatura