Euler tour a suffix sums
Zkouškový pattern
Zadání dá strom, adjacency list nebo tabulku hran a chce Etour, level(v), preorder(v) nebo počet následovníků. V odpovědi musí být vidět převod ze stromu na orientované hrany a použití prefix/suffix sum.
Oficiální slidy
- Grafy, str. 28 až str. 35 - Euler tour a konstrukce
Etour. - Grafy, str. 37 až str. 45 -
preorder, počet následníků alevel(v)přesSuffixSums. - PRAM, str. 7 až str. 12 - scan/prescan/reduce jako základ pro výpočty nad Euler tour.
- PRAM, str. 82 až str. 89 - Blellochův detailní výklad all-prefix-sums, prescan a stromového up/down sweepu.
- PRAM, str. 83 - použití prefix sums pro stromové operace, včetně hloubky vrcholů.
Základní princip
Strom se převede na orientované hrany v Eulerově průchodu. Nad hranami se nastaví ohodnocení a použije se prefix/suffix suma. Podle volby ohodnocení z výsledku dostaneme vlastnosti vrcholů.
Vizualizace a drill stránky
Typické výstupy
preorder(v) -> Nlevel(v) -> N- počet následovníků/potomků
- hloubka vrcholu
- Etour tabulka
Minimální odpověď
- Každou neorientovanou hranu nahradím dvěma orientovanými hranami.
- Pro každou orientovanou hranu určím následníka v Euler tour.
- Nastavím váhy podle požadované veličiny.
- Spočítám prefix/suffix sum.
- Převedu hodnoty z hran zpět na vrcholy.
- Uvedu složitost.
Šablona odpovědi
- Vytvořit dvojice orientovaných hran pro každou neorientovanou hranu stromu.
- Sestavit Euler tour přes následníky hran.
- Každé hraně přiřadit váhu podle cíle:
- pro level/depth typicky
+1na dopředné hraně a-1na zpětné; - pro preorder označit první vstup do vrcholu;
- pro počet následovníků pracovat s velikostí podstromu.
- pro level/depth typicky
- Spočítat suffix/prefix sum.
- Z hodnot hran odvodit hodnoty vrcholů.
- Uvést složitost: typicky
O(log n)paralelně po sestavení struktur, práceO(n).
Volba vah
| Cíl | Typická váha |
|---|---|
level(v) / hloubka | +1 na dopředné hraně, -1 na zpětné |
preorder(v) | označit první vstup do vrcholu |
| počet potomků | spočítat rozsah podstromu v Eulerově průchodu |
| Etour tabulka | vypsat následníky orientovaných hran |
Mini-drill
- Proč má strom s
nvrcholy2(n-1)orientovaných hran v Etour? - Jak poznáš dopřednou a zpětnou hranu?
- Kdy použiješ prefix a kdy suffix sum?
- Jak převedeš hranovou hodnotu zpět na
level(v)?
Vyřešené příklady z termínů
Výpočet level(v) -> N
Zdroj: term-0-pretermin-a
Zadání: při dostupném Etour, funkci SuffixS(hrany, ohodnocení) a testu if e je dopredna spočítat úroveň vrcholů.
Řešení:
- Pro každou orientovanou hranu nastav váhu podle směru. Jedna běžná volba je
+1pro dopřednou hranu a-1pro zpětnou hranu. - Spočítej suffix/prefix sum přes Euler tour podle konvence v zadání.
- Hodnota součtu u první dopředné hrany do vrcholu určuje hloubku/level vrcholu po případné konstantní korekci podle kořene.
- Kořen má
level(root) = 0. - Paralelní scan dává
O(log n)čas přiO(n)práci po sestavení Etour.
U zkoušky je důležité říct, jak převádíš hranovou hodnotu zpět na vrcholovou.
preorder(v) -> N
Zdroj: term-1-radny-b
Zadání: pro Etour a informaci, zda je hrana dopředná, spočítat pořadí vrcholů v preorder průchodu.
Řešení:
- Označ dopředné hrany, které odpovídají prvnímu vstupu do vrcholu.
- Těmto hranám dej váhu
1, ostatním0. - Prefix sum nad Euler tour dá pořadí prvních vstupů.
- Pro každý vrchol vezmi hodnotu prefixu na jeho první vstupní dopředné hraně.
- Uprav indexaci podle zadání: buď od
0, nebo od1.
Počet následovníků/potomků
Zdroj: term-1-radny-c
Zadání: z Etour a suffix sum zjistit počet následujících vrcholů ve stromě.
Řešení:
- V Euler tour si vymez interval podstromu mezi vstupem do vrcholu a návratem z něj.
- Váhy nastav tak, aby se započítával první vstup do vrcholu.
- Suffix/prefix sum nad tímto intervalem dá počet vrcholů v podstromu.
- Počet potomků je velikost podstromu minus
1, pokud nechceš počítat samotný vrchol.
Kde se to objevuje
Podle sjednocených termínových souborů v archivu:
- term-0-pretermin-a
- term-0-pretermin
- term-3-druhy-opravny
- term-1-radny-c
- term-1-radny-b
- term-1-radny-a
- term-0-pretermin
- term-1-radny-c
- term-1-radny-a-zkratka
- term-0-pretermin
- term-2-prvni-opravny-a
- term-1-radny-c
- term-1-radny-a
- term-1-radny-zkratka
- term-1-radny-b
- term-1-radny-a
- term-1-radny-a
Chyby
- Neříct, jak poznám dopřednou a zpětnou hranu.
- Zaměnit pořadí hran v Etour.
- Vynechat převod z hranových hodnot na hodnoty vrcholů.
- Uvést jen výsledek bez popisu vah.