Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Folkow

Založen: 29. 07. 2007 Příspěvky: 61
|
Zaslal: 20. prosinec 2008, 12:33:32 Předmět: Nejdelší nejvíce se opakující řetězec. |
|
|
Ahoj,
momentálně řeším práci do školy, jejíž zadání jest napsat v Javě program, který, najde nejdelší opakující se podřetězec (maximálně 30 znaků) v řetězci, skládajícího se z milionu znaků, v co nejkratší době.
Prý se dá napsat takový program, který to zvládne za <= 3 sek.
Většina řešení, která mě napadla, byla tupá, přičemž jejicht složitost byla exponenciální, tudíž nepoužitelná.
Pátral jsem dál a narazil jsem na suffixové stromy, které řeší tento problém s lineární složitostí, ale zrovna dvakrát jsem to nepochopil.
Existuje nějaká metoda, se kterou bych to případně vyřešil s logaritmickou složitostí?
Děkuji moc a rád uvítám Vaše rady a jakékoliv jiné příspěvky, které by mi mohly pomoct.
 _________________ http://www.e-telka.cz | http://www.iphonethemeszone.com |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 20. prosinec 2008, 13:03:39 Předmět: |
|
|
Ano, suffixove stromy by to mohly resit efektivne.
Ne, logaritmicky algoritmus neexistuje a ani existovat nemuze... jak bys chtel vyhledat vsechny podretezce bez toho, abys ten retezec aspon jednou precetl? _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 20. prosinec 2008, 13:35:51 Předmět: |
|
|
Suffixové stromy nebo pole nejsou vůbec složité a mohly by se hodit. V podstatě si uděláš seznam všech sufixů (to je triviální):
kód: |
vstup: CESKEHRY
sufixy:
0 CESKEHRY
1 ESKEHRY
2 SKEHRY
3 KEHRY
4 EHRY
5 HRY
6 RY
7 Y
|
a pak z toho buď vybuduješ strom tak, že postupně vkládáš slova. Slovo vložíš tak, že následuješ hrany odpovídající každému písmenu a když taková hrana není, vytvoříš ji. Takže ze slov ESKEHRY,EHRY,EHRAMI by vznikl tento strom:
kód: |
*
+-- E
+-- S
| +-- K
| +-- E
| +-- H
| +-- R
| +-- Y
+-- H
+-- R
+-- Y
+-- A
+-- M
+-- I
|
_________________ Mám strach |
|
Návrat nahoru |
|
 |
tom.drin

Založen: 28. 07. 2007 Příspěvky: 65
|
Zaslal: 20. prosinec 2008, 23:31:41 Předmět: |
|
|
Přesně tuhle ulohu jsem řešil před rokem. (Nemáš náhodou Blocha?)
Asi né uplně šikovný řešení, ale můžeš si rozsekat vstup na stejně dlouhý překrývající se řetězce, seřadit je, odstranit unikátní a ty zbylý rozšířit o následující znak. Tohle opakuj dokud ti nezbudou jen ty nejdelší. |
|
Návrat nahoru |
|
 |
Folkow

Založen: 29. 07. 2007 Příspěvky: 61
|
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 21. prosinec 2008, 12:32:57 Předmět: |
|
|
Naštěstí dělám "normální" semestrálku.. tuhle bych řešil stylem, najít si někoho, kdo z toho měl A, okopčit to, občas trochu někde něco změnit a hotovo.
Jinak bacha na ten limit, co jsem slyšel, tak ty 3s to musí dát na dost starém stroji(jen několik set MHz procesor), takže když tobě to udělá pod sekundu, tak to ještě nemusí znamenat, že to udělá včas i jeho stroj. _________________
 |
|
Návrat nahoru |
|
 |
Folkow

Založen: 29. 07. 2007 Příspěvky: 61
|
|
Návrat nahoru |
|
 |
Yossarian

Založen: 28. 07. 2007 Příspěvky: 274 Bydliště: Šalingrad
|
Zaslal: 21. prosinec 2008, 13:49:51 Předmět: |
|
|
Houp napsal: |
Naštěstí dělám "normální" semestrálku.. tuhle bych řešil stylem, najít si někoho, kdo z toho měl A, okopčit to, občas trochu někde něco změnit a hotovo. |
[OT]V tom pripade doufam, ze te jeste tendle semestr vyrazi.[/OT] |
|
Návrat nahoru |
|
 |
Folkow

Založen: 29. 07. 2007 Příspěvky: 61
|
Zaslal: 21. prosinec 2008, 13:51:50 Předmět: |
|
|
Yossarian napsal: |
Houp napsal: |
Naštěstí dělám "normální" semestrálku.. tuhle bych řešil stylem, najít si někoho, kdo z toho měl A, okopčit to, občas trochu někde něco změnit a hotovo. |
[OT]V tom pripade doufam, ze te jeste tendle semestr vyrazi.[/OT] |
To víš, každej má své praktiky. Já si raději nechám poradit, ale vždycky to splácám dohromady sám. _________________ http://www.e-telka.cz | http://www.iphonethemeszone.com |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 21. prosinec 2008, 14:10:54 Předmět: |
|
|
Yossarian napsal: |
[OT]V tom pripade doufam, ze te jeste tendle semestr vyrazi.[/OT] |
Proč? _________________
 |
|
Návrat nahoru |
|
 |
tom.drin

Založen: 28. 07. 2007 Příspěvky: 65
|
Zaslal: 21. prosinec 2008, 15:43:11 Předmět: |
|
|
Folkow napsal: |
Je tomu tak, ať žije Mr. Bloch. Jakým způsobem jsi to řešil ty? |
Řešil jsem to tak ,jak jsem napsal výše. Na řazení jsem použil quicksort. Ale minulej rok bylo potřeba na jedničku čas pod 12 sekund. Já to měl na jeho oldschool kompu asi za 9 nebo 10s.
Jestli je teď potřeba na jedničku čas <3s tak to asi chce jinačí řešení. |
|
Návrat nahoru |
|
 |
Folkow

Založen: 29. 07. 2007 Příspěvky: 61
|
Zaslal: 21. prosinec 2008, 16:02:40 Předmět: |
|
|
tom.drin napsal: |
Folkow napsal: |
Je tomu tak, ať žije Mr. Bloch. Jakým způsobem jsi to řešil ty? |
Řešil jsem to tak ,jak jsem napsal výše. Na řazení jsem použil quicksort. Ale minulej rok bylo potřeba na jedničku čas pod 12 sekund. Já to měl na jeho oldschool kompu asi za 9 nebo 10s.
Jestli je teď potřeba na jedničku čas <3s tak to asi chce jinačí řešení. |
Mno stačí, že to budu mít =), pokusím se vyřešit dle výše napsaného... _________________ http://www.e-telka.cz | http://www.iphonethemeszone.com |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 21. prosinec 2008, 20:26:49 Předmět: |
|
|
Bacha aby to nebolo tak, ze to pani na FELe zmenili prave preto, aby nachytali tych, co odovzdaju minulorocne riesenia  _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Alenka
Založen: 28. 07. 2007 Příspěvky: 49
|
Zaslal: 22. prosinec 2008, 11:45:30 Předmět: |
|
|
offtopic: Nechodis nahodou na FEL? ja jen ze spoluzak ma podobnou semestralku jeste ze tohle me minulo
EDIT: Priste si blbko precti celej post nez neco napises odpovedela jsem si sama po tom, co jsem si v jednom postup recetla jmeno "Bloch" brrr |
|
Návrat nahoru |
|
 |
Folkow

Založen: 29. 07. 2007 Příspěvky: 61
|
|
Návrat nahoru |
|
 |
|