在大型存档中查找部分类似的文件

时间:2015-11-16 23:16:26

标签: algorithm comparison similarity

我有大约1亿个二进制文件的存档。新文件会定期添加。文件大小范围从大约0.1 MB到大约800 MB。

通过比较文件的哈希值,我可以通过比较文件大小和大小匹配来轻松确定文件是否完全相同。

我想查找内容部分相似的文件。我的意思是,我认为他们有一些相同的部分和一些可能不同的部分。

找到哪些文件与其他文件类似的最佳或最实际的方法是什么?如果可能的话,可以衡量它们的相似程度?

修改 这些文件主要是可执行文件。 如果,例如,其内容的10%到100%与另一个文件的内容相同,则它们是相似的。下限也可以设置为50%。确切的下限并不重要。 我想这种比较需要某种形式的哈希才能在这样的档案中实现。

2 个答案:

答案 0 :(得分:1)

这取决于你将如何确定相似性,例如,如果你可以通过比较每个文件的前100个字节来确定相似性,那么我想这是可以实现的但是要在1亿个文件中找到特定的字符串比较800MB大是不可行的。

答案 1 :(得分:1)

不是一个简单的问题。第一步是将每个文件映射到一组散列,即整数。理想情况下,您希望通过计算每个文件中一组子字符串的哈希值来实现这一点,以便子字符串在整个文件中均匀分布,但很少有子字符串出现在不同文件中的可能性。例如,如果文件是英文文本,您可以选择将文件拆分为所有最常用的英语单词(to,to,of,和...)的子字符串。为了对可执行文件执行此操作,我将首先计算所有文件中最常见的字节对或三元组的内容,然后选择前N来分割文件,这些文件有望生成不太长的子字符串。"什么"不要长"与可执行文件是不是很好的想法。

一旦你对这些子串进行散列,你就会遇到寻找类似集合的问题,这在计算机科学中被称为集相似性加入问题。有关解决该问题的方法/代码,请参阅我的帖子here。祝你好运!