- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在研究比较大的二进制文件。我已经实现了著名的 Myers Diff 算法,它产生了最小的差异。但是,它是 O(ND),因此要区分两个截然不同的 1 MB 文件,我预计需要 100 万平方 = 1 万亿的时间。那可不好!
我想要的是一种算法,它可以产生潜在的非最小差异,但速度要快得多。我知道必须存在一个,因为 Beyond Compare 做到了。但是我不知道怎么办!
可以肯定的是:有 xdelta 或 bdiff 之类的工具,但它们会生成供计算机使用的补丁,这与人类可使用的差异不同。补丁涉及将一个文件转换为另一个文件,因此它可以执行诸如从文件的先前部分复制之类的操作。那里有一个人类可消费的差异,可以直观地显示差异,并且只能插入和删除。例如,这个转换:
"puddi"-> "puddipuddipuddi"
会产生“将 [0,4] 复制到 [5,9] 和 [10, 14]”的小补丁,但会产生“附加‘puddipuddi’”的较大差异。我对产生更大差异的算法很感兴趣。
谢谢!
最佳答案
差异基本上与生物信息学中用于比对 DNA 序列的算法相同。这些序列通常很大(数百万或数十亿个核苷酸长),程序使用了一种在较长基因组上运行良好的策略 MUMmer :
只要没有太多差异,这往往会给出一组非常好的(尽管不能保证最佳)对齐区域(或等效地,一组非常小的差异)。我不确定每个步骤的确切时间范围,但我知道没有 n^2
或更高的项。
我相信 MUMmer 程序需要 DNA 或蛋白质序列,因此它可能无法为您开箱即用,但这些概念肯定适用于一般字符串(例如文件),因此如果您准备自己重新实现它,我会推荐这种方法。
关于algorithm - 差异化更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611143/
我创建了一个导航栏,效果很好。唯一的问题是,我创建了一个链接,但看不到链接的一半。 谁能帮帮我??? HTML:
我有一个 Device 对象数组,它是使用 $resource 从 REST 服务器定期获取的。每当发生这种情况时,UI 就会“重新加载”,这意味着该设备数组的 ng-repeat 会再次执行。 DO
我是一名优秀的程序员,十分优秀!