【发布时间】:2010-10-21 18:51:29
【问题描述】:
进一步回答这个问题:Algorithm for determining a file’s identity
回顾:我正在寻找一种廉价的算法来确定文件身份,这种算法在绝大多数情况下都有效。
我继续实施了一种算法,该算法为每个文件提供了一个“非常独特”的哈希值。
我的算法的工作方式是:
对于小于某个阈值的文件,我使用完整文件内容作为身份哈希。
对于大于阈值的文件,我会随机抽取 N 个 X 大小的样本。
我在散列数据中包含文件大小。 (意味着所有不同大小的文件都会产生不同的哈希值)
问题:
我应该为 N 和 X 选择什么值(我应该取多少个随机样本,每个样本大小是多少?)我选择了 4 个 8K 的样本,但无法难倒算法。我发现快速增加样本量会降低算法的速度(因为搜索非常昂贵)
数学一:我的文件需要有多大的不同才能让这个算法崩溃。 (2 个相同长度的不同文件最终具有相同的哈希值)
优化一:有什么方法可以优化我的具体实现以提高吞吐量(我的系统似乎每秒可以处理大约 100 个文件)。
这个实现看起来合理吗?你能想到任何现实世界的例子,这会失败吗? (我的重点是媒体文件)
相关信息:
感谢您的帮助!
【问题讨论】:
-
吹毛求疵:签名!?你的意思是签名?
标签: c# optimization identity