Я новичок в создании данных, и я реализую trie для устранения неоднозначности базы данных имен с использованием расстояния редактирования. Я использую следующую реализацию:Удаление слова из определенной реализации trie в Python
синтаксического дереваhttp://stevehanov.ca/blog/index.php?id=114
, которая в основном:
class TrieNode:
def __init__(self):
self.word = None
self.children = {}
global NodeCount
NodeCount += 1
def insert(self, word):
node = self
for letter in word:
if letter not in node.children:
node.children[letter] = TrieNode()
node = node.children[letter]
node.word = word
# read dictionary file into a trie
trie = TrieNode()
for name in names:
WordCount += 1
trie.insert(name)
Это делает работу красиво, как он вставляет все имена в синтаксическое дерево. Теперь я просматриваю список имен, которые есть один за другим, и использую trie для возврата списка всех имен, находящихся на некотором расстоянии редактирования от переданного имени. Затем я хочу удалить все имена из trie, которые были возвращены в списке.
Есть ли быстрый способ сделать это?
Спасибо!
Первый вопрос: почему? Второе: понимаете ли вы код «Trie», который вы заимствовали? Потому что 'delete' - довольно тривиальная рекурсивная функция. – abarnert
Чтобы ответить на первый вопрос, эти имена являются ключами к словарю. Когда my trie возвращает список похожих имен, я группирую все значения, связанные с этим списком имен, под одним ключом в словаре. Затем я удаляю все ключи, связанные со всеми похожими именами, возвращаемыми trie. Теперь, если я не удалю слова, которые я уже взял из trie, он может вернуть некоторые из них, снова сопоставляя их с другим именем, и это вызовет ошибку исключения ключа при попытке удалить этот ключ. – user1773010
Чтобы ответить на второй вопрос, я действительно понимаю код, но у меня есть крайний срок от моего начальника, чтобы получить исчерпывающее значение в конце дня. Это не вопрос. – user1773010