草庐IT

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"=>

c# - 支持前缀搜索的排序文本的节省空间的内存结构

我有一个问题:我需要基于文件路径前缀的文件系统数据的空间高效查找。换句话说,排序文本的前缀搜索。你说用特里树,我也这么想。问题是,尝试的空间效率不够高,并非没有其他技巧。我有相当多的数据:磁盘上大约450M的纯文本Unix格式列表大约800万行gzip默认压缩到31Mbzip2默认压缩到21M我不想占用接近450M的内存。在这一点上,我很乐意使用大约100M的空间,因为有很多前缀形式的冗余。我正在使用C#来完成这项工作,并且一个简单的trie实现仍然需要文件中的每一行都有一个叶节点。鉴于每个叶节点都需要某种对最终文本block的引用(32位,比如字符串数据数组的索引以最小化字符串重复)

javascript - 使用 trie 自动完成

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

javascript - 如何实现不变性

我正试图掌握trie是如何实现的并且实现了不变性,这与JS中的不变性有关。我理解应该如何进行重要的结构共享。我的问题是说你有一个像这样的图结构:a--b|c|d--h|e--i--l|f--j--m|g--k--n然后您向系统添加一个x。我将尝试两种不同的方式:a--b|c|d--h--x|e--i--l|f--j--m|g--k--n那个只是作为叶节点添加的。a--b|c|d--h|x|e--i--l|f--j--m|g--k--n那个被添加在路径的中间。我想知道处理这两种情况的不可变数据结构是什么。所以本质上我们有一个函数f:graph->graph'将图形更改为“新图形”,在引擎

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 - 表示字符串模式的数据结构

我正在寻找一个好的数据结构来表示以下形式的字符串:Domain:Key1=Value1,Key2=Value2...每个“域”可以包含以下模式字符-*、?(*-0个或多个字符,?-0或1个字符)每个“键”可以包含以下模式字符-*,?(*-0个或多个字符,?-0或1个字符)每个“值”可以包含以下模式字符-*、?(*-0个或多个字符,?-0或1个字符)例子:JBoss:**:*JBoss:type=ThreadPool,*JBoss:type=Thread*,*JB*:name=http1,type=ConnectionPool如果您熟悉JMXObjectName,那么本质上这就是Obje

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分配的内存被使用。如何改进??。 最佳答案 一些非常基本的建议:如果预计您的分支因子较低,请考虑为子项使用数