我们如何才能找到最有效的哈希函数(碰撞的可能性最小)。
假设给出了一些字符串..并且字符串的长度也没有定义。 阿贾伊 维杰 拉祈彩 ....
我们知道没有的数量。可用的字符串,所以我们可以设计一个大小的哈希表(可用的数量)。什么可以是我们可以为这样的问题设计的完美哈希函数?
以递增方式将每个字符ascii值乘以31(素数)导致哈希值大于MAX_INT的值,然后模数将无法正常工作...所以请给出一些有效的哈希函数构建溶液....
我有很少的字符串,让我们说count = 10 ....我需要实现一个哈希函数,这样所有这10个字符串在哈希表中唯一适合....任何完美的哈希函数O( 1)可用,对于这种问题??哈希表大小将为10,对于这种情况......
只有C编程......
请解释网站上的逻辑...... http://burtleburtle.net/bob/c/perfect.c 这看起来非常复杂但对我来说很完美.. !!这里使用的算法是什么......直接读取代码非常困难!!
...谢谢
答案 0 :(得分:15)
检查其中的一些,它们显然具有良好的分布
http://www.partow.net/programming/hashfunctions/#HashingMethodologies
答案 1 :(得分:3)
您可能需要查看perfect hashing.
答案 2 :(得分:2)
你可能想看一下gperf,如果你不经常这样做而你的数据设置很小,你可以在飞行中做到这一点。如果提前知道字符串,则这是 方法
答案 3 :(得分:0)
哈希表意味着能够处理动态输入。如果你只能保证一组特定的输入,并且你想保证每个输入的特定插槽,那么为什么要使用散列呢?
只需为每个已知可用输入建立一个索引数组。