我试图以简洁的方式存储大量字符串列表,以便可以非常快速地分析/搜索它们。
有向非循环词图(DAWG)非常适合这个目的。但是,我首先没有要包含的字符串列表,因此它必须是可增量构建的。此外,当我在其中搜索字符串时,我需要带回与结果相关的数据(而不仅仅是表示它是否存在的布尔值)。
我在这里找到了有关用于字符串数据跟踪的 DAWG 修改的信息:http://www.pathcom.com/~vadco/adtdawg.html http://www.pathcom.com/~vadco/adtdawg.html它看起来非常非常复杂,我不确定我是否有能力写它。
我还发现了一些描述增量构建算法的研究论文,尽管我发现研究论文总体上不是很有帮助。
我认为我还不够先进,无法自己组合这两种算法。是否已经有具有这些功能的算法的文档,或者具有良好内存使用和速度的替代算法?
我编写了 ADTDAWG 网页。在构建之后添加文字不是一种选择。该结构只不过是 4 个无符号整数类型的数组。它被设计为不可变的,以实现总 CPU 缓存包含和最小的多线程访问复杂性。
该结构是一个自动机,形成最小且完美的哈希函数。它是为了提高使用显式堆栈递归遍历时的速度而构建的。
已发布,它最多支持 18 个字符。包括所有 26 个英文字符将需要进一步扩充。
我的建议是使用标准 Trie,每个节点中存储一个数组索引。是的,这看起来有点幼稚,但每个 END_OF_WORD 节点只代表一个单词。 ADTDAWG 是传统 DAWG 中代表许多单词的每个 END_OF_WORD 节点的解决方案。
最小和完美的哈希表不是那种可以即时组合在一起的东西。
我正在寻找其他工作或工作,所以请联系我,我会尽力而为。目前,我只能说,对经常更改的结构进行大量优化是不现实的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)