Tlačítka na mobilu
Problém, který v dávných dobách před vynálezem dotykového displaye řešili výrobci mobilních telefonů je formulován následovně:
- ▸ je dána množina symbolů S
- ▸ každý ze symbolů má danou váhu (frekvenci, s jakou je typicky použit v textu)
- ▸ symboly mají dané fixní pořadí
- ▸ je dán počet tlačítek k < |S|
Cílem je najít co nejlevnější rozdělení na k
tlačítek. Cena za jedno tlačítko je definována jako součet:

Kde w s indexem i je cena i-tého písmene na daném tlačítku.
Hint pro dynamické řešení
Tabulky jsou fajn. Definujeme se tedy hned dvě:
- ▸ Ceny všech možných tlačítek - tabulka C velikosti |S|x|S|.
C[i,j]
je cena tlačítka, které začíná i-tým písmenkem a končí j-tým. Pod diagonálou bude prázdno. Tabulku si můžeme spočítat před začátkem výpočtu. - ▸ Dynamický výpočet - tabulka D velikosti k x |S|.
D[m,i]
obsahuje cenu nejlepšího rozdělení tlačítek pro situaci, kdy mámem
tlačítek a používáme všechny symboly až do (včetně)i
-tého. Postupně tabulku vyplnujeme po řádcích - začneme sm=1
.
První řádek tabulky D vlastně opíšeme z C. Potom při výpočtu m
-tého řádku vždy používáme již vypočtené hodnoty z řádku m-1
a předvypočtené hodnoty z tabulky C.
Výslednou cenu optimálního rozdělení tlačítek po vyplnění celé tabulky D najdeme v D[k,|S|]
.
Domácí úkol
V CodExu je zadána úloha poněkud mimo probírané téma: Editační vzdálenost řetězců.