草庐IT

patricia-trie

全部标签

ruby - 构建Trie数据结构的Ruby代码讲解

所以我从维基百科上抓取了这段ruby​​代码并做了一些修改:@trie=Hash.new()defbuild(str)node=@triestr.each_char{|ch|cur=chprev_node=nodenode=node[cur]ifnode==nilprev_node[cur]=Hash.new()node=prev_node[cur]end}endbuild('dogs')puts@trie.inspect我首先在控制台irb上运行它,每次我输出node时,每次{}都会给我一个空哈希值,但当我实际调用时该函数使用参数'dogs'字符串构建,它确实有效,并输出{"d"=>

javascript - 使用 trie 自动完成

我正在编写一个自动完成脚本,并且正在考虑使用trie。我的问题是我想要返回匹配的所有内容。因此,例如,我输入字母r我希望返回所有以r开头的条目。然后是所有以re等开头的条目。这对trie来说是否可行,它是如何工作的。另外,如果有更好的方法,我愿意接受建议。我问的原因是,返回r分支的所有节点似乎很复杂,需要大量处理。是的,我可能正在重新发明轮子,但我想了解它是如何工作的。 最佳答案 您完全可以使用trie树来做到这一点。这是我拼凑的一些代码,可以为您指明正确的方向:vartokenTree=function(tokenArray){v

php - 优化 Trie 实现

除了乐趣之外,我没有任何原因地实现了一个Trie今天。目前它支持add()和search(),remove()也应该实现,但我认为这很简单。它功能齐全,但用数据填充Trie对我来说有点过分了。我将此列表用作数据源:http://www.isc.ro/lists/twl06.zip(在SO的其他地方找到)。加载需要大约11秒。我的初始实现用了大约15秒,所以我已经给了它很好的性能提升,但我仍然不满意:)我的问题是:还有什么可以给我(实质性的)性能提升?我不受此设计的约束,可以接受彻底的检修。classTrie{private$trie;publicfunction__construct(

java - 寻找有关 trie 的良好介绍

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我正在寻找有关Tries的介绍/教程。我用谷歌搜索发现的大多数链接对我来说要么过于简洁抽象,要么过于琐碎。有人可以提供一个很好的Java示例引用供我学习吗?谢谢

java - Trie 在 Guava 中的实现?

在过去,GoogleCollection包括一个implementationTRIE的。Guava中是否有任何TRIE实现?我需要一种有效的方法来查找一组字符串中的公共(public)前缀。 最佳答案 IsthereanyTRIEimplementationinGuava?没有。(IIRC,这或多或少是因为tries是一种非常通用的数据结构,而我们没有数据、资源或需求来设计符合Guava通常标准的API?)https://code.google.com/p/guava-libraries/issues/detail?id=10

c++ - 双数组 Trie 问题

我试图从http://linux.thai.net/~thep/datrie/datrie.html中理解双数组Trie实现但我不明白以下部分。check[base[s]+c]=sbase[s]+c=t这里加c是什么意思。任何人都可以用简单的语言解释算法。 最佳答案 假设您将二维数组折叠成一维数组:intarr2D[2][3];intarr1D[2*3];//#ofrows*#ofcolumns//accesselement[1][2]of2Darray,i.e.,thelastelementintelem2D=arr2D[1][2

c++ - 在 C++ 中创建 trie/suffix 树时减少内存使用

我正尝试在C++中创建一个trie,现在我的基本数据结构看起来像..structnode{intcount;nooftimesthisnodehasbeenvisited.structnode*child[ALPHABET_SIZE];//LetALPHABET_SIZEbe26}当字符串变大时,会浪费大量分配的内存。就像我们插入"he"我们的树将是root---->h--->e|--->e我们看到在根目录下,只有2/26th分配的内存被使用。如何改进??。 最佳答案 一些非常基本的建议:如果预计您的分支因子较低,请考虑为子项使用数

c++ - 使用 map 的 Trie 实现

实现Trie数据结构的简单方法是使用std::map.如果我使用它会发生什么错误。我需要序列化和反序列化Trie。所以节点中的每个映射都是AVL树。也许我会有开销?但是在map中我可以更快地搜索,如果我使用列表。templatestructNodeTrie{std::map`boolisWord;T&val;}; 最佳答案 我喜欢你的想法。尝试是重要的数据结构,我对map作为高效容器有愉快的体验。只是一些评论:如果您的编译器支持它,您可以通过为每个节点单独分配来避免浪费内存。templatestructNodeTrie{NodeTr

c++ - 在基数树/patricia trie 中进行前缀搜索

我目前正在实现一个基数树/patriciatrie(随便你怎么调用它)。我想用它在一个功能严重不足的硬件上的字典中进行前缀搜索。它应该或多或少像自动完成一样工作,我。e.显示输入的前缀匹配的单词列表。我的实现基于onthisarticle,但其中的代码不包括前缀搜索,尽管作者说:[...]Sayyouwanttoenumerateallthenodesthathavekeyswithacommonprefix"AB".Youcanperformadepthfirstsearchstartingatthatroot,stoppingwheneveryouencounterbackedge

c++ - 如何打印 Trie 中的所有单词?

我正在尝试用C++创建一个Trie实现。我不知道如何打印存储在Trie中的所有单词。这就是我实现TrieNode的方式。structTrieNode{boolisWord;intdata;//NumberoftimesWordOccuredTrieNode*Child[ALPHABET_SIZE];//definedas26};我知道我可以存储一个指向父节点的指针,深度优先搜索所有isWord==True的节点并递归地打印这些节点中的每个单词。但我想知道是否有一种方法可以通过我实现的TrieNode打印出Trie中的每个单词。感谢您的帮助。 最佳答案