词条 | Trie树 |
释义 | trie树定义Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 结构示意图基本特性它有3个基本特性: 1)根节点不包含字符,除根节点外每一个节点都只包含一个字符。 2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 3)每个节点的所有子节点包含的字符都不相同。 示例代码Trie树的类定义: const int MaxKeySize = 25; //关键码最大位数 typedef struct { //关键码类型 char ch[MaxKeySize]; //关键码存放数组 int currentSize; //关键码当前位数 } KeyType; class TrieNode { //Trie树结点类定义 friend class Trie; protected: enum { branch, element } NodeType; //结点类型 union NodeType { //根据结点类型的两种结构 struct { //分支结点 int num; //本结点关键码个数 TrieNode *link[27]; //指针数组 } brch; struct { //元素结点 KeyType key; //关键码 recordNode *recptr; //指向数据对象指针 } elem; } } class Trie { //Trie树的类定义 private: TrieNode *root, *current; public: RecordNode* Search ( const keyType & ); int Insert ( const KeyType & ); int Delete ( const KeyType & ); } Trie树的搜索算法: RecordNode* Trie::Search ( const KeyType & x ) { k = x.key; concatenate ( k, ‘b’ ); current = root; int i = 0; //扫描初始化 while ( current != NULL && current→NodeType != element && i <= x. ch[i] ) { current = current→brch.link[ord (x. ch[i])]; i = i++; }; if ( current != NULL && current→NodeType == element && current→elem.key == x ) return current→recptr; else return NULL; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。