Nie wiem, czy to jest miejsce, aby zapytać o algorytmy. Ale zobaczmy, czy dostaję jakieś odpowiedzi ... :)Trie (drzewo prefiksów) w Pythonie
Jeśli coś jest niejasne, bardzo chętnie wyjaśniam rzeczy.
Właśnie zaimplementowałem Trie w python. Jednak jeden kawałek wydawał się być bardziej skomplikowany, niż powinien (jako ktoś, kto kocha prostotę). Być może ktoś miał podobny problem?
Moim celem było zminimalizowanie liczby węzłów poprzez przechowywanie największego wspólnego przedrostka podrzędnego w jego katalogu głównym. Na przykład, jeśli mieliśmy słowa stackoverflow, stackbase i stackbased, to drzewo będzie wyglądać mniej więcej tak:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
Zauważ, że można jeszcze myśleć o krawędziach o jeden znak (the pierwszy z węzła potomnego).
Znajdź -query jest prosty w realizacji. Insertion nie jest trudne, ale nieco bardziej skomplikowane niż chcę .. :(
Mój pomysł polegał na włożeniu klucze jedna po drugiej (od pustej trie), najpierw szukając to-be -podstawiony klucz k (Znajdź (k)), a następnie przestawia/dzieli węzły lokalnie w miejscu, w którym kończy się procedura znalezienia.Okazuje się, że są 4 przypadki: (Niech k będzie kluczem, który chcemy wstawić i k 'być kluczem węzła, gdzie poszukiwanie zakończony)
- k jest identyczna jak k'
- k jest "właściwym" prefiksem k '
- k' jest "właściwym" prefiksem k
- k i k 'mają wspólny przedrostek, ale żaden z przypadków (1), (2) lub (3) wystąpić.
Wygląda na to, że każdy z tych przypadków jest niepowtarzalny, co sugeruje różne modyfikacje Trie. ALE: czy to naprawdę takie skomplikowane? Czy czegoś brakuje? Czy istnieje lepsze podejście?
Dzięki :)
Istnieje kilka implementacji Patricii w witrynie National Institute of Standards and Technology (http://www.itl.nist.gov/div897/sqg/dads) /HTML/patriciatree.html) –
Dzięki Jason za referencje i porady! Hashing może być również dobrą techniką, gdy robi się gęsta. Ale pozwala zachować prostotę w odniesieniu do wstawek :) – jacob
Dzięki Kathy za link. – jacob