西西河

主题:如何分摊秘密(一)——从《鹿鼎记》中的四十二章经说起 -- 明日枯荷包

共:💬63 🌺987 新:
全看分页树展 · 主题 跟帖
家园 这个要看你的需求了

如果只有10万种商品,但是希望尽量减少编码的字节,那么应该把这种商品编码转换成内部编码,从0到999999编号。如果不愿意做这个转换,那么下面的100000都要换成1000000000。

如果说允许撞码,只是希望撞码可能性小一点,那么这就是希望找一个好的哈希函数(也叫杂凑函数)。象你这样取平均值也是一种哈希函数,但是效果显然不好,因为那些比较大和比较小的编码没有比较中间那些编码容易被取到。我觉得取加起来再除以100000的余数来做编码(再拿抽取的数目拼接也可以),要比平均值好,因为它的“撞码率”均匀。而且这个方法也容易扩张,如果你还想缩短字节数,可以除以10000,如果觉得字节数长一些也没关系,那么就除以更大的数。

如果说不允许撞码,那么代码长度不可能小于log(100000^30/30!),也就是差不多150-log(30!),大约是117字节左右。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河