Próbuję przechowywać dużą listę ciągów w zwięzły sposób, aby mogły one być bardzo szybko analizowane/przeszukiwane.Jak mogę utworzyć przyrostowy skierowany acykliczny wykres słowo do przechowywania i wyszukiwania ciągów?
Skierowany acykliczny wykres słowo (DAWG) doskonale pasuje do tego celu. Jednak nie mam listy ciągów do uwzględnienia, więc musi ona być przyrostowo budowana. Dodatkowo, gdy przeszukuję go w poszukiwaniu ciągu znaków, muszę przywrócić dane powiązane z wynikiem (nie tylko boolowskie stwierdzenie, czy było obecne).
Znalazłem informacje na temat modyfikacji DAWG do śledzenia danych ciągowych tutaj: http://www.pathcom.com/~vadco/adtdawg.html Wygląda niezwykle, bardzo skomplikowane i nie jestem pewien, czy jestem w stanie go napisać.
Znalazłem również kilka prac badawczych opisujących algorytmy budowania przyrostowego, chociaż odkryłem, że prace badawcze w ogóle nie są bardzo pomocne.
Nie sądzę, że jestem na tyle zaawansowany, aby móc połączyć oba te algorytmy osobiście. Czy istnieje dokumentacja algorytmu, który już je zawiera, lub alternatywny algorytm o dobrej szybkości wykorzystania pamięci?
Dzięki, JohnPaul. Najprawdopodobniej będę używał drzewa radix do przechowywania stringów, chociaż chciałbym zaoszczędzić trochę więcej na pamięci. Miałem nadzieję, że istnieje kompromis między przyrostowymi algorytmami budowy DAWG a strukturą śledzenia ciągów znaków, ale chyba nie! Niestety, nie mogę zaoferować ci pracy ani pracy, ponieważ jest to tylko mój projekt związany z hobby. Jeśli chciałbyś stworzyć i udokumentować elastyczną strukturę dla zabawy, bądź moim gościem i powodzenia (przynajmniej nie mam do tego rozumu)! –