trie樹也叫字典樹,搜尋樹等。
如圖所示
下面是用stl 的map來實現
class trie_item_c
trie_item_c(const char nm)
void set_name(const char nm)
trie_item_c * get_child(const char nm) }
bool find(const char* dic)
const char* temp = dic;
map::const_iterator it = children.find(*temp);
if(it == children.end())
return false;
return it->second->find(++temp);
} void print()
printf("\n");
} virtual ~trie_item_c() }
private:
mapchildren;
char name;
};
下面**是構建樹的過程
for(const char* dic = lst.first_string();dic;dic = lst.next_string())
//add one null child
temp->get_child('\0');
}
判斷乙個單詞是否在root中,只需要呼叫root->find("book");即可。
Trie樹 一種NB的資料結構
最近在做一些題的時候更加理解到為什麼有一句話叫做程式 演算法 資料結構,可能之前的一些題我用 最基本的資料型別加上一些 意想不到 的演算法就可以解決,但是往往一些問題,佐以精妙的資料結構能讓人事半功倍。字典樹,是一種 樹形結構 是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的 字串 但不僅限...
搜尋 一種分詞方法的實現
加上有一句話,thisisabook,要將之分成合適的單詞,假設有乙個字典,這個字典包含單詞。我剛看到這個需求,第一反應是用搜尋中的分詞方式,最大匹配法,後來經過高人指點,說不用,只需要遇到正確的單詞就分出來,然後又想到了回溯法,再次經高人指點,回溯也不需要,只需要遞迴即可。下面是簡單的實現 供參考...
Trie樹的實現
一 定義 trie,又稱字典樹,是一種用於快速檢索的二十六叉樹結構。典型的空間換時間 二 結構圖 三 原理 特別地 和二叉查詢樹不同,在trie樹中,每個結點上並非儲存乙個元素。四 性質 0 利用串的公共字首,節約記憶體 1 在trie樹上進行檢索總是始於根結點 2 根節點不包含字元,除根節點外的每...