【发布时间】:2013-08-30 11:30:49
【问题描述】:
dawgdic 是一个很棒的 DAWG 库,但它有一个明显的缺点,因为它是静态的(不可更新)并且必须以按字母顺序排序的字符串构造。如果构建 DAWG 的原始数据很大(数 GB),那么涉及对大量字符串进行排序的 DAWG 初始构建可能需要太多资源。
是否有一个库提供像dawgdic 这样的内存高效结构,它允许从非排序字典进行构造?
【问题讨论】:
dawgdic 是一个很棒的 DAWG 库,但它有一个明显的缺点,因为它是静态的(不可更新)并且必须以按字母顺序排序的字符串构造。如果构建 DAWG 的原始数据很大(数 GB),那么涉及对大量字符串进行排序的 DAWG 初始构建可能需要太多资源。
是否有一个库提供像dawgdic 这样的内存高效结构,它允许从非排序字典进行构造?
【问题讨论】:
目前,我认为没有任何库允许从未排序的字典构建 DAWG。
但是,经过大量搜索,我找到了这篇论文,"Incremental Construction of Minimal Acyclic Finite-State Automata" ,我认为它正是你想要的。或许你可以在读完这篇文章后自己制作一个库,分享给大家!
编辑:你看过this question吗?
【讨论】:
我发现了一些很棒的库,它们允许从未排序的数据进行在线构建,尽管它们不是基于 DAWG:
【讨论】:
我目前知道没有支持从非排序数据构建的 DAWG 的 C++ 实现,但是如果您愿意创建自己的具有此类功能的解决方案,Incremental Construction of Minimal Acyclic Finite-State Automata (2000) 是一篇基本上列出的论文它背后的算法。
或者,如果您愿意从其他语言移植解决方案,那么不妨看看 MDAG,这是一种数据结构的 Java 实现。它支持即时字符串添加和字符串删除,这正是您正在寻找的。代码也很容易理解,并且有大量注释,因此移植它应该是一项相当简单的任务。
免责声明:我是 MDAG 的作者 :)。
【讨论】: