我不知道这是否是询问算法的地方。但是让我们看看我是否有任何答案… :)
如果有任何不清楚的地方,我很乐于澄清。
我刚刚在python中实现了Trie。但是,似乎有些事情比应该做的要复杂(作为一个热爱简单的人)。也许有人遇到过类似的问题?
我的目标是通过在子根目录的根中存储最大的公共前缀来最大程度地减少节点数。例如,如果我们有单词 stackoverflow ,
stackbase 和 stackbased ,则树将如下所示:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
注意,仍然可以想到具有一个字符的边缘(子节点的第一个)。
Find -query很容易实现。 插入 并不难,但是比我想要的要复杂。
我的想法是,先搜索要插入的密钥k( 查找
(k)),然后再在其中重新放置/拆分节点,然后再从空的树中插入密钥。查找过程停止。共有4种情况:(让k为我们要插入的键,而k’为搜索结束的节点的键)
似乎每种情况都是唯一的,因此暗示对Trie的不同修改。但是:真的那么复杂吗?我想念什么吗?有没有更好的方法?
谢谢 :)
乍一看,听起来您已经实现了Patricia
Trie
。在某些文献中,这种方法也称为路径压缩。该纸张的副本应位于ACM付费专区的后面,其中应包括插入算法。
您可能还需要查看另一种压缩方法:级别压缩。路径压缩的思想是用具有“跳过”计数的单个超级节点替换单个子节点的字符串。级别压缩的思想是用具有“度”数的超级节点替换完整或接近完整的子树,“度”数表示节点解码的密钥的位数。还有一种第三种方法,称为宽度压缩,但是恐怕我的记忆力不佳,我无法通过快速谷歌搜索找到它的描述。
级别压缩可以大大缩短平均路径,但是插入和删除算法变得非常复杂,因为它们需要像处理动态数组一样管理Trie节点。对于正确的数据集,级别压缩的树可能 很快
。据我所知,它们是存储IP路由表的第二快的方法,最快的是某种哈希算法。
对于字典树/前缀树可能大部分情况很难直观或者有接触的体验,尤其是对前缀这个玩意没啥概念,可能做题遇到前缀问题也是使用暴力匹配蒙混过关,如果字符串比较少使用哈希表等结构可能也能蒙混过关,但如果字符串比较长、相同前缀较多那么使用字典树可以大大减少内存的使用和效率。 一个字典树的应用场景:在搜索框输入部分单词下面会有一些神关联的搜索内容,你有时候都很神奇是怎么做到的,这其实就是字典树的一个思想。 一、字
我对tries和DAWGs(直接无环字图)很感兴趣,我已经读了很多关于它们的东西,但我不明白输出trie或DAWG文件应该是什么样子。 null 我也会很感激一个DAWG和Trie的输出。 我不想看到带有相互链接的气泡的图形表示,我想知道一旦一组单词被转换为try或dawgs后的输出对象。
当你编写一个算术表达式如 B*C 时,表达式的形式使你能够正确理解它。在这种情况下,你知道 B 乘以 C, 因为乘法运算符 * 出现在表达式中。这种类型的符号称为中缀,因为运算符在它处理的两个操作数之间。看另外一个中缀示例,A+B*C,运算符 + 和 * 仍然出现在操作数之间。这里面有个问题是,他们分别作用于哪个运算数上,+ 作用于 A 和 B , 还是 * 作用于 B 和 C?表达式似乎有点模糊
因此,我试图在SML中创建一个解析器程序,提示用户输入表达式。然后,它会告知输入的表达式是后缀、前缀还是中缀,然后显示结果。下面是我希望它做的一个示例: 我在创建函数时遇到了麻烦,这样它就会向屏幕输出结果,我不确定我是否正确地执行了该方法。在我首先计算出转换之前,我甚至不会专注于输出树。 我觉得我应该在第二个if语句中放一个递归方法(检查与运算符是否相等),但由于Alice SML语法的限制,我不
正如维基所说: 一组字符串的最长公共子字符串可以通过为字符串构建一个通用后缀树来找到,然后从其下方子树中的所有字符串中找到具有叶节点的最深内部节点 正如贾斯汀所说: 在(紧凑的)后缀树中,您需要找到最深的内部节点,这些节点包含所有字符串中的叶节点。如果在同一深度有多个节点,则必须比较该节点表示的字符串长度。i、 e.ABC、BC和C都有相同的深度,因此您必须比较ABC、BC和C字符串的长度,看看哪
问题内容: 在python源代码中,我偶然发现在类似如下的字符串之前有一个小b: 我知道表示unicode字符串的前缀和原始字符串文字的前缀。 它看起来像一个没有任何前缀的纯字符串,它代表什么?它在哪种源代码中有用? 问题答案: 这是Python3 bytes 文字。在Python 2.5和更早版本中,此前缀不存在(它等效于2.x的纯字符串,而3.x的纯字符串等效u于2.x中带有前缀的文字)。在P
我在互联网上搜索了一个很好的实现,它不是把数字表达式,而是把变量表达式从中缀符号转换成前缀和后缀。我做的所有搜索都没有成功。基本上,我想看看PHP中是否有任何实现,这样我就可以修改它以支持更多的操作符,而不仅仅是(-,*,=)。 例如转换: 同时保留变量名,不必输入数字进行计算。
本文向大家介绍将中缀转换为前缀表达式,包括了将中缀转换为前缀表达式的使用技巧和注意事项,需要的朋友参考一下 要通过计算机求解表达式,我们可以将其转换为后缀形式或前缀形式。在这里,我们将看到中缀表达式如何转换为前缀形式。 首先,中缀表达式反转。注意,对于反转,圆括号也将反转。 例如:表达式:A + B *(C-D) 反转后的表达式为:)D – C(* B + A 因此我们需要将左括号转换为右括号,反