当前位置: 首页 > 知识库问答 >
问题:

构造Trie的并行算法?

施宏大
2023-03-14

共有1个答案

贡和裕
2023-03-14

一个明显的无锁算法是:

  1. bucket--按长度k前缀对输入字符串进行排序(通常,k=1,但对于小字母表,增加k)。
  2. 为每个字母构造一个包含以该字母开始的所有字符串的k后缀的trie。
  3. 合并上一步的尝试(当k=1时,只需添加根节点)。

假设前缀是均匀分布的,这可以给你一个线性加速,直到字母表的大小是k次方。

 类似资料:
  • 前面两个原则幸福地忽略了任何子线程运行出错的可能性。这显然不是现实世界所进行的。异常会在你的子线程发生,你不得不转向去收拾残局。当然,后台线程的异常在某种程度上增加复杂性。异常不能继续调用线程边界的函数栈。而是,如果在线程启动方法出现异常,这个线程就会终止。没有任何方式调用线程检索错误,或者对异常做任何事。更重要的是,如果出现异常你的并行算法就必须支持回滚,你不得不理解异常出现的副作用并且能从异常

  • 问题内容: 是否有任何库或文档/链接提供了有关在Java中实现Trie数据结构的更多信息? 任何帮助将是巨大的! 谢谢。 问题答案: 您可以阅读Java Trie 或查看trie。

  • 本文向大家介绍PHP构造二叉树算法示例,包括了PHP构造二叉树算法示例的使用技巧和注意事项,需要的朋友参考一下 树(Tree)在数据结构还是很重要的,这里表示二叉树用括号表示法表示。先写一个二叉树节点类: 然后构造二叉树: 这里写上一个打印二叉树的函数(中序遍历): 运行结果: 输入一个字符串 "A(B(C,D),G(F))" 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐

  • 我试图理解“有效现代C”中关于特殊成员函数生成的第17项,所以我尝试了一些示例,并试图对一些行为进行推理。书中说: ..当我提到移动操作move构造或移动分配一个数据成员或基类时,不能保证实际会发生移动。“Memberwise移动”实际上更像Memberwise移动请求,因为未启用移动的类型(即,对移动操作不提供特殊支持的类型,例如大多数C 98遗留类)将通过其复制操作“移动”。。。此外,不会为任

  • 问题内容: 要从Java 类中创建新对象,通常使用以下语句 我读过new运算符通过在堆中分配内存空间来创建新对象,但是我也读到调用构造函数会创建它。因此,这有点令人困惑。哪一个在创建对象?是 新 运算符还是默认构造函数? 问题答案: 具有与类同名的方法是合法的(尽管令人困惑),消除了任何歧义。指示JVM应该为给定的类和参数列表调用实例初始化方法,并返回已初始化的对象(在初始化方法的第一个(隐藏)参

  • C 风格的循环通常不必要 你可以写 C 风格的循环,但常常不需要它们。 不要在 foreach 的位置使用它们: for (my $i = 0; $i <= $#foo; $i++) { # BAD foreach (@foo) { # BETTER 不要在 while 的位置使用它们: for (my $i = <STDIN>; $i; $i = <STDIN>) { # BAD whil