Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 为并行插入一组值选择哪个哈希函数?_Parallel Processing_Hashmap - Fatal编程技术网

Parallel processing 为并行插入一组值选择哪个哈希函数?

Parallel processing 为并行插入一组值选择哪个哈希函数?,parallel-processing,hashmap,Parallel Processing,Hashmap,我有一个大小为w*h的哈希表T,每个条目有一个存储桶,用于存储映射到同一哈希的值 现在我想插入一组值G。 G中的每个值都包含一个位置元组(x,y)和一个特定的有效载荷p 哈希函数使用值的位置元组作为参数:H(x,y)。 G本质上是一个网格,每个位置存储一个有效载荷p 为了在不同步的情况下并行地将G中的所有值插入T,H应该保证G中的所有值都有不同的哈希值 G的宽度小于w,高度小于h,因此 H(x,y) = mod y * w + mod x 这样比较合适 然而,这个简单的模散列函数仅适用于 在

我有一个大小为w*h的哈希表T,每个条目有一个存储桶,用于存储映射到同一哈希的值

现在我想插入一组值G。 G中的每个值都包含一个位置元组(x,y)和一个特定的有效载荷p

哈希函数使用值的位置元组作为参数:H(x,y)。 G本质上是一个网格,每个位置存储一个有效载荷p

为了在不同步的情况下并行地将G中的所有值插入T,H应该保证G中的所有值都有不同的哈希值

G的宽度小于w,高度小于h,因此

H(x,y) = mod y * w + mod x 
这样比较合适

然而,这个简单的模散列函数仅适用于

在中,提出了一种更适合(至少对于我的应用程序)的哈希函数:

H(x,y) = (x*p xor y*q) mod(w*h)
其中p和q是大素数。 但是我不确定如何检查网格的所有值是否映射到不同的哈希

是否有人知道如何证明这一点(如果是这样的话)或是否有人知道合适的哈希函数


非常感谢

请注意,您必须将哈希表预分配到最大大小。否则,在一个线程上调整大小而在另一个线程上添加将导致您的悲伤。谢谢您的评论,Jim。我的哈希表是固定大小的。调整大小确实是个问题。处理桶溢出也是一个可以使用其他冲突解决策略解决的问题,这些策略必须按顺序执行。