ADS2 Jiří Kalvoda: Cvičení 2
Also available as: PDF Markdown
Informace k cv. jsou na https://kam.mff.cuni.cz/~jirikalvoda/vyuka/25z/ads2.
Vyhledávání v textu – algoritmus KMP
Definice: Pro řetězec definujeme:
- prefix řetězce : .
- suffix řetězce : .
- souvislý podřetězec řetězce : .
Úloha 1 (Konstrukce): Sestavte KMP automaty pro následující řetězce:
- kocka
- aaaaaaaaaa
- toronto
Úloha 2 (Timeout): Naivní algoritmus, který zkouší všechny možné začátky jehly v seně a vždy porovnává řetězce, má časovou složitost . Může být opravdu tak pomalý, uvážíme-li, že porovnávání řetězců skončí, jakmile najde první neshodu? Sestrojte vstup, na kterém algoritmus poběží kroků, přestože nic nenajde.
Úloha 3 (Cenzura): Chceme otestovat jestli se v seně nachází skrytý text (v tomto pořadí). Nicméně text je skrytý, takže mezi každými dvěma jehlami může být výplň – libovolný řetězec.
Definice: Máme-li řetězec , nazvěme jeho rotaci o pozic řetězec .
Úloha 4 (Rotace): Jak o dvou řetězcích zjistit, zda je jeden rotací druhého?
Úloha 5 (Minimální rotace*): Navrhněte algoritmus, který v lineárním čase nalezne tu z rotací zadaného řetězce, jež je lexikograficky minimální.
Úloha 6 (Prefixy a suffixy): Pro dané slovo najděte nejdelší vlastní prefix, který je současně suffixem.
Úloha 7 (Fibonacci): Fibonacciho slova definujeme , , pro nějaké znaky . Najděte nejdelší fibonacciho slovo v seně (pro libovolné znaky ).