Я начинаю читать о Trie. Я получил также ссылки от друзей здесь: Tutorials on TrieКогда мы действительно используем Trie?
Я не ясно следующее:
кажется, что идти дальше и использовать Trie один предполагает, что все входные строки, которые будут пространство поиска и используется для построить Trie разделены в отдельные границы слов.
E.g. все примеры учебники я видел использование сигналов, таких как:
S={ball, bid, byte, car, cat, mac, map etc...}
Тогда мы строим синтаксического дерева из S
и сделать наши поиски (очень быстро)
Мой вопрос: Как мы в конечном итоге с S
начать с ?
Я имею в виду, прежде чем начинать читать о попытках, я представил себе, что S
будет произвольно длинным текстом, например. A Shakespeare
проход.
Затем, используя Trie, мы могли бы найти вещи очень быстро.
Но, похоже, это не тот случай.
Является ли предположение, что входной проход (например, Shakespeare
) предварительно обработан для всех слов, чтобы получить S
?
Итак, если вы хотите искать шаблоны (так же, как и в Google, и видеть, что все страницы имеют также пробелы в вашем поисковом запросе), Trie не подходит?
Когда мы узнаем, является ли Trie структурой данных, которую мы действительно можем использовать?
Почему занимает больше места, чем 'HashTable'? Используя 'HashTable', мне пришлось бы хранить' ababa' и 'abab' и' aba' и 'ab' и' a' в качестве отдельных строк токенов, а с помощью 'Trie' я бы просто сохранил' ababa'. Так почему вы говорите, что это занимает больше места, чем «HashTable»? – Jim
@Jim Я не думаю, что Trie займет больше места, чем HashTable. За исключением Trie, сделанного из слов с разными первыми символами, которые маловероятны. , например. S = {муравей, мяч, кошка}. У меня есть дополнительная статистика пространства/времени в структурах данных Trie/HashMap здесь: http://code.google.com/p/java-algorithms-implementation/ – Justin
@Jim: Я думаю, что вы неправильно поняли: «По сравнению с хэш-таблицей это [trie] может потребовать меньше памяти ». Три никогда не занимают больше места, чем Hashtable в теоретических терминах (они имеют как O (n) использование пространства в худшем случае). Однако константа намного больше для trie, из-за связей между узлами, которые занимают дополнительное пространство. Поэтому на практике trie может занимать больше или меньше места, быть быстрее или медленнее (обход также требует времени), чем хэш-таблица. Это сильно зависит от вашего набора данных. – LiKao