文件比较算法

来源:互联网 发布:java框架设计 编辑:程序博客网 时间:2024/06/06 16:28

晚上有个哥们问有没什么文件比较的算法可以用,大致想了一下,顺便记一记。

处理分两层:


第一层——文本行层,这一层比较单位为行,将每一行看作一个元素,那么两个文件就是两个元素序列,采用LCS算法,算出相同的元素数,相同元素数越多,相似度越大。考虑不同的比较中总文件行数有差异,不能直接用相同元素数这个值作为相似度,应该将两个待比较文件总元素数考虑在内,可以采用 相似度=相同元素数/(文件1元素数+文件2元素数)。


第二层——行内层,上一层中需要用到比较两个文本行是否相同,最简单的做法是两个文本行的字符串完全相同才算作相同。比如,第一个文件中有一行abcde,而第二个文件中有一行abcdef,这也算作不同。如果想要近似相同也算作相同,类似上面的情况也算做相同的话,可以再采用一次LCS算法,这次的两个元素序列中的元素就是字符了,也是可以类似算出一个相似度,只要相似度大于约定值就算两个文本行相同。


复杂度分析:
如果第二层采用简单判断的方式,那么整个算法的时间复杂度是O(n^2 * m),如果第二层采用相似度判断的方式,那么整个算法的复杂度是o(n^2 * m^2),其中n为文件内文本行数,m为行内字符数。