如何构建增量有向非循环词图来存储和搜索字符串?

2024-04-10

我试图以简洁的方式存储大量字符串列表,以便可以非常快速地分析/搜索它们。

有向非循环词图(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(使用前将#替换为@)

如何构建增量有向非循环词图来存储和搜索字符串? 的相关文章

  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • Java中如何对对象数组进行排序?

    我的数组不包含任何字符串 但它包含对象引用 每个对象引用都通过 toString 方法返回名称 id 作者和发布者 public String toString return name n id n author n publisher n
  • 这个看不见的空间是如何创造出来的?

    FileTitle FileTitle false 第一个字符串和最后一个字符串之间有一个空格e and FileTitle length 12 FileTitle length 11 这两个字符之间存在代码为 8203 的 Unicode
  • 将 Python 输入字符串限制为特定字符和长度

    我刚刚开始学习我的第一种真正的编程语言 Python 我想知道如何限制用户输入raw input特定字符和特定长度 例如 如果用户输入包含除字母之外的任何内容的字符串 我想显示一条错误消息a z 我想显示超过 15 个字符的用户输入之一 第
  • 如何从Python列表中的字符串中删除双引号?

    我正在尝试在字典列表中获取一些数据 数据来自 csv 文件 因此都是字符串 文件中的键都有双引号 但由于这些都是字符串 我想删除它们 这样它们在字典中看起来像这样 key value 而不是这个 key value 我尝试简单地使用 str
  • 在 C++ 中查找精确的字符串匹配

    这是我用来检测 txt 文件中一行中的字符串的代码 int main std ifstream file C log txt std string line while file eof while std getline file lin
  • R:如何根据规范更改数据框中的列名称

    我有一个数据框 它的开头如下 SM H1455 SM V1456 SM K1457 SM X1461 SM K1462 ENSG00000000419 8 290 270 314 364 240 ENSG00000000457 8 252
  • Objective-C 使用字符串池吗?

    我知道Java https stackoverflow com questions 3801343 what is string pool in java and C http msdn microsoft com en us librar
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • URL路径相似度/字符串相似度算法

    我的问题是我需要比较 URL 路径并推断它们是否相似 下面我提供了要处理的示例数据 GROUP 1 robots txt GROUP 2 bot html GROUP 3 phpMyAdmin 2 5 6 rc1 scripts setup
  • 对在 C++ 应用程序中作为函数参数传递的文件运行“iconv”命令

    我正在尝试将 Windows 文件 CP1252 格式 转换为 Linux 应用程序的 UTF 8 格式 我想在我的 C 应用程序中运行以下命令 iconv f CP1252 t UTF 8 file ldf dos2unix gt out
  • Erlang:如何将原子转换为字符串?

    我想从原子转换为字符串 Input hello world Output hello world 我该如何实现这一目标 Use atom to list http erlang org doc man erlang html atom to
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • Swift:检查 UISearchBar.text 是否包含 url

    如何检查 UISearchBar text 是否包含 URL 我想做这样的事情 if searchBar text NSTextCheckingType Link 但我收到错误 String is not convertible to NS
  • 如何限制firebase中的字符串长度

    我在 firebase 数据库中工作 我需要限制字符串字段的长度 我怎么做 到该字段的路径是 Col1 doc1 描述 也就是说 从集合 col1 开始 然后进入 doc1 然后对于 doc1 下的所有集合以及该集合下的所有文档 描述字段需
  • 为什么在 C# 中使用 String.Concat()?

    我想知道这个问题有一段时间了 为什么使用String Concat 而不是使用 操作员 我明白了String Format因为它是一个空洞使用 运算符并使您的代码看起来更好 例如 string one bob string two jim
  • toUpperCase() 方法什么时候创建一个新对象?

    public class Child public static void main String args String x new String ABC String y x toUpperCase System out println
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个

随机推荐

  • AngularJS UI-Router 中 ui-sref 和 $state.go 之间的区别

    两者之间有功能上的区别吗ui sref and state go ui sref用于 a a and state go someState 用于控制器中 在 HTML 中 我会使用 a Link a 而在函数中我会使用类似的东西 if so
  • Windows Forms应用程序中收银程序的问题

    我正在创建一个收银机程序 这是一个简单的数学 其中结果 gt 支付的钱 价格 我想要文本框打印出您拿回的金额以及面额 例如 您输入价格 500 和成本 650 gt 文本应显示 退款 150 100 美元 50 美元钞票 这是我第一次在 W
  • Ruby,“不兼容的字符编码:UTF-8 和 CP852 (Encoding::CompatibilityError)”

    Why encoding utf 8 out File open z test txt a out puts out close out File open z test txt r puts out read 导致 不兼容的字符编码 UT
  • 使用 PostgreSQL 和 JSONB 选择“WHERE IN”

    给定 table a 像这样 id name 1 aaaa 2 bbbb 3 cccc 我显然可以发出以下查询 SELECT FROM table a WHERE name IN aaaa bbb 但给定 table b 像这样 id da
  • 如何.release()由RingtoneManager实例化的MediaPlayer?

    我在我的活动中收到默认铃声 remindRingtoneView TextView findViewById R id remind ringtone remindRingtoneView setText RingtoneManager g
  • sas7bdat 变量名称中带有空格

    我收到了几个扩展名为 sas7bdat 的 SAS 数据集文件 我在 Windows 上使用 SAS 9 3 这些文件的创建者显然使用了不同的环境和 或软件 许多文件的 var 名称包含空格和其他无效字符 甚至运行一个proc conten
  • 从 WPF 中的代码设置验证错误模板

    我的 WPF 应用程序中有一个文本框 我定义了一个用于验证错误的 ControlTemplate 如下所示
  • 忽略或解决机器人框架中测试自动化的证书警告

    使用机器人自动化框架浏览 URL 时 我总是收到一条消息 您的连接不是私有的 然后我们需要单击 高级 并继续访问 URL 无法手动继续访问 URL 那么有没有解决方案可以跳过机器人框架中测试自动化的此类证书检查 我读过这个问题的答案 如何解
  • java中正则表达式执行太慢[重复]

    这个问题在这里已经有答案了 我的目的是匹配这种不同的网址 网址 commy url commy extend url coma super extended url com等等 因此 我决定构建正则表达式 在 url 的开头和结尾处包含一个
  • Angular - 如何使用延迟加载模块激活 AUX 路由?

    我有一个有角度的应用程序正在延迟加载模块 首先 应用程序导航到home它加载模块 名为module1 主要路由 const routes Routes path redirectTo home pathMatch full path hom
  • 编写自定义属性检查器 - 验证值时如何处理就地编辑器焦点?

    Overview 我正在尝试编写自己的简单属性检查器 但我面临着一个困难且相当令人困惑的问题 首先 我要说的是 我的组件并不是要使用或处理组件属性 而是允许向其添加自定义值 我的组件的完整源代码位于问题的更下方 一旦将其安装在包中并从新的空
  • C# 和 Java 中的垃圾收集之间的根本区别是什么?

    最近 我从一位 高级 开发人员 同事那里得到了一些关于 C 垃圾收集器的听起来非常错误的建议 例如 你需要使用析构函数 C 中随处可见 因为垃圾 收藏家不能信赖 C 垃圾收集器不能 就像 Java 垃圾一样 集电极 这对我来说听起来非常可疑
  • 推送通知徽章未到来

    我正在使用此编码进行苹果推送通知 推送通知即将到来 但它们没有任何徽章 任何建议此代码有什么问题 我没有收到徽章 我已经检查了设置选项卡 徽章就在那里 BOOL application UIApplication application d
  • CircleCI Android ConstraintLayout 不起作用

    我现在正在使用CircleCI对于我的项目 我也在实施新的约束布局在我的项目中 现在我被 CircleCI 大楼困住了 它向我展示了这个gradle 依赖项 run File home ubuntu android repositories
  • X 轴垂直线 iOS 图表

    也许这是一个简单的问题 但我想知道如何在 iOS 图表中的 X 轴下绘制垂直线和 X 轴上的标签 见图 如红线所示 更新 我正在使用的库是这个https github com danielgindi ios charts https git
  • 显示 JPanel 调整了另一个 JPanel 的大小

    我有一个关于嵌套 BoxLayout 的问题 我想构建一个由 2 个子面板组成的 DropDownPanel 顶部的标题和底部的正文 身体最初是隐藏的 通过单击标题 您可以切换正文的可见性并显示其内容 例如展开 折叠 一般来说 这工作得很好
  • “cabal install cabal-install”不会更新 OSX 中的 cabal 版本

    我是 haskell 和 cabal 的新手 所以我可能错过了一些简单的东西 我更新了 cabal install sudo cabal install cabal install Password Resolving dependenci
  • 如何使用 Git API 获取 GitHub 存储库的社交预览图像链接?

    我拥有许多 GitHub 存储库 通常每周添加项目 我正在使用 GitHub 页面制作自己的网站 因为我只能在 GitHub 页面上托管静态网站 因此我将使用 GitHub API 来自动更新网站上的新项目 但我还想向其中添加预览 示例图像
  • 无法切换到打瞌睡模式

    我正在遵循这方面的说明安卓页面 http developer android com training monitoring device state doze standby html为了将 android 切换到 doz 模式来测试我的
  • 如何构建增量有向非循环词图来存储和搜索字符串?

    我试图以简洁的方式存储大量字符串列表 以便可以非常快速地分析 搜索它们 有向非循环词图 DAWG 非常适合这个目的 但是 我首先没有要包含的字符串列表 因此它必须是可增量构建的 此外 当我在其中搜索字符串时 我需要带回与结果相关的数据 而不