Dla algorytmów wyszukiwania dwóch ciągów znaków: KMP i drzewo przyrostków, które jest preferowane w jakich przypadkach? Podaj kilka praktycznych przykładów.Algorytmy wyszukiwania ciągów
9
A
Odpowiedz
11
Drzewo przyrostków jest lepsze, jeśli będziesz musiał odpowiedzieć na wiele pytań, takich jak "czy igła jest obecna w stogu siana?". KMP jest lepszy, jeśli szukasz tylko jednego ciągu w innym pojedynczym łańcuchu i nie musisz tego robić wiele razy.
Drzewo sufiksów jest o wiele bardziej ogólną strukturą danych, dzięki czemu można z nim znacznie więcej. Zobacz, co możesz z nim zrobić: here. KMP jest użyteczny do wyszukiwania, czy łańcuch jest podłańcuchem w innym ciągu.
Możesz także chcieć sprawdzić inne algorytmy, takie jak Boyer-Moore, Rabin-Karp, a nawet algorytm naiwny, ponieważ istnieją sytuacje (wejścia), w których jedna jest lepsza od innych.
Konkluzja brzmi:
- Jeśli masz dużo zapytań jak ten, o którym wspomniałem powyżej, warto zbudować drzewo przyrostek, a następnie odpowiedzieć na każde zapytanie szybciej.
- Jeśli potrzebujesz więcej niż tego typu zapytań, warto zbudować drzewo sufiksów.
- Jeśli zależy Ci jedynie na okazyjnym poszukiwaniu, czy łańcuch jest podciągiem innego łańcucha, użyj KMP.
Powiązane problemy
- 1. algorytmy wyszukiwania ranking/trafność
- 2. Genetyczne algorytmy programowania i wyszukiwania
- 3. Szybkie algorytmy do wyszukiwania parami odległości euklidesowej
- 4. Sugerowane algorytmy wyszukiwania równoległego drzewa równoległego?
- 5. wyszukiwania kluczy słownikowych zawartych w tablicy ciągów
- 6. Jakie algorytmy używa SQL?
- 7. Algorytmy 2D poziomu szczegółowości (LOD)
- 8. Książki o algorytmach ciągów
- 9. Diff algorytmy
- 10. Algorytmy kompresji zestawu prób
- 11. Jak mogę utworzyć przyrostowy skierowany acykliczny wykres słowo do przechowywania i wyszukiwania ciągów?
- 12. Jakie są wspólne algorytmy ustawiania ostrości?
- 13. Algorytmy dopasowania łańcuchów Rabina Karpa
- 14. skuteczny sposób wyszukiwania ciągu w liście ciągów znaków?
- 15. Użycie JS/jQuery do wyszukiwania ciągów/dopasowywania rozmytego?
- 16. Jaki jest najszybszy sposób wyszukiwania ciągów w Objective-C?
- 17. Wstępnie zaszyfrowane klawisze ciągów do szybszego wyszukiwania słowników Python?
- 18. Najbardziej efektywny sposób wyszukiwania częściowych dopasowań ciągów w dużym pliku ciągów (python)
- 19. Algorytmy rozkładania personelu
- 20. Algorytmy w C
- 21. Algorytmy pakowania trójwymiarowego
- 22. Algorytmy dla 3D Mazes
- 23. Algorytmy Pyephem Referencje
- 24. Algorytmy kompresji danych
- 25. Algorytmy rozpoznawania wzorów
- 26. Algorytmy trójstronnego scalania tekstu
- 27. Algorytmy układu graficznego Java
- 28. Algorytmy genetyczne w grach
- 29. Algorytmy dla pozycji rankingowych
- 30. Algorytmy symulacji miasta?
Co myślisz sam? Teraz wygląda na to, że skopiowałeś część zadania domowego. –
Praca domowa? Oznacz to tak. – DVK
To nie jest praca domowa. Jestem zawodowym programistą pracującym w firmie. To pytanie służy tylko zdobywaniu wiedzy. – avd