trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。對於下圖的trie樹, 總共有4個單詞,abc, ad, efa, ef
**實現
節點:
#define charlength 256
typedef struct trienode trienode, *trienodeptr, *triestptr;
插入乙個節點:
void insert(triestptr root, char *key)
tmp = tmp->next[*(key + i)];
i++;
}tmp->isendofword = true;
}
搜尋乙個單詞:
int searchtrie(triestptr root, char *str)
else
return
false;
i++;
}if (tmp->isendofword == true)
else
}
刪除節點後返回路徑上最近的乙個鍵:
刪除節點,總共會有四種情況:
1. 字串超出範圍
2. 字串剛好結束,節點沒有子節點
3. 字串已經結束,節點存在字節點(count != 0)
(1) 節點是單詞的結尾(node->isendofword = true)
(2) 節點不是單詞的結尾(node->isendofword = false)
triestptr deletekey(triestptr root, char *key, int d)
else
if(root->count == 0 && root->isendofword == false)
}else
}else
else
return root;}}
完整**:
#include
#include
#include
#include
#include
#define length 4
#define wordlength 3
#define charlength 256
#define true 1
#define false 0
typedef
struct trienode trienode, *trienodeptr, *triestptr;
trienodeptr createtrienode(char key)
triestptr createtrie()
void insert(triestptr root, char *key)
tmp = tmp->next[*(key + i)];
i++;
}tmp->isendofword = true;
}void deletetrie(triestptr t)
}}int searchtrie(triestptr root, char *str)
else
return
false;
i++;
}if (tmp->isendofword == true)
else
}triestptr deletekey(triestptr root, char *key, int d)
else
if(root->count == 0 && root->isendofword == false)
}else
}else
else
return root;
}}void main() ;
triestptr root = createtrie();
for (int i = 0; i < length; i++)
deletekey(root, "ab",0);
printf("%d\n", searchtrie(root, "ape"));
deletetrie(root);
}
Trie樹(單詞查詢樹)
前言 tire樹,又稱之為字典樹或者單詞查詢樹。是一種樹形結構,是雜湊樹的變種。典型應用是用於統計 排序或儲存大量的字串 不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻的統計。因為相同的字串字首會共享同一條分支,所以優點是可以利用不同字串的相同字首來減少無謂的字串比較,查詢效率比hash表 has...
Trie 單詞查詢樹
l 簡介 trie 又稱單詞查詢樹 字首樹,是一種雜湊樹的變種。應用於字串的統計與排序,經常被搜尋引擎系統用於文字詞頻統計。含有單詞 tea tree a zsu 的一棵trie l性質 n根節點不包含字元,除根節點外的每乙個節點都只包含乙個字元。n從根節點到某一節點,路徑上經過的字元連線起來,為該...
Trie 單詞查詢樹
l 簡介 trie 又稱單詞查詢樹 字首樹,是一種雜湊樹的變種。應用於字串的統計與排序,經常被搜尋引擎系統用於文字詞頻統計。含有單詞 tea tree a zsu 的一棵trie l性質n 根節點不包含字元,除根節點外的每乙個節點都只包含乙個字元。n 從根節點到某一節點,路徑上經過的字元連線起來,為...