Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在大型存档中查找部分相似的文件_Algorithm_Comparison_Similarity - Fatal编程技术网

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

Algorithm 在大型存档中查找部分相似的文件,algorithm,comparison,similarity,Algorithm,Comparison,Similarity,我有大约1亿个二进制文件的档案。定期添加新文件。文件大小从大约0.1 MB到大约800 MB不等 通过比较文件的大小,我可以很容易地确定文件是否可能完全相同;通过比较文件的哈希值,可以确定文件大小是否匹配 我想找到部分内容相似的文件。我的意思是,我相信它们有相同的部分,也有不同的部分 找到哪些文件与哪些其他文件相似的最佳方法或任何现实方法是什么?如果可能,还可以测量它们的相似程度 编辑: 这些文件大部分是可执行文件。 如果它们的内容中有10%到100%与另一个文件的内容相同,则它们是相似的。下限

我有大约1亿个二进制文件的档案。定期添加新文件。文件大小从大约0.1 MB到大约800 MB不等

通过比较文件的大小,我可以很容易地确定文件是否可能完全相同;通过比较文件的哈希值,可以确定文件大小是否匹配

我想找到部分内容相似的文件。我的意思是,我相信它们有相同的部分,也有不同的部分

找到哪些文件与哪些其他文件相似的最佳方法或任何现实方法是什么?如果可能,还可以测量它们的相似程度

编辑: 这些文件大部分是可执行文件。 如果它们的内容中有10%到100%与另一个文件的内容相同,则它们是相似的。下限也可以设置为50%。准确的下限并不重要。
我想需要某种形式的散列,才能在这样的档案中进行比较。

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

这不是一个容易的问题。第一步是将每个文件映射到一组散列,即整数。理想情况下,您希望通过计算每个文件中一组子字符串的哈希值来实现这一点,这样子字符串均匀分布在整个文件中,但子字符串出现在不同文件中的可能性很小。例如,如果文件是英文文本,您可以选择将文件拆分为所有最常见英文单词(the、to、be、of和…)的子字符串。对于可执行文件,我首先要计算所有文件中最常见的字节对或三元组是什么,然后选择前N来拆分希望生成“不太长”的子字符串的文件。对于可执行文件,“不太长”是什么,我还不太清楚


一旦你散列了这些子串,你就有了寻找相似集合的问题,这在计算机科学中被称为集合相似性连接问题。有关解决该问题的方法/代码,请参见我的帖子。祝你好运

你有没有看过关于位置敏感散列的内容?特别是MinHash?您能否详细说明文件的内容以及如何确定两个文件是否相似?例如,二进制文件、图像或可执行文件等。。。如果文件中的子字符串至少是最大文件的50%,你会考虑这些文件吗?