可更新的DAWG库或来自未排序数据的DAWG构造

Updateable DAWG library or DAWG construction from non-sorted data

本文关键字:DAWG 排序 数据 构造 可更新      更新时间:2023-10-16

dawgdic是一个很棒的DAWG库,但它有一个显著的缺点,因为它是静态的(不可更新),必须以按字母顺序排序的字符串形式构建。如果构建DAWG的原始数据很大(几GB),则涉及对大量字符串进行排序的DAWG的初始构建可能需要太多资源。

有没有一个库可以提供dawgdic这样的高效内存结构,允许从非排序字典中构建?

目前,我不认为有任何库允许从非排序字典构建DAWG。

但是,经过大量的搜索,我找到了这篇论文,"最小非循环有限状态自动机的增量构造",我认为这正是你想要的。也许你可以在看完这篇文章后制作自己的图书馆,并与大家分享!

编辑:你看过这个问题吗?

我发现了一些很棒的库,它们允许从未排序的数据中在线构建,尽管它们不是基于DAWG:

  1. 雪松&一种非常快速的双阵列trie
  2. marisa-trie-а一个非常节省空间的字符串匹配库

我目前还不知道DAWG的C++实现支持从非排序数据构建,但如果你愿意创建自己的具有这种功能的解决方案,那么《最小非循环有限状态自动机的增量构建》(2000)是一篇基本上阐述其背后算法的论文。

或者,如果您对从其他语言移植解决方案持开放态度,那么不妨看看数据结构的Java实现MDAG。它同时支持动态添加字符串和删除字符串,这正是您想要的。代码也很容易理解,并得到了广泛的注释,因此移植它应该是一项相当简单的任务。

免责声明:我是MDAG的作者:)。