Algoritmus nejkratší cesty paralelního jednoho zdroje - Parallel single-source shortest path algorithm
Ústřední problém v algoritmu teorie grafů je problém s nejkratší cestou. Jedna z generalizace problému s nejkratší cestou je známá jako single-source-shortest-paths (SSSP) problém, který spočívá v nalezení nejkratší cesty mezi každou dvojicí vrcholů v grafu. Existují klasické sekvenční algoritmy které tento problém řeší, jako např Dijkstrův algoritmus. V tomto článku však uvádíme dva paralelní algoritmy řešení tohoto problému.
Další variantou problému je problém APSP (all-pair-shortest-paths), který má také paralelní přístupy: Paralelní algoritmus nejkratší cesty všech párů.
Definice problému
Nechat být směrovaný graf s uzly a hrany. Nechat být rozlišujícím vrcholem (nazývaným "zdroj") a být funkcí přiřazující nezápornou skutečnou váhu každé hraně. Cílem problému s jedním zdrojem a nejkratší cestou je vypočítat pro každý vrchol dosažitelný z , váha cesty s minimální hmotností od na , označeno a zkráceně . Váha dráhy je součtem hmotností jejích hran. Jsme si stanovili -li je nedosažitelný z .[1]
Algoritmy sekvenční nejkratší cesty běžně používají iterativní metody značení založené na zachování předběžné vzdálenosti pro všechny uzly; je vždy nebo váha nějaké cesty z na a tudíž horní hranice . Předběžné vzdálenosti se zlepšují prováděním relaxací okrajů, tj. Hrany sady algoritmů .[1]
U všech paralelních algoritmů budeme předpokládat a PRAM model se souběžným čtením a souběžným zápisem.
Algoritmus krokování Delta
Krokový algoritmus delta je algoritmus korekce štítků, což znamená, že předběžnou vzdálenost vrcholu lze několikrát korigovat pomocí relaxací hran až do posledního kroku algoritmu, kdy jsou všechny předběžné vzdálenosti pevné.
Algoritmus udržuje způsobilé uzly s předběžnými vzdálenostmi v řadě segmentů, z nichž každý představuje rozsah vzdáleností velikosti . Během každé fáze algoritmus odstraní všechny uzly prvního neprázdného kbelíku a maximálně uvolní všechny odchozí hrany váhy . Hrany s vyšší hmotností se uvolní až po jistém vyrovnání příslušných počátečních uzlů.[1] Parametr je kladné reálné číslo, které se také říká „šířka kroku“ nebo „šířka kbelíku“.[1]
Paralelismus se získá současným odstraněním všech uzlů prvního neprázdného kbelíku a uvolněním jejich odchozích světelných hran v jedné fázi. Pokud uzel byl odstraněn z aktuálního bloku s konečnou hodnotou vzdálenosti pak v nějaké následující fázi bude nakonec znovu vložen do a odchozí světelné hrany bude znovu uvolněná. Zbývající těžké hrany vycházející ze všech uzlů, ze kterých byly odstraněny zatím jsou uvolněné jednou provždy, když nakonec zůstane prázdný. Následně algoritmus vyhledá další neprázdný kbelík a pokračuje, jak je popsáno výše.[1]
Maximální nejkratší váha cesty pro zdrojový uzel je definován jako , zkráceně .[1] Velikost cesty je také definována jako počet hran na cestě.
Rozlišujeme světlé hrany od těžkých hran, kde mají lehké hrany váhu maximálně a těžké hrany mají váhu větší než .
Následuje krokový algoritmus delta v pseudokódu:
1 pro každého dělat 2 ; (* Vložte zdrojový uzel se vzdáleností 0 *) 3 zatímco dělat (* Fáze: Některé uzly ve frontě zbývají (a) *) 4 | (* Nejmenší neprázdný kbelík (b) *) 5 | (* Pro segment B [i] zatím nejsou odstraněny žádné uzly *) 6 | zatímco dělat (* Nová fáze (c) *) 7 | | (* Vytvořit požadavky na světlé hrany (d) *) 8 | | (* Pamatujte si smazané uzly (e) *) 9 | | (* Aktuální kbelík prázdný *) 10 | | (* Uvolněte se, uzly mohou (znovu) vstoupit do B [i] (f) *) 11 | (* Vytvořit požadavky na těžké hrany (g) *) 12 | (* Relaxace nenaplní B [i] (h) *) 1314 Funkce : sada požadavku15 vrátit se 1617 Postup 18 pro každého dělat 1920 Postup (* Vložte nebo přesuňte w do B, pokud x < operatorname {tent} (w) *) 21 -li pak22 | (* Pokud je v, vyjměte ze starého kbelíku *) 23 | (* Vložit do nového bloku *) 24 |
Příklad

Následuje podrobný popis provedení algoritmu pro malý ukázkový graf. Zdrojovým vrcholem je vrchol A a se rovná 3.
Na začátku algoritmu mají všechny vrcholy kromě zdrojového vrcholu A nekonečné předběžné vzdálenosti.
Kbelík má rozsah , Kbelík má rozsah a kbelík má rozsah .
Kyblík obsahuje vrchol A. Všechny ostatní segmenty jsou prázdné.
Uzel | A | B | C | D | E | F | G |
---|---|---|---|---|---|---|---|
Předběžná vzdálenost | 0 |
Algoritmus uvolňuje všechny dopadající světelné hrany , což jsou hrany spojující A s B, G a E.
Vrcholy B, G a E jsou vloženy do kbelíku . Od té doby je stále prázdná, těžká hrana spojující A s D je také uvolněná.
Uzel | A | B | C | D | E | F | G |
---|---|---|---|---|---|---|---|
Předběžná vzdálenost | 0 | 3 | 5 | 3 | 3 |
Nyní dopadají světelné hrany jsou uvolnění. Vrchol C je vložen do kbelíku . Od teď je prázdná, těžká hrana spojující E s F může být uvolněná.
Uzel | A | B | C | D | E | F | G |
---|---|---|---|---|---|---|---|
Předběžná vzdálenost | 0 | 3 | 6 | 5 | 3 | 8 | 3 |
V dalším kroku kbelík je zkoumáno, ale nevede k žádným úpravám předběžných vzdáleností.
Algoritmus končí.
Runtime
Jak již bylo zmíněno dříve, je maximální nejkratší váha dráhy.
Pojďme nazvat cestu s maximální hmotností a bez opakování hran a -cesta.
Nechat označuje množinu všech párů uzlů připojeno některými -cesta a nechte . Podobně definujte jako soubor trojic takhle a je světelná hrana a nechte .
Algoritmus sekvenčního delta krokování potřebuje nanejvýš operace. Jednoduchá paralelizace běží v čase .[1]
Pokud vezmeme pro grafy s maximálním stupněm a náhodné hmotnosti hran rovnoměrně rozložené v , sekvenční verze algoritmu potřebuje průměrný celkový čas a jednoduchá paralelizace trvá v průměru .[1]
Graf 500
Třetí výpočetní jádro Graf 500 benchmark spouští výpočet nejkratší cesty z jednoho zdroje.[2] Referenční implementace benchmarku Graph 500 používá pro tento výpočet delta krokovací algoritmus.
Algoritmus krokování poloměru
U algoritmu krokování poloměru musíme předpokládat, že náš graf je neorientovaný.
Vstupem do algoritmu je vážený, neorientovaný graf, zdrojový vrchol a hodnota cílového poloměru pro každý vrchol, daná jako funkce .[3] Algoritmus navštěvuje vrcholy ve vzrůstající vzdálenosti od zdroje . Na každém kroku , Poloměrný krok zvyšuje poloměr se středem z na a urovná všechny vrcholy v mezikruží .[3]
Následuje algoritmus krokování poloměru v pseudokódu:
Vstup: Graf , poloměry vrcholů a zdrojový uzel . Výstup: Vzdálenosti grafu z . 1 , 2 pro každého dělat , , 3 zatímco dělat 4 | 5 | opakovat 6 | | pro každého Svatý dělat 7 | | | pro každého dělat 8 | | | | 9 | dokud Ne bylo aktualizováno 10 | 11 | 12 vrátit se
Pro všechny , definovat být soused set S. Při provádění standardu vyhledávání na šířku nebo Dijkstrův algoritmus, hranice je sousední množina všech navštívených vrcholů.[3]
V algoritmu Radius-Stepping je nová kulatá vzdálenost se rozhoduje v každém kole s cílem omezit počet dílčích kroků. Algoritmus zabírá poloměr pro každý vrchol a vybere a na krok tím, že vezmeme minimum nade vše na hranici (řádek 4).
Řádky 5-9 pak spusťte Bellman-Ford dílčí kroky, dokud všechny vrcholy s poloměrem menším než jsou usazeni. Vrcholy uvnitř jsou poté přidány do navštívené sady .[3]
Příklad

Následuje podrobný popis provedení algoritmu pro malý ukázkový graf. Zdrojovým vrcholem je vrchol A a poloměr každého vrcholu se rovná 1.
Na začátku algoritmu mají všechny vrcholy kromě zdrojového vrcholu A nekonečné pokusné vzdálenosti, označené v pseudokódu.
Všichni sousedé z A jsou uvolnění a .
Uzel | A | B | C | D | E | F | G |
---|---|---|---|---|---|---|---|
Předběžná vzdálenost | 0 | 3 | 5 | 3 | 3 |
Proměnná je zvoleno rovné 4 a sousedé vrcholů B, E a G jsou uvolnění.
Uzel | A | B | C | D | E | F | G |
---|---|---|---|---|---|---|---|
Předběžná vzdálenost | 0 | 3 | 6 | 5 | 3 | 8 | 3 |
Proměnná je zvoleno rovné 6 a žádné hodnoty se nezmění. .
Proměnná je vybráno rovné 9 a žádné hodnoty se nezmění. .
Algoritmus končí.
Runtime
Po fázi předzpracování může algoritmus krokování poloměru vyřešit problém SSSP v pracovat a hloubka, pro . Kromě toho trvá fáze předzpracování pracovat a hloubka, nebo pracovat a hloubka.[3]
Reference
- ^ A b C d E F G h Meyer, U .; Sanders, P. (10.01.2003). „Δ-stepping: a parallelizable shortest path algorithm“. Journal of Algorithms. 1998 Evropské symposium o algoritmech. 49 (1): 114–152. doi:10.1016 / S0196-6774 (03) 00076-2. ISSN 0196-6774.
- ^ „Graf 500“.
- ^ A b C d E Blelloch, Guy E .; Gu, Yan; Sun, Yihan; Tangwongsan, Kanat (2016). „Paralelní nejkratší cesty využívající krokování poloměru“. Sborník 28. sympozia ACM o paralelismu v algoritmech a architekturách - SPAA '16. New York, New York, USA: ACM Press: 443–454. doi:10.1145/2935764.2935765. ISBN 978-1-4503-4210-0.