编辑距离的最简单和最有效的现代替代方法之一称为归一化压缩距离或 NCD。基本思想很容易解释。选择用您的语言实现的流行压缩器,例如zlib。然后,给定字符串A和字符串B,让C(A)是 A 的压缩大小,C ( B)是 B 的压缩大小。令AB表示“ A与B连接”,因此C(AB)表示“ A与B连接”的压缩大小。接下来,计算分数
( C(AB) - 最小值( C(A) , C(B) )) / 最大值( C(A) , C(B) )
该值称为 NCD( A , B) 并测量类似于编辑距离的相似性,但支持更多形式的相似性,具体取决于您选择的数据压缩器。当然,zlib 支持您所描述的“块”样式相似性。如果两个字符串相似,则连接的压缩大小将接近每个单独的大小,因此分子将接近 0,结果将接近 0。如果两个字符串非常不同,则压缩后的大小将大致为添加的压缩大小,因此结果将接近 1。如果您已经可以访问 zlib 之类的数据压缩程序,则此公式比编辑距离或几乎任何其他显式字符串相似性度量更容易实现。这是因为大多数“硬” 启发式和优化等工作已经在数据压缩部分完成,这个公式简单地提取了它使用与语言无关的通用信息理论发现的相似模式的数量。此外,对于您描述的几百字节大小范围,此技术将比大多数显式相似性度量(例如编辑距离)快得多。有关此内容和示例实现的更多信息,只需搜索归一化压缩距离 (NCD) 或查看以下论文和 github 项目:
http://arxiv.org/abs/cs/0312044 "Clustering by Compression"
https://github.com/rudi-cilibrasi/libcomplearn C language implementation
There are many other implementations and papers on this subject in the last decade that you may use as well in other languages and with modifications.