Procházení grafu externí paměti - External memory graph traversal
Procházení grafu externí paměti je typ přechod grafu optimalizováno pro přístup k externě uložené paměti.
Pozadí
Traversal graph is a subrutine in most graph algorithms. Cílem algoritmu pro procházení grafu je navštívit (a / nebo zpracovat) každý uzel grafu. Algoritmy pro procházení grafů vyhledávání na šířku a hloubkové vyhledávání, jsou analyzovány pomocí von Neumann model, který předpokládá jednotné náklady na přístup do paměti. Toto zobrazení zanedbává skutečnost, že pro velké instance je část grafu umístěna na disku, nikoli ve vnitřní paměti. Vzhledem k tomu, že přístup k disku je o poznání pomalejší než přístup k vnitřní paměti, je potřeba efektivního procházení externí paměť existuje.
Model externí paměti
Pro algoritmy externí paměti model externí paměti od Aggarwala a Vittera[1] se používá pro analýzu. Stroj je určen třemi parametry: M, B a D.M je velikost vnitřní paměti, B je velikost bloku disku a D je počet paralelních disků. Míra výkonu pro algoritmus externí paměti je počet I / O, které provádí.
Prohledávání do šířky první paměti externí paměti
Šířka prvního vyhledávacího algoritmu začíná v kořenovém uzlu a prochází každý uzel s hloubkou jedna. Pokud v aktuální hloubce již nejsou žádné nenavštívené uzly, procházejí se uzly ve vyšší hloubce. Nakonec byl každý uzel grafu navštíven.
Munagala a Ranade
Pro neorientovaný graf , Munagala a Ranade[2] navrhl následující algoritmus externí paměti:
Nechat označte uzly v první vyhledávací úrovni t a nechte být množinou sousedů úrovně t-1. Za každé t lze postavit z transformací do sady a vyloučením dříve navštívených uzlů z ní.
- Vytvořit přístupem k seznamu sousedství každého vrcholu v . Tento krok vyžaduje I / O.
- další je vytvořen z odstraněním duplikátů. Toho lze dosáhnout tříděním , následuje fáze skenování a zhutňování I / O.
- se vypočítá paralelním skenováním a a vyžaduje I / O.
Celkový počet I / O tohoto algoritmu následuje s ohledem na to a a je .
Vizualizace tří popsaných kroků nezbytných k výpočtu L(t) je znázorněn na obrázku vpravo.
Mehlhorn a Meyer
Mehlhorn a Meyer[3] navrhl algoritmus, který je založen na algoritmu Munagala a Ranade (MR) a zlepšuje jejich výsledek.
Skládá se ze dvou fází. V první fázi je graf předzpracován, druhá fáze provádí vyhledávání na šířku pomocí informací shromážděných v první fázi.
Během fáze předzpracování je graf rozdělen do nesouvislých podgrafů s malým průměrem. Podle toho dále rozděluje seznamy sousedství vytvořením externího souboru , kde obsahuje seznam sousedství pro všechny uzly v .
Fáze vyhledávání na šířku je podobná algoritmu MR. Algoritmus navíc udržuje seřazený externí soubor . Tento soubor je inicializován pomocí . Dále uzly jakékoli vytvořené úrovně vyhledávání v první šíři nesou identifikátory souborů jejich příslušných podgrafů . Místo použití náhodných přístupů ke konstrukci soubor se používá.
- Proveďte paralelní skenování seřazeného seznamu a . Extrahujte seznamy sousedství pro uzly , které lze najít v .
- Seznamy sousedství pro zbývající uzly, které nelze najít v je třeba vyzvednout. Skenování získá identifikátory oddílu. Po seřazení a odstranění duplikátů příslušné soubory lze zřetězit do dočasného souboru .
- Chybějící seznamy sousedství lze extrahovat z se skenováním. Dále jsou sloučeny zbývající seznamy sousedství jediným průchodem.
- je vytvořen jednoduchým skenováním. Informace o oddílu jsou připojeny ke každému uzlu v .
- Algoritmus probíhá jako algoritmus MR.
Okraje mohou být skenovány častěji v , ale nestrukturované I / O za účelem načtení seznamů sousedství jsou sníženy.
Celkový počet I / O pro tento algoritmus je
Vyhledávání hloubky první paměti externí paměti
Algoritmus vyhledávání do hloubky prozkoumá graf podél každé větve tak hluboko, jak je to možné, před zpětným sledováním.
Pro režie grafy Buchsbaum, Goldwasser, Venkatasubramanian a Westbrook[4] navrhl algoritmus s I / O.
Tento algoritmus je založen na datové struktuře s názvem strom úložiště s vyrovnávací pamětí (BRT). Ukládá více položek z objednaného vesmíru. Položky jsou identifikovány podle klíče. BTR nabízí dvě operace:
- vložka (T, x), který přidává položku X na T a potřeby amortizované I / O. N je počet položek přidaných do BTR.
- extrakt (T, k), který hlásí a odstraňuje z T všechny položky s klíčem k. To vyžaduje I / O, kde S je velikost sady vrácená výpis.
Algoritmus simuluje interní hloubkový první vyhledávací algoritmus. Stoh S uzlů je pozastaveno. Během iterace uzlu proti na vrcholu S tlačit na nenavštíveného souseda S a iterovat. Pokud neexistují žádní nevítaní sousedé, pop proti.
Obtíž je určit, zda je uzel neviditelný, aniž by to udělal I / O na hranu. Chcete-li to udělat pro uzel proti příchozí hrany (x, v) jsou vloženy do BRT D, když proti je poprvé objeven. Dále odchozí hrany (proti,X) jsou zařazeny do prioritní fronty P(proti), zadaný hodností v seznamu sousedů.
Pro vrchol u na vrcholu S všechny hrany (u,X) jsou extrahovány z D. Takové hrany existují, pouze pokud X byl objeven od poslední doby u byl na vrcholu S (nebo od začátku algoritmu, pokud u je poprvé na vrcholu S). Pro každou hranu (u,X) smazat (X) operace se provádí na P(u). Nakonec a operace mazání min na P (u) získá další nenavštívený uzel. Li P(u) je prázdný, u je vyskočeno z S.
Pseudokód pro tento algoritmus je uveden níže.
1 postup BGVW-hloubka-první-vyhledávání (G,proti): 2 let S být hromádka, P[] prioritní fronta pro každý uzel a D BRT3 S.tlačit(proti)4 zatímco S není prázdný5 proti = S.top () 6 -li proti není označeno: 7 bodů (proti) 8 extrahujte všechny hrany (v, x) z D, X: P[proti].vymazat(X)9 -li u=P[proti] .delete-min () není null10 S.tlačit(u)11 jiný12 S.pop () 13 postup označit(proti) 14 položte všechny hrany (X,proti) do D15 (proti,X): dát X do P[proti]
Reference
- ^ Aggarwal, Alok; Vitter, Jeffrey (1988). "Složitost vstupu / výstupu třídění a související problémy". Komunikace ACM. 31 (9): 1116–1127. doi:10.1145/48529.48535.
- ^ Munagala, Kameshwar; Ranade, Abhiram (1999). "Složitost I / O grafových algoritmů". Sborník z desátého výročního sympózia ACM-SIAM o diskrétních algoritmech. SODA '99. Baltimore, Maryland, USA: Společnost pro průmyslovou a aplikovanou matematiku. 687–694.
- ^ Mehlhorn, Kurt; Meyer, Ulrich (2002). Msgstr "Prohledávání šířky první paměti s externí pamětí pomocí Sublinear I / O". Algoritmy - ESA 2002. ESA 2002. Řím, Itálie: Springer Berlin Heidelberg. 723–735.
- ^ Buchsbaum, Adam L .; Goldwasser, Michael; Venkatasubramanian, Michael; Westbrook, Suresh (2000). "Při procházení grafu externí paměti". Sborník jedenáctého výročního sympozia ACM-SIAM o diskrétních algoritmech. SODA '00. San Francisco, Kalifornie, USA: Společnost pro průmyslovou a aplikovanou matematiku. str. 859–860.