string - 构造trie的并行算法?

标签 string algorithm data-structures parallel-processing trie

因为 trie 数据结构具有如此巨大的分支因子并且每个子树都完全独立于其他子树,似乎应该有一种方法可以通过并行添加所有单词来极大地加快给定字典的 trie 构造.

关于如何做到这一点,我最初的想法如下:将一个互斥体与 trie 中的每个指针(包括指向根的指针)相关联,然后让每个线程按照正常算法将单词插入 trie 中。但是,在跟踪任何指针之前,线程必须首先获取该指针上的锁,这样如果它需要向 trie 添加新的子节点,它就可以这样做而不会引入任何数据竞争。

这种方法的问题在于它使用了大量 的锁 - 一个用于 trie 中的每个指针 - 并且进行了大量 的获取和释放 -每个输入字符串中的每个字符一个。

有没有一种方法可以在不使用几乎所有锁的情况下并行构建 trie?

最佳答案

一个明显的无锁算法是:

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

假设前缀均匀分布,这可以使您线性加速到字母表大小的 k 次方。

关于string - 构造trie的并行算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342476/

相关文章:

c# - 从字符串中提取日期

algorithm - 作业车间调度 - 类项目 - 关于引用/算法的建议。用于实现和获得实验结果

java - 尝试在 map 中设置字符串时出现 WRONGTYPE 异常 (jedis)

algorithm - 多变量的大 O 效率

java - 采访谜题: How to find all "bad" worker histories?

c - 链接列表和大小为 4 的无效读取

c++ - 我应该使用什么样的数据结构来实现 UPGMA?

java - 哈希表 : Adding values with common keys and printing them out

java - 使用正则表达式消除字符串中的单词java

string - 为什么 "[[ ' >' > ' 0' ]]"返回 false 而 "[ ' >'\> ' 0' ]"返回 true?