background image
通过 trie 算法建立的树如图
通过 trie 算法建立的单词查找,很明显,有打上“X”的节点,从根到该节点所有字符连起
来,就是一个完整的单词。
比如有搜索,搜索引擎等等。
那么在识别单词的时候也就很简单了,只要顺着边走,直到匹配的单词结束,就可通过当前
的树的节点有没有打上“X”,就可以清楚的知道,这个单词存不存在。或者还有一种可能,
就是无路可走,也就是单词还没有匹配完,但是已经到了叶子节点,那么这个单词肯定就不
存在。
举个例子,比如要识别"搜索"这个单词。那么它走过的路径就是"root->搜->索",匹配完成后,
刚好"索"这个节点有打上“X”,也就说明“搜索”这个单词存在。反之,就不存在。
基本的算法和数据结构就是这样,单词的识别,相对与下一节要讨论的自然语言分词要简单
得多得多得多得多!!!
ok,下面通过程序来看看搜索的速度,本例子采用的词库是 IKAnalyzer 的默认词库,总共的
单词大概有 30 万个,全部是中文。
首先建立数据结构
/*
* trie.h
*
Created on: Aug 28, 2013
*
Author: sean
*/
#ifndef TRIE_H_
#define TRIE_H_