Zkouškové otázky z Algoritmů a datových struktur I
22. 5. (předtermín)
- Definujte topologické uspořádání grafu a popište algoritmus na jeho sestrojení.
- Popište a analyzujte algoritmus pro násobení čísel metodou Rozděl a panuj.
- Je dán strom, jehož hranám jsou přiřazeny celočíselné délky. Najděte nejdelší cestu.
- Inverze v číselné posloupnosti x1, …, xn je taková dvojice indexů (i,j), pro kterou platí i<j a současně xi > xj. Vymyslete algoritmus, který co nejefektivněji spočte, kolik je v posloupnosti inverzí. Můžete předpokládat, že posloupnost je permutací na množině {1,…n}.
25. 5. dopoledne
- Popište prohlédávání do hloubky a klasifikaci hran.
- Definujte (a,b)-strom a popište operaci Insert.
- Je dána množina celých čísel a číslo S. Najděte trojici (ne nutně různých) prvků množiny, jejichž součet je roven S.
- Je dán DAG a počáteční a cílový vrchol. Spočítejte, kolik mezi nimi vede cest liché délky.
25. 5. odpoledne
- Definujte minimální kostru grafu a ukažte jeden efektivní algoritmus na její nalezení.
- Formulujte a dokažte Kuchařkovou větu o rekurencích.
- Je dáno číslo K. Na vstupu přichází celá čísla, po příchodu dalšího čísla vždy vypíšte medián z posledních K čísel.
- Navrhněte algoritmus na obarvení rovinného grafu 6 barvami.
30. 5. dopoledne
- Formulujte Mergesort a analyzujte jeho složitost.
- Definujte AVL strom a popište operaci Insert.
- Mějme orientovaný graf, jehož hrany jsou ohodnocené pravděpodobnostmi. Najděte nejpravděpodobnější cestu mezi dvěma vrcholy, tj. takovou, na níž je součin pravděpodobností hran největší možný.
- Spočítejte, kolik existuje dláždění obdélníka 3×N kostkami 1×2 (lze je otáčet).
30. 5. odpoledne
- Definujte písmenkový strom (trii) a popište operace na něm.
- Popište a analyzujte algoritmus pro hledání k-tého nejmenšího prvku.
- Je dáno čtverečkové bludiště. Najděte cestu ze startu do cíle, která projde co nejméně zdmi.
- Najděte k-tou permutaci na množině {1,…,n} v lexikografickém pořadí.
1. 6. dopoledne
- Definujte topologické uspořádání grafu a popište algoritmus na jeho sestrojení.
- Popište a analyzujte algoritmus pro hledání nejdelší rostoucí podposloupnosti.
- Čtverečkovou sítí s překážkami stěhujeme gauč tvaru "L" ze tří políček. Najděte cestu na co nejméně kroků (posun o 1 políčko, případně otočení na volném čtverci 2×2 pole).
- Na vstupu je text rozdělený na slova. Vypište seznam unikátních slov (setříděný lexikograficky) spolu s počty jejich výskytů.
1. 6. odpoledne
- Definujte AVL strom a dokažte větu o jeho hloubce.
- Popište a analyzujte Dijkstrův algoritmus na hledání nejkratší cesty.
- Hledáme nejkratší cestu čtverečkovým bludištěm, která se vyhne strážím. Každá stráž chodí po cyklu délky nejvýše 10.
- Na vstupu je posloupnost znaků. Spočítejte, kolikrát se v něm vyskytuje
vybraná podposloupnost
KOCKA
.
5. 6. dopoledne
- Popište a analyzujte algoritmus Mergesort.
- Definujte minimální kostru grafu a ukažte jeden efektivní algoritmus na její nalezení.
- Je dána posloupnost N navzájem různých celých čísel. Najděte její 1. až K-tý nejmenší prvek.
- Je dán orientovaný graf s určeným počátečním vrcholem, v některých vrcholech se prodává zmrzlina. Najděte sled vycházející z počátečního vrcholu, který navštíví co nejvíce různých vrcholů se zmrzlinou.
5. 6. odpoledne
- Formulujte a dokažte Kuchařkovou větu o rekurencích.
- Popište a analyzujte algoritmus pro hledání mostů v neorientovaných grafech.
- Je dána posloupnost přirozených čísel. Spočítejte, kolik má vybraných podposloupností, jejichž součet je dělitelný 7.
- Mějme bludiště ve tvaru čtvercové sítě, jejíž políčka obsahují místnosti, zdi, klíče K1 až Kk a odpovídající zamčené dveře D1 až Dk. Dveřmi Di je možno projít, pokud jste předtím alespoň jednou navštívili políčko s klíčem Ki. Vymyslete algoritmus, který zjistí, zda se jde dostat ven z bludiště.
9. 6. dopoledne
- Hešování a systémy hešovacích funkcí.
- Popište a analyzujte Dijkstrův algoritmus na hledání nejkratší cesty.
- Nalezněte v zadaném stromu největší párování: to je podmnožina hran taková, že žádné dvě hrany nemají společný vrchol.
- Vymyslete co nejefektivnější algoritmus pro K-cestné slévání: slití K setříděných posloupností o celkové délce N. Jak se změní časová složitost Mergesortu, když budeme dělit na K částí a slévat K-cestně?
9. 6. odpoledne
- Popište a analyzujte algoritmus pro násobení čísel metodou Rozděl a panuj.
- Popište a analyzujte Bellmanův-Fordův algoritmus pro hledání nejkratší cesty.
- Je dán slovník. Sestrojte co nejdelší slovní žebřík. To je posloupnost slov ze slovníku taková, že (i+1)-ní slovo získáme z i-tého smazáním jednoho písmene. Například pro anglický slovník AGID-4 vychází žebřík glassiness, glassines, glassine, glassie, lassie, lassi, lass, ass, as, a.
- Je dáno číslo K. Na vstupu přichází celá čísla, po příchodu dalšího čísla vždy vypíšeme minimum z posledních K čísel.
13. 6.
- Popište a analyzujte algoritmus pro hledání k-tého nejmenšího prvku.
- Definujte minimální kostru grafu a ukažte jeden efektivní algoritmus na její nalezení.
- Je dána posloupnost celých čísel. Chceme najít nejdelší souvislý úsek, který obsahuje stejný počet kladných čísel jako záporných.
- Je dán neorientovaný graf. Jak množinu jeho hran rozložit na hranově disjunktní cesty délky 2? (Tedy tak, aby každá hrana ležela v právě jedné cestě.) Pokud si nevíte rady s obecným grafem, zkuste to nejdřív pro strom.
15. 6. dopoledne
- Popište reprezentaci množiny řetězců písmenkovým stromem (trií) a operace na ní.
- Definujte komponenty silné souvislosti orientovaného grafu. Popište a analyzujte algoritmus na jejich nalezení.
- Je dán orientovaný graf, jehož hrany jsou ohodnoceny nezápornými délkami, a počáteční a cílový vrchol. Chceme najít takovou nejkratší cestu, která má co nejméně hran.
- Sestrojte vyhledávací strom, který bude navíc umět operaci Count(x,y), která v logaritmickém čase spočte, kolik hodnot ve stromu leží v intervalu [x,y].
15. 6. odpoledne
- Výpočetní model RAM: defince, zavedení složitosti.
- Definujte AVL strom a popište operaci Insert.
- Je dána posloupnost navzájem různých celých čísel. Spočítejte, kolik v ní je rostoucích podposloupností.
- Uvažujme posloupnost, která je setříděná až na K prvků, které jsou zatříděny chybně (knížky v knihovně hojně navštěvované čtenáři). Navrhněte co nejefektivnější algoritmus (vzhledem k počtu prvků a K), který posloupnost dotřídí.
21. 6.
- Popište prohlédávání do hloubky a klasifikaci hran.
- Definujte (a,b)-strom a popište operaci Insert nebo Delete.
- Je dán DAG s ohodnocenými hranami, počáteční a koncový vrchol. Najděte všechny hrany, které leží na aspoň jedne nejdelší cestě mezi danými vrcholy.
- Na vstupu je posloupnost znaků. Spočítejte, kolikrát se v něm vyskytuje
vybraná podposloupnost
KOCKA
.
22. 6. dopoledne
- Formulujte a dokažte Kuchařkovou větu o rekurencích.
- Vyslovte a analyzujte Bellmanův-Fordův algoritmus na hledání nejkratší cesty.
- Je dáno číslo K. Na vstupu přichází celá čísla, po příchodu dalšího čísla vždy vypíšeme minimum z posledních K čísel.
- Je dán strom, jehož vrcholy jsou ohodnocené celočíselnými cenami. Najděte co nejlevnější podmnožinu vrcholů, která protíná každou hranu.
22. 6. odpoledne
- Popište a analyzujte algoritmus pro hledání k-tého nejmenšího prvku.
- Definujte topologické uspořádání grafu a popište algoritmus na jeho sestrojení.
- Labyrint má tvar čtvercové sítě, některá políčka jsou zdi. Archeolog se chce dostat z políčka A na políčko B. Projít na volné políčko mu trvá 1 minutu, prokopat se na políčko se zdí 20 minut. Najděte nejrychlejší cestu.
- Je dáno liché číslo K. Na vstupu přichází celá čísla, po příchodu dalšího čísla vždy vypíšte medián z posledních K čísel.
29. 6. dopoledne
- Popište a analyzujte Dijkstrův algoritmus na hledání nejkratší cesty.
- Formulujte Mergesort a analyzujte jeho složitost.
- Máme N obdélníků, které je možno otáčet o násobky 90 stupňů. Vyrobte z nich co nejdelší posloupnost, ve které se každý obdélník vejde do následujícího.
- Je dán orientovaný graf s určeným počátečním vrcholem, v některých vrcholech se prodává zmrzlina. Najděte sled vycházející z počátečního vrcholu, který navštíví co nejvíce různých vrcholů se zmrzlinou.
29. 6. odpoledne
- Definujte AVL strom a popište operaci Insert.
- Popište prohledávání do šířky a ukažte, jak se pomocí něj detekují cykly v orientovaných grafech.
- Kdesi v bludišti se nachází robot. Vysíláme posloupnost příkazů (každý příkaz je nějaký pohyb o jedno políčko na sever/jih/východ/západ) pořád dokola, než robot vyleze z bludiště (pokud robot nemůže příkaz provést, protože by narazil do zdi, ignoruje ho). Zjistěte, zda pro danou mapu bludiště a danou posloupnost příkazů platí, že ať robot na počátku stojí kdekoliv, vždy je vysvobozen.
- Je dána posloupnost celých čísel. Chceme najít nejdelší souvislý úsek, který obsahuje stejný počet kladných čísel jako záporných.