Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 24. 05. 2012 18:42

Jirda
Místo: Karviná
Příspěvky: 216
Reputace:   
 

Dynamické programování - řešení algoritmu

Zdravim,

pripravuju se na zkousku a mam tu jeden z prikladu:

Mame text ulozeny v poli T[1..n] bez mezer a interpunkcnich znamenek.
"Toznamenatexttohototypu" Nasim ukolem je rozhodnout, jestli text je
"platnym textem", tj. jestli se da rozdelit tak, ze vsechny jeho casti
jsou existujici slova. To jestli dane slovo je existuje(tj. jestli
to neni nesmysl) zjistime pomoci fce dict(w). Ta vrati true, prave
kdyz slovo existuje. Volani teto fce je ve tride O(1). Navrhnete
algoritmus slozitosti O(n^2) zalozeny na principu dyn. programovani,
ktery rozhodne, zda dany text T je platnym textem.

Navrhl jsem tenhle algoritmus (omluvte prosim zjednoduseny zapis, nechtel jsem to komplikovat pro ctenare)


for size = 1 to n do
for start = 1 to n-size do
   word[start, start+size] = or(k = 0 to size-1) {word[start+k, start+size], dict(T[start..start+size])}


return word(1, n)



Ta funkce or vraci true, pokud dany retezec je slovo nebo nejake rozdeleni podle k je skupina slov.
Jinak je to snad jasny. De facto zacinam na slovech velikosti 1 a postupne zvysuju a divam se do wordu, kde jsem si ty mensi cisla napocital.


Znepokuje me jedna vec ale, je vyzadovana slozitost O(n^2), ale kdybych ten muj algoritmus vice rozepsal, hlavne tu cast or, ktera je cyklus rozdeleni, tak se dostanu mimo pozadovanou slozitost.


Nenapada nekoho, jak splnit ten pozadavek?


Dekuji.


Matematika je jednoduchá, záleží pouze na úhlu pohledu.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson