Trie Tree的c++实现
来源:互联网 发布:win像mac一样装软件 编辑:程序博客网 时间:2024/06/10 13:21
问题描述:
1.Tire tree 是一种用来存储字符串的高效的数据结构。它的插入和查询的时间复杂度为O(string length)。用self balance tree 存储字符串的 时间复杂度为O(length(string)*lgN),N是树的节点树。Trie tree的查询和存储优势是很显然的;
2.它的缺点是树的存储空间变大,需要更多的内存;
3.它的每个节点会有多个孩子节点,同一节点下的孩子共享相同的前缀串(从根节点到父节点的字符串);
4.详细可见下图:
程序代码:
#ifndef _TRIE_TREE_H_#define _TRIE_TREE_H_#include <stdlib.h>#include <assert.h>#include <string>#include <iostream>/****/class TrieTree{public:static const int MAX_BRANCH_SIZE = 26;// tree nodetypedef struct tagTireNode{tagTireNode* child[MAX_BRANCH_SIZE];int leafFlag;tagTireNode():leafFlag(-1){memset( child, 0x00, sizeof(child) );}}TrieNode, *pTireNode;TrieTree():m_root(new TrieNode), m_count(0){}~TrieTree(){Clear();}/** Clear all node**/void Clear(){Clear( m_root );}/** search string **/bool Search( const char* word ){pTireNode cur = m_root;size_t depth = strlen( word );for( size_t i = 0; i < depth; i++ ){int idx = CharToIndex( word[i] );if( !cur->child[idx] ){return false;}cur = cur->child[idx];}return cur;}/** Insert string to tree**/void Insert( const char* word ){pTireNode cur = m_root;size_t depth = strlen( word );for( size_t i = 0; i < depth; i++ ){int idx = CharToIndex( word[i] );if( !cur->child[idx] ){if( 0 == i )m_count++;cur->child[idx] = new TrieNode;}cur = cur->child[idx];}cur->leafFlag = 0;}/** Compress output tree**/void OuputCompressTree( std::string& output ){OuputCompressTree( output, m_root );}private:void OuputCompressTree( std::string& output, pTireNode root ){for( size_t i = 0; i < MAX_BRANCH_SIZE; i++ ){if( root->child[i] ){char c = IndexToChar( i );output += c;if( 0 == root->leafFlag ){return;}else{OuputCompressTree( output, root->child[i] );}}}}/****/void Clear( pTireNode& node ){if( 0 == node )return;for( size_t i = 0; i < MAX_BRANCH_SIZE; i++ ){Clear( node->child[i] );}delete node;node = 0;}/****/int CharToIndex( char input ){return (int)(input - 'a');}/****/char IndexToChar( int idx ){return (char)( idx + 'a');}private:pTireNode m_root;size_t m_count;};/** Test interface**/void TestTrieTree(){char* words[] = {"the", "a", "there", "answer", "any", "by", "bye", "their", "ant", "these", "heap", "dynamic", "day", "micro", "meter", "mimic", "soul","such", "many", "metal" };size_t size = sizeof(words)/sizeof(words[0]);TrieTree tree;for( int i = 0; i < size; i++ ){tree.Insert( words[i] );}for( int i = 0; i < size; i++ ){assert( tree.Search( words[i] ) );}assert( tree.Search("man") );assert( tree.Search("met") );assert( tree.Search("so" ) );assert( !tree.Search("bee"));assert( !tree.Search("at") );std::string outputBuf;tree.OuputCompressTree( outputBuf );std::cout << outputBuf.c_str() << std::endl;}#endif
compile and run in visual studio 2005
1 0
- Trie (prefix tree) 实现 (C++)
- Trie Tree的c++实现
- Python学习笔记:Trie Tree的实现
- Trie-Tree 实现
- Trie Tree简单实现
- Trie (prefix tree) 实现 (Java)
- Trie (prefix tree) 实现 (Java)
- Trie Tree匹配算法实现
- Trie 前缀树的c 实现
- bitwise trie tree 的参考实现-nedtries简单解析
- trie tree 字典树的简介与实现
- 字典树的C++实现 Implement of trie tree
- Implement Trie (Prefix Tree) 字典树的实现
- 208. Implement Trie (Prefix Tree) 前缀树的实现
- POJ_2418_Hardwood Species(map实现、Trie tree实现)
- Algorithm: The implementation of Trie Tree (C++)
- LeetCode-Implement Trie (Prefix Tree) (C++)
- 使用 trie tree 实现 auto-completion
- python中文字符编码decode,encode以及乱码解决总结
- [IOS] Storyboard全解析 --转
- TaskScheduler.UnobservedTaskException
- Linux manpage转换成pdf的方法
- Unity3D教程:如何使用layerMask参数
- Trie Tree的c++实现
- linux添加头文件路径
- 关于应用启动页的加载
- 从零单排c++ primer(19)
- solaris查看内存、CUP、硬盘总数和使用情况 (收藏)
- 男子家中挖地窖 囚禁前妻半个月(图)
- 苹果iPad 4详解与正版行货水货区分
- MySQL性能优化详解
- Hadoop 的分布式架构改进与应用