簡體   English   中英

特里樹結構聲明

[英]Trie tree struct declaration

所以我有這段代碼(不是我的),我一生都無法理解那些結構是什么樣的。 有人可以解釋一下嗎?

typedef struct trie_node trie_node_t;
struct trie_node
{
    int value;
    trie_node_t *children[ALPHABET_SIZE];
};

// trie ADT
typedef struct trie trie_t;
struct trie
{
    trie_node_t *root;
    int count;
};

第二個結構中的int count是用於計數放入樹中的所有單詞,但是我想知道每個單詞被放入其中的次數,除了修改代碼的其余部分外,我應該如何修改結構以實現該功能?

其余代碼: http//pastebin.com/9zQuCBjb

我想您已經熟悉了trie的概念,您可以通過沿着單詞的字母在樹上行走(或爬行,以使用鏈接的代碼的單詞)並在每個節點處分支來找到單詞和單詞的前綴到您找到的字母。 每個節點有許多子節點。 如果使用不區分大小寫的拉丁字母,則為26。

該單詞被編碼在您到達的路徑中:

root->[f]->[i]->[s]->[h]  --> "fish"

現在,您需要知道當前節點是否代表一個單詞。 "fish"是一個詞,但"fis"不是。 您不能使用節點是沒有子葉的事實,因為"fishbone"可能在字典中。 這就是輸入value目的:零表示當前節點不代表單詞,否則該值是當前單詞的基於1的索引。

創建新條目時,您只需向下爬取該Trie,就可以在創建過程中創建新節點,並使用當前字數將最后一個節點標記為值。 如果"fishbode"已經在特里"fishbode"中,並且添加了"fish" ,則不會創建新節點,而只會用新值標記"h"節點。

trie結構只是一個幫助,它包含了trie的根節點和一個計數。

如果要跟蹤事件的發生,請在節點上添加一個count字段,並在設置value時將其遞增。 (原始代碼不會檢查之前的值是否已經存在,並且會無條件添加單詞,從而覆蓋所有舊值。)

您還可以通過具有prefix_count字段並在插入鍵時通過節點時增加該值,來對當前節點prefix_count前綴開頭的所有單詞進行計數。

當您想要檢索發生事件時,您將必須遍歷所有子樹。

嘗試對於自動擴展用戶輸入的首字母或T9樣式的鍵入系統中的單詞很有用,但是它們非常貪婪。 如果您只想計算單詞的出現次數(而沒有利用trie的好處),則可以使用單個要計數的單詞哈希表來實現這一點。

暫無
暫無

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

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