标签: trie

如何尝试在mmo对象格式的符号表中使用?

我试着理解mmo目标文件格式是如何工作的,这用于Don Knuth的教育MMIX架构.我没有买过MMIXware,所以我必须从汇编程序和模拟器的文字源文件中猜出大部分细节.

对象格式使用特殊的三元搜索trie来存储符号表.看看代码,我不太明白它是如何工作的.有人可以向我解释一些细节吗?特别是关于如何序列化树.

mmix trie object-files

5
推荐指数
1
解决办法
131
查看次数

后缀树VS尝试 - 用简单的英语,有什么区别?

我已经看了这个问题,但我仍然没有看到后缀树和Trie之间的区别.

两者都具有给定字符串的所有子字符串,因此它们彼此之间有何不同?

algorithm tree suffix-tree trie data-structures

5
推荐指数
1
解决办法
2520
查看次数

如何在 android 中使用 autocompleteTextView 执行 Trie 搜索?

我需要使用 Trie 搜索来实现 AutocompleteTextView。我正在使用一个 Vertex 类和一个 Trie 类作为 Trie 树数据结构,以及一个用于自定义 autocompleteTextView 下拉框视图的适配器。

以下是我正在使用的所有类:

顶点类:

public class Vertex {

private HashMap<Character, Vertex> vertexSons;
private List<Integer> wordsIndexList;
private List<Integer> prefixesIndexList;
private int wordsNumber;
private int prefixesNumber;

public Vertex() {
    vertexSons = new HashMap<Character, Vertex>();
    wordsIndexList = new ArrayList<Integer>();
    prefixesIndexList = new ArrayList<Integer>();
    wordsNumber = 0;
    prefixesNumber = 0;
}

public boolean hasWords() {
    if (wordsNumber > 0) {
        return true;
    }
    return false;
}

public boolean hasPrefixes() {
    if (prefixesNumber > 0) …
Run Code Online (Sandbox Code Playgroud)

java android trie autocompletetextview

5
推荐指数
1
解决办法
3278
查看次数

尝试的缺点

我一直在研究尝试并检查它们的优点和缺点。由于它们恒定的 O(m) 查找(其中 m 是字符串的长度)和其他优点(例如提供字符串的有序检索和获取公共前缀),它们在许多实际应用中非常有用,例如字典、拼写检查器等。所以,优点对我来说很清楚,但局限性有点令人困惑。

我正在关注此链接:https : //en.wikipedia.org/wiki/Trie

这里列出的缺点是:

  1. 在某些情况下,用于查找数据的尝试可能比哈希表慢,尤其是在硬盘驱动器或其他一些辅助存储设备上直接访问数据时,与主存储器相比,随机访问时间较长。

后续问题- 为什么会有涉及二级存储的场景?不尝试也应该存储在主内存中。如果它们存储在二级存储中,那么无论如何都没有使用特里,因为磁盘访问总是会导致更多的时间。

  1. 有些尝试可能需要比哈希表更多的空间,因为可能会为搜索字符串中的每个字符分配内存,而不是像大多数哈希表那样为整个条目分配单个内存块。

后续问题:是否因为尝试将包含更多用于将每个字符连接到下一个字符的引用/指针,并且与将其存储为整个字符串相比会消耗更多字节?(我从这里的一个答案中得到了这个原因)。任何人都可以详细说明这一点吗?

我真的很感激这里的一些帮助。谢谢。

trie data-structures

5
推荐指数
1
解决办法
4168
查看次数

按前缀搜索多个单词(trie数据结构)

如何使用 trie(或其他数据结构或算法)通过前缀有效搜索多个单词?

例如:假设这是我的数据集:

  • 艾丽丝·琼斯
  • 鲍勃·史密斯
  • 鲍比·沃克
  • 约翰·多伊
  • (共10000个名字)

trie 数据结构允许我有效地检索以“ Bo ”开头的所有名称(因此无需迭代所有名称)。但我还想按前缀搜索姓氏,因此搜索“ Wa ”应该找到“Bobby Walker”。让事情变得复杂的是:当用户搜索“ Bo Wa ”时,也应该找到相同的名字。我怎样才能实现这个?我应该为名称的每个部分使用单独的 trie 结构吗?(以及如何合并结果)?

背景:我正在为大型地址簿(10000 多个名称)编写搜索功能。我想要一个非常快速的自动完成功能,可以在人们输入名字和姓氏的前几个字母时显示结果。我已经有一个使用正则表达式的解决方案,但它需要迭代所有名称,这会很慢。

algorithm tree search prefix trie

5
推荐指数
1
解决办法
2421
查看次数

从特里构建火焰图

我在定期生成的特里中有一些统计数据。我想根据两次尝试之间的差异生成火焰图。我怎么做?

t = pygtrie.StringTrie(separator=os.path.sep)

for dirpath, unused_dirnames, filenames in os.walk(ROOT_DIR):
    for filename in filenames:
        filename = os.path.join(dirpath, filename)
        try:
            filestat = os.stat(filename)
        except OSError:
            continue
        if stat.S_IFMT(filestat.st_mode) == stat.S_IFREG:
            t[filename] = filestat.st_size
Run Code Online (Sandbox Code Playgroud)

python algorithm trie flamegraph

5
推荐指数
1
解决办法
187
查看次数

如果排序需要 O(n) 时间,我们为什么不使用尝试进行排序?

以下是使用特里树对字符串进行排序的算法的描述:

该算法首先O(n)及时插入trie中的所有项目,其中n是要排序的单词列表中的字符总数。

然后它按顺序遍历树,当遇到is_end设置了标志的节点时,打印出一个以它的前缀开头的节点。这需要对特里树进行完整的遍历,这需要O(m)时间,其中 m 是特里树中的节点数。这以 为界n,因此这一步也以 为界O(n)

整个算法由两个子程序组成,每个子程序以 为界O(n)。例如,如果我们说平均单词包含c字符,那么 ifm是单词数,cm == n,并且总运行时间受O(n) == O(cm) == O(m)(我将其更改为的原因m是因为这是要排序的列表长度的传统度量,不是字符总数)。

因此,我的问题是,如果这个运行时分析是正确的,为什么这不是字符串排序的默认方法,因为它比任何O(nlogn)排序算法都快?

sorting algorithm trie time-complexity data-structures

5
推荐指数
1
解决办法
802
查看次数

字符串匹配中的前缀vs后缀Trie

我对使用try尝试的字符串匹配中使用的实际算法并不太精通.

我想知道为什么似乎更关注字符串匹配的后缀尝试而不是前缀尝试.我们可以不使用前缀尝试进行子串匹配吗?换句话说,后缀尝试超过前缀尝试的优点是什么?

string prefix trie matching

4
推荐指数
1
解决办法
938
查看次数

在字符串集上找到输入的字谜..?

给定一组字符串(大集合)和输入字符串,您需要有效地找到输入字符串的所有字符.您将使用什么数据结构.使用它,你会如何找到字谜?

我想到的是这些:

  1. 使用地图

    a)消除所有字母多于/少于输入的字母.

    b)将输入字符放在地图中

    c)遍历每个字符串的地图,看看是否所有字母都带有计数.

  2. 使用尝试

    a)将所有具有正确字符数的字符串放入trie中.

    b)遍历每个分支,如果输入中包含字母,则更深入.

    c)如果叶子到达这个词是一个字谜

有人能找到更好的解决方案吗?

您在上述方法中发现了哪些问题?

algorithm map trie

4
推荐指数
1
解决办法
7297
查看次数

Haskell中的内存高效虚拟值

如果我有键到值的映射,那么键组可以实现为固定虚拟值的键映射.

傻瓜有很多候选人:

  • data- 没有构造函数的定义类型
  • 其他无人居住的类型(例如forall a . a)
  • 单身人士类型
  • 未装箱的类型

对我来说最明显的解决方案是使用股票单例类型,()case我可以区分()底部,所以我认为内存表示()包括间接.

我有两个问题:

  • 是否Map.fromList [(1, ()), (2, ())]会比更多的内存let dummy = () in Map.fromList [(1, dummy), (2, dummy)]
  • 考虑到内存占用,CPU使用率和正确性,建议使用bytestring-triedummy构建集合的值是多少?

haskell map set trie singleton-type

4
推荐指数
1
解决办法
214
查看次数