文件比较算法

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

处理分两层:


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


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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值