Řazení, prescan, prefix/suffix
Zkouškový pattern
Většina úloh chce ruční simulaci po zadaném počtu kroků nebo zapsání mezistavů algoritmu. Nestačí znát název algoritmu; je potřeba umět kreslit tabulku kroků.
Oficiální slidy
- PRAM, str. 7 až str. 12 - scan, prescan, reduce, up-sweep/down-sweep.
- Řazení, str. 28 až str. 41 - Enumeration Sort mřížkově i lineárně, včetně analýzy.
- Řazení, str. 42 až str. 49 - Minimum Extraction Sort a stromová topologie.
- Řazení, str. 50 až str. 56 - Pipeline Merge Sort; diagramové stavy kontroluj v 2526_Razeni_vyhledavani_v7.pdf.
- Řazení, str. 57 až str. 61 - Odd-even transposition / merge sort.
Vizualizace a drill stránky
- Prescan: up-sweep a down-sweep
- Enumeration Sort: ranky a duplicity
- Pipeline Merge Sort: procesory a tabulka taktů
- Odd-even: compare-exchange síť
Pipeline Merge Sort
Typická zkoušková úloha chce stav po N krocích. Důležité je držet přesnou simulaci:
- Procesory jsou zapojené do pipeline.
- Každý proces drží lokální fronty/buffery podle fáze merge.
- V každém kroku se posune nejvýše jedna relevantní hodnota podle pravidel algoritmu.
- Neztratit stabilitu a pořadí proudů.
Minimální odpověď: popsat pipeline, pravidlo posunu, ukázat tabulku taktů a uvést výsledný stav po požadovaném kroku.
Enumeration Sort
Pro každý prvek spočítat, kolik prvků je menších, případně menších nebo stejných s tie-breakem podle indexu. Výsledná pozice prvku je jeho rank.
rank[i] = počet j takových, že A[j] < A[i]
+ počet j < i takových, že A[j] == A[i]
B[rank[i]] = A[i]U duplicit je tie-break podle indexu zásadní; bez něj dva prvky mohou chtít stejnou pozici.
Prescan / prefix sum
Pro pole velikosti mocniny dvou:
- Up-sweep: buduje redukční strom, v kořeni je celkový součet.
- Down-sweep: kořen se nastaví na neutrální prvek, hodnoty se propagují dolů a vznikne exclusive scan.
U zkoušky často chtějí stavy po prvním a posledním kroku obou fází.
Rozlišuj:
- exclusive scan: na pozici
ije součet prvků předi; - inclusive scan: na pozici
ije součet prvků doivčetně.
Odd-even transposition sort
- Střídají se fáze porovnání dvojic
(0,1),(2,3),...a(1,2),(3,4),.... - Po
nfázích je seřazeno. - Paralelní čas
O(n), práceO(n^2).
Odd-even merge sort
- Jde o třídicí síť z compare-exchange bloků.
- Typická zkouška chce schéma nebo síť pro malý rozměr, často
4x4. - U odpovědi stačí princip rekurzivního merge lichých a sudých pozic a výsledné compare-exchange vrstvy.
Mini-drill
- Jak vyřeší Enumeration Sort duplicity?
- Jaký je rozdíl mezi inclusive a exclusive prescan?
- Co se má zapsat po prvním kroku up-sweep?
- Proč u Pipeline Merge Sortu nestačí seřadit vstup “od oka”?
Vyřešené příklady z termínů
Prescan: mezistavy up-sweep/down-sweep
Zdroj: term-1-radny-c
Zadání: pro posloupnost 3, 15, 2, 8, 12, 10, 3, 2, 12, 11, 17, 5, 19, 2, 5, 1 doplnit stav po prvním a posledním kroku up-sweep i down-sweep.
Řešení pro exclusive scan:
- Po 1. kroku up-sweep:
3, 18, 2, 10, 12, 22, 3, 5, 12, 23, 17, 22, 19, 21, 5, 6 - Po posledním kroku up-sweep:
3, 18, 2, 28, 12, 22, 3, 55, 12, 23, 17, 45, 19, 21, 5, 127 - Před down-sweep se kořen nastaví na
0. - Po 1. kroku down-sweep:
3, 18, 2, 28, 12, 22, 3, 0, 12, 23, 17, 45, 19, 21, 5, 55 - Výsledek exclusive scan:
0, 3, 18, 20, 28, 40, 50, 53, 55, 67, 78, 95, 100, 119, 121, 126
Enumeration Sort s duplicitami
Zdroj: pattern z term-1-radny-b
Zadání: doplnit registry po několika krocích Enumeration Sortu; obrázek v raw je hůř čitelný, ale princip ranku je stabilní.
Řešení pro ukázkový vstup 4, 2, 4, 1:
rank[0] = count(<4)=2 + count(==4 vlevo)=0 => 2
rank[1] = count(<2)=1 + count(==2 vlevo)=0 => 1
rank[2] = count(<4)=2 + count(==4 vlevo)=1 => 3
rank[3] = count(<1)=0 + count(==1 vlevo)=0 => 0Výstup je 1, 2, 4, 4. Tie-break podle indexu zabrání kolizi dvou čtyřek.
Pipeline Merge Sort
Zdroj: term-0-pretermin-a
Zadání: pro vstup 5, 2, 9, 4, 3, 6, 8, 7 zpracovávaný zprava zapsat stav po 10. kroku.
Řešení postupem:
- Nekresli finálně seřazené pole; kresli tabulku taktů.
- V každém taktu vlož další hodnotu zprava a u každého procesoru proveď právě jeden povolený compare/forward krok.
- Menší hodnota jde z dvojice jako první.
- Po 10. kroku opiš obsahy vstupů/výstupů procesů z tabulky.
Bez přesné tabulky kroků je odpověď neauditovatelná; u této úlohy je rozhodující mechanická simulace.
Kde se to objevuje
Podle sjednocených termínových souborů v archivu:
- term-0-pretermin-b
- term-0-pretermin-a
- term-0-pretermin
- term-2-prvni-opravny
- term-0-pretermin-b
- term-1-radny-c
- term-1-radny-b
- term-1-radny-a
- term-3-druhy-opravny
- term-2-prvni-opravny
- term-1-radny-b
- term-2-prvni-opravny-b
- term-2-prvni-opravny-a
- term-1-radny-c
- term-1-radny-b
- term-1-radny-a
- term-2-prvni-opravny
- term-1-radny-b
- term-1-radny-c
- term-1-radny-a
Chyby
- Zaměnit inclusive a exclusive prescan.
- U Enumeration Sort nezvládnout duplicity.
- U Pipeline Merge Sortu simulovat více posunů v jednom taktu, než dovoluje zadání.
- U sorting networks zapomenout, že compare-exchange bloky ve stejné vrstvě běží paralelně.