Я не знаю, если это место, где можно задать вопрос об алгоритмах. Но посмотрим, получаю ли я ответы ... :)Trie (Prefix Tree) в Python
Если что-то неясно, я очень рад прояснить ситуацию.
Я только что внедрил Trie в python. Однако один бит казался более сложным, чем следовало бы (как человек, который любит простоту). Возможно, у кого-то была аналогичная проблема?
Моя цель состояла в том, чтобы свести к минимуму количество узлов, сохранив в своем корне самый большой общий префикс субтри. Например, если бы мы были слова StackOverflow, stackbase и stackbased, то дерево будет выглядеть примерно так:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
Обратите внимание, что все еще можно думать о краях, имеющих один символ (первый из дочернего узла).
Найти -query прост в применении. вставки не трудно, но несколько сложнее, чем я хочу .. :(
Моя идея состояла в том, чтобы вставить ключи один за другим (начиная с пустого) синтаксического дерева, сначала ища, чтобы быть -интегрированный ключ k (Найти (k)), а затем переставить/разбить узлы локально в том месте, где останавливается процедура поиска. Оказывается, 4 случая: (Пусть k - это ключ, который мы хотим вставить и к «быть ключом узла, где поиск завершившийся)
- к идентично к»
- k является «правильным» префиксом для k '
- k' является «правильным» префиксом k
- k и k 'совместно используют общий префикс, но ни один из случаев (1), (2) или (3).
Кажется, что каждый из случаев уникален и, следовательно, подразумевает различные модификации Trie. НО: это действительно так сложно? Я что-то упускаю? Есть ли лучший подход?
Спасибо :)
Есть некоторые варианты попыток Патриции на веб-сайте Национального института стандартов и технологий (http://www.itl.nist.gov/div897/sqg/dads /HTML/patriciatree.html) –
Спасибо Джейсону за ссылку и совет! Хеширование также может быть хорошей техникой, когда оно становится плотным. Но давайте сохраним это просто в отношении вставок :) – jacob
Спасибо Кэти за ссылку. – jacob