迈尔斯·迪夫

[bsd3型,图书馆,未分类的][建议标签]

模块

[索引] [快速跳跃]

旗帜

手动标记

姓名描述违约
差异

包含来自差异包裹

残疾人
单层(_M)

使用“uni-util”包中的diff实现(错误)。这导致包含LGPL代码。

残疾人

使用-f<标志>启用标志,或-f-<flag>禁用该标志。更多信息

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 0.1.0.0,0.2.0.0,0.3.0.0
更改日志 CHANGELOG.md公司
依赖关系 基础(>=4.7 && <5),容器,例外,原始的,文本,矢量[详细信息]
许可证 BSD-3条款
版权 2023年汤姆·麦克劳林
作者 汤姆·麦克劳林
维护人员 tom@codedown.io
主页 https://github.com/codedownio/myers-diff#自述文件
Bug跟踪器 https://github.com/codedownio/myers-diff/issues
源回购 头部:git克隆https://github.com/codedownio/myers-diff
已上传 通过托马斯姆2023-11-12T02:38:32Z
分配 LTSHaskell公司:0.3.0.0,NixOS:0.3.0.0,堆叠:0.3.0.0
下载 总共181个(过去30天内18个)
评级 (尚未投票)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间为2023-11-12年[所有1个报告]

myers-diff-0.3.0.0自述文件

[返回包描述]

欢迎使用迈尔斯·迪夫 黑客攻击 迈尔斯·迪夫

这是Myers文本diff算法的快速Haskell实现1它的灵感来源于这个帖子和应该具有相同的\(O(\分钟(长度(a),长度(b))\)空间复杂性。该实现使用未装箱的可变向量来提高性能。

这个回购还可以构建其他几个版本用于基准测试比较,在标志后面进行门控。

与其他库的比较

这个差异该包还实现了Myers算法,但空间效率较低。那个包裹做广告\(O(D^2)\)空间复杂性,其中\(D\)是两个输入之间的差异数。在最坏的情况下,\(D=最大值(长度(a),长度(b)),因此空间使用可以是输入长度的二次方。

基准

您可以通过运行./run_all_benchmarks.sh。可以在中找到完整的结果./基准_结果。所有基准测试都在Intel i9-13900K上运行。

TL;博士:

  • 这些基准测试侧重于不同大小的输入,其中插入或删除一个约30个字符的区域。
  • 迈尔斯·迪夫速度约为2.5倍,并且随着输入量的增加(大约100k个字符),优势也会增加。
  • 迈尔斯·迪夫小输入的空间效率提高了5倍,10k字符输入缩小到1.5倍,100k字符输入减少到1.3倍。

当然,还可以运行其他基准测试。未来的工作可能涉及使用多个单独编辑和/或不同大小的编辑测试输入。如果您想讨论特定的工作量,请提交一个问题。

时间:小插入

测试场景:生成随机输入\(否)字符,然后插入随机字符串\(\leq 30\)字符以生成修改后的输入。生成100个这样的对并比较迈尔斯·迪夫具有差异使用标准.

small_插入.png

输入大小(字符) 迈尔斯·迪夫 差异 加速
10 408辆 1.07毫秒 2.6倍
100 587美元 1.53毫秒 2.6倍
1000 1.81毫秒 3.46毫秒 1.9倍
10000 16.6毫秒 40.8毫秒 2.5倍
100000 188毫秒 823毫秒 4.4倍

时间:小删除

测试场景:与小插入相同,但这次删除\(\leq 30\)第二个输入中的字符。

小删除.png

这些结果与小插件的结果非常相似。

空间:小插入

测试场景:与小插入时间测试相同。在这个测试中,我们使用权衡.

输入大小(字符) myers-diff(字节) 差异(字节) 差异/myers-Diff
10 1,681,120 8,904,176 5.3倍
100 3,619,928 13833520个 3.8倍
1000 20,044,048 31,669,480 1.6倍
10000 171,103,240 250,594,080 1.5倍
100000 1,666,421,824 2,172,753,512 1.3倍
1

E.Myers(1986)。“O(ND)差分算法及其变体”。算法。1 (2): 251–266. CiteSeerX公司10.1.1.4.6927.doi:2007年10月10日/BF01840446.S2CID公司6996809.