簡體   English   中英

從 trie 中獲取包含特定字母的單詞

[英]Get words from trie containing specific letters

我想從包含特定字母的 trie 中檢索單詞。 例如:列出所有包含字母 [a, g] 的單詞。 如果我的 trie 有 ["APPLE", "EGG", "CAR", "BLUE", "AGRICULTURE", "DONE"] 的話,它會返回 "AGRICULTURE"。

這是一個非常簡單的 trie 實現

def load_trie(words):
    root = {}
    for word in words:
        curr_node = root
        for letter in word:
            curr_node = curr_node.setdefault(letter, {})
        curr_node.setdefault('', True)
    return root

with open('sowpods') as word_list:
    words = [word.strip().upper() for word in word_list]
    
TRIE = load_trie(words)

如果我可以檢查包含特定字母的單詞,那么查找包含特定字母的單詞也會很好。

@Mark 提供了關於雙重問題的有用評論:

對於包含字母的單詞,您可以使用這些鍵修剪分支。

現在,我們怎樣才能使樹或任何樹很好地適應原始問題? 讓我們來看看。 字謎問題的標准答案是存儲排序的字母集

for word in vocabulary:
    set_to_word[sorted(word)].append(word)

接着

set_to_word.get(sorted(target_word))

將顯示所有相應的字謎。

為了使其適應 trie,我們希望在根附近出現頻繁的字母。 這是字母表的一種合理頻率排序:

ETAOINSRHLDCUMFPGWYBV KXJQZ

而不是sorted( ... )排列,而是按 etaoin 排列單詞,並利用命中通常會導致在根附近命中的事實。 在這個方案中,“眼淚”將映射到“etasr”。

對於對偶問題,只需存儲字母的補集,遵循相同的順序。 所以“眼淚”映射到一個 21 個字符的字符串,或者一些前綴截斷就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM