Jak wykrywać cykle w stringu?

Permutacje. Kombinacje. Wariacje. Rozmieszczanie kul w urnach. Silnie i symbole Newtona. Przeliczanie zbiorów. Funkcje tworzące. Teoria grafów.
Awatar użytkownika
Borneq
Użytkownik
Użytkownik
Posty: 247
Rejestracja: 23 lip 2010, o 07:50
Płeć: Mężczyzna
Lokalizacja: geo:lat=0 geo:lon=0
Podziękował: 13 razy

Jak wykrywać cykle w stringu?

Post autor: Borneq »

Drzewo sufiksowe tworzę w prosty i szybki sposób , w dodatku mogę wykorzystywać je w trakcie tworzenia. Otóż dodaje sufiksy do którejs z list (linked list) wskazujacych na poprzednią pozycję. Mam 256 takich list dla każdej litery alfabetu.
Jest jedna wada: sufiksy są posortowane nie alfabetycznie a według kolejności przybycia (do usuwania najstarszych chyba potrzebna dwukierunkowa lista)
Sorotwanie kosztowne, bo muszę sprawdzić czy nie ma problemów nie tylko literę, któ©a prybyła ale i inne, więc juz mniej kosztowne jest korzystanie z nieposortowanyej listy, wtedy przy wykorzytaniu muszę sprawdzić wszystkie pozycje dla litery. Mogę też zrobic zamiast 256 liter, 65536 dwuliter, co pozwoli na to że maksymalnie kilka sufiksów będzie na liście. Problemem są jednak cykle. Gdy mam ciąg "aaaaaaaaaa....", wtedy sufiksy będą
aaaaaa
aaaaa
aaaa
aaa
aaa
aa
a
i będzie ich kilka tysięcy nawet gdy będę miał 65536 indeksów.
Jeszcze taki cykl można rozpoznać że to cykl, ale co z potrójnie złożonym:
brrerrerrebrrerrerrebrrerrerre
powtarza się r, powtarza się rre i powtarza się brrerrerre-- 26 cze 2019, o 11:07 --Oczywiście pomagają same sufiksy, ale co gdy są:
brrerrerrebrrer
brrer

errerrebrrer
errebrrer
ebrrer
er

rrerrerrebrrer
rerrerrebrrer
rrerrebrrer
rerrebrrer
rrebrrer
rebrrer
rrer
rer
r


przykład z "aaaaa" był łatwiejszy, ale co z tym?
ODPOWIEDZ