1
4
像大多数面试问题一样,这更像是激发谈话,而不是只有一个答案。 如果文件非常少,那么在达到不匹配的字节之前(假设是这样),简单地逐字节比较可能会更快。如果有许多文件,计算散列可能会更快,因为您不必从多个文件中以块形式移动磁盘读取。这个过程可能是通过抓取每个文件越来越大的块来加快的,因为您通过文件来消除潜在的可能性。如果多个服务器的文件足够多,那么也可能需要hit来将问题分发给多个服务器。 我将从一个比sha-1更快更简单的哈希函数开始。sha-1是加密安全的,在这种情况下不一定需要。例如,在我的非正式测试中,Adler 32的速度是2-3倍。您还可以使用比重新测试任何匹配的文件更弱的假设测试。这个决定还取决于IO带宽和CPU功率之间的关系,如果您有一个更强大的CPU,使用一个更具体的哈希来节省在后续测试中重读文件的开销,如果您有更快的IO,重读可能比不必要地做昂贵的哈希要便宜。 另一个有趣的想法是在处理文件时使用启发式方法,根据文件大小、计算机速度和文件的熵来确定最佳方法。 |
2
6
我宁愿用哈希作为第二步。首先按文件大小对dir进行排序,然后仅在存在重复大小的情况下进行哈希和比较,在一般情况下可能会大大改善搜索范围。 |
3
2
是的,建议的方法是合理的,并且SHA-1或MD5将足以完成该任务。这里是 a detailed analysis for the very same scenario 这是 a question specifically on using MD5 . 别忘了你需要一个尽可能快的散列函数。 |
4
1
是的,首先想到的是散列。对于您的特定任务,您需要使用最快的哈希函数。阿德勒32就行了。在您的例子中,碰撞不是一个问题,所以您不需要密码强函数。 |
Malay Joshi · C++如何创建文件夹 2 年前 |
tashanzhishi061 · NFS装载显示有时会混淆 2 年前 |
cryogene · mknod的可移植性[重复] 2 年前 |
surajsbsm · 创建文件oustside默认目录php 6 年前 |
Bob Kimani · 将存储库文件夹链接到另一个非repo文件夹 6 年前 |
user3732361 · 读取大文件时如何选择块大小? 6 年前 |
YO LO · 在iPad上保存文本文件的位置 6 年前 |
hhwwww · 无法在mac上显示扩展文件属性 6 年前 |