Я не знаю, стоит ли спрашивать об алгоритмах. Но посмотрим, получу ли я какие-нибудь ответы ...:)
Если что-то неясно, я очень рад прояснить ситуацию.
Я только что реализовал Trie в python. Тем не менее, один бит казался более сложным, чем следовало бы (как тот, кто любит простоту). Возможно, у кого-то была похожая проблема?
Моя цель состояла в том, чтобы минимизировать количество узлов, храня самый большой общий префикс поддерева в его корне. Например, если бы у нас были слова stackoverflow , stackbase и stackbase , то дерево могло бы выглядеть примерно так:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
Обратите внимание, что все еще можно думать о ребрах, имеющих один символ (первый из дочерних узлов).
Find - запрос прост в реализации.
Вставка не сложно, но несколько сложнее, чем я хочу ..: (
Моя идея заключалась в том, чтобы вставлять ключи одну за другой (начиная с пустого дерева), сначала ища вставляемый ключ k ( Find (k)), а затем переставляя / локальное разбиение узлов в том месте, где процедура поиска останавливается. Там оказывается 4 случая:
(Пусть k будет ключом, который мы хотим вставить, и k 'будет ключом узла, где поиск закончился)
- k идентично k '
- k - это «правильный» префикс k '
- k '- это "правильный" префикс k
- k и k 'имеют общий префикс, но ни один из случаев (1), (2) или (3) не встречается.
Кажется, что каждый из случаев уникален и, следовательно, предполагает различные модификации Три. НО: это действительно так сложно? Я что-то пропустил? Есть ли лучший подход?
Спасибо:)