标签: universal-hashing

散列一系列价值观

我知道我可以将奇异值作为键中的哈希值dict.例如,我可以将哈希5作为其中一个键dict.

我目前面临一个问题,需要我散列一系列值.

基本上,我需要一种更快的方法来做到这一点:

if 0 <= x <= 0.1:
    # f(A)
elif 0.1 <= x <= 0.2:
    # f(B)
elif 0.2 <= x <= 0.3:
    # f(C)
elif 0.3 <= x <= 0.4:
    # f(D)
elif 0.4 <= x <= 0.5:
    # f(E)
elif 0.5 <= x <= 0.6:
    # f(F)
Run Code Online (Sandbox Code Playgroud)

其中x是一些float任意精度的参数.

我能想到的最快的方法是散列,但问题在于:我可以(0.1, 0.2)用作键,但这仍然会花费我O(n)运行时间,并且最终并不比elifs的更好(我必须迭代键并检查是否key[0] <= x <= key[1]).

有没有办法散列一系列值,以便我可以检查哈希表0.15,仍然得到#execute B? …

python hash universal-hashing

10
推荐指数
1
解决办法
2456
查看次数

如何生成64位随机数?

我正在实现通用散列并使用以下通用散列函数:

h(k)=((A*k)mod 2 ^ 64)rsh 64-r

其中A是一个随机数

2 ^ 61和2 ^ 62.

C++中rand()函数有返回类型整数,它不能生成那么大的数字.那么如何在这个范围内生成随机数?(数字应该是非常随机的,即每个数字应该具有相同的概率被选中)

注意:

long long int random=rand();
Run Code Online (Sandbox Code Playgroud)

不起作用返回的数字randint.

c++ random universal-hashing

10
推荐指数
2
解决办法
1万
查看次数

Hashtable- Rehashing

有人告诉我,Hashtable.NET使用中重复以减少/避免碰撞.

IE浏览器."Rehasing的工作原理如下:假设我们有一组散列不同的函数,H1 ... Hn,并且当从散列表中插入或检索项目时,最初使用H1散列函数.如果这导致碰撞,则尝试使用H2,然后再尝试Hn,以避免在Hashtable中发生碰撞."

假设:我们有一个哈希表,其中n(其中n <Infinity)元素的渐近时间复杂度为o(1); 我们(CLR)在应用一些散列函数(Hn-1散列函数,其中n> 1)时实现了这一点.

问题:当我们寻找(检索)任何元素时(如果使用了不同的散列函数),有人可以解释一下CLR map如何键入哈希码?CLR如何跟踪(如果是)任何活动对象(哈希表)的哈希函数?

提前致谢

c# hashtable universal-hashing

8
推荐指数
1
解决办法
1970
查看次数

使用动态完美哈希在 64 位整数值的小型容器中进行超快速查找

我有可以便宜地转换为 a 的输入键uint64_t(即输入包含小于或等于 64 位)。

每个唯一的键(尚未在映射中)将被分配一些数据(指向对象的指针)。很像std::map<uint64_t, Object*>这样。

插入新密钥对时间并不重要,因为总共只有少量密钥,并且永远不会再次删除它们。其中小是指小于 100。

典型的实现将使用 a std::vector(因为元素数量较少)并且仅扫描所有元素,或使用二分搜索(即boost::flat_map);但这对我来说还不够理想。一旦插入所有元素,映射就是静态的,并且应该可以在短短几个时钟周期内找到属于给定键的指针。

我想到的是每次插入新键时确定一个完美的哈希,然后使用这个哈希(函数)来找回指针。

这需要两件事:

  1. 一种寻找廉价哈希函数的算法,该函数将给定 64 位值的小列表转换为 8、9、10(或需要多少)位且不会发生冲突(又名完美哈希函数),以便后者可以直接在查找表中使用(即大小为 256、512、1024...)。

  2. 动态创建此类哈希函数的方法;我不得不承认我不愿意运行外部编译器并动态加载新的哈希函数;-)。

c++ algorithm lookup perfect-hash universal-hashing

5
推荐指数
1
解决办法
1217
查看次数

Universal Hashing的基础知识,如何确保可访问性

我目前的理解Universal Hashing是一种在运行时随机选择散列函数的方法,以保证任何类型输入的合理性能.

我知道我们可能会这样做是为了防止有人故意选择恶意输入的操纵(知道确定性散列函数的可能性).

我的问题如下:是不是真的,我们仍需要保证每次哈希时都将一个密钥映射到同一个地址?例如,如果我们想要检索信息,但随机选择哈希函数,我们如何保证我们可以回到我们的数据?

theory hash data-structures universal-hashing

4
推荐指数
1
解决办法
789
查看次数