什么是没有碰撞的最短的人类可读哈希?

问题描述 投票:0回答:1

我有长期工人Ws的ID工人总数。他们分组工作,每组最多有M成员。

要为每个工作组合生成唯一的组名,请对ID进行汇总是不可行的。我想在flattened排序的worker id列表上做一个MD5()。我不确定我应该保留多少位数,以便在不碰撞的情况下让人难忘。

log((26 + 10),W ^ M)是否足够?我应该保留多少个冗余的字符?我还有其他专门的哈希函数,可以更好地适应这种情况吗?

postgresql hash probability python-3.6
1个回答
0
投票

最多10个采集的500个对象的组合总数约为2.5091E + 20,这将适合68位(base36中约13个字符),但我没有看到一个简单的算法来为每个组合分配一个数字。一个更简单的算法是这样的:如果你为每个人分配一个9位数字(0到511)并连接多达10个数字,你将得到90位。要对base36中的那些进行编码,您需要18个字符。

如果要使用base36中仅包含6个字符的哈希值(大约31位),则冲突的概率取决于应用程序生命周期中使用的组的总数。如果我们假设每天有10个新组(以前没有遇到过)并且应用程序将使用10年,我们将获得36500组。使用Nick Barnes提供的计算器表明,在这种情况下,有27%的机会发生碰撞。您可以根据您的特定情况调整假设,然后更改散列长度以适合您想要的最大碰撞几率。

© www.soinside.com 2019 - 2024. All rights reserved.