预期的哈希冲突数

时间:2012-02-01 22:44:30

标签: python hash collision

我觉得我已经过度思考这个问题,但无论如何都要去......

我的哈希表在其内部数组中有M个插槽。我需要在哈希表中插入N个元素。假设我有一个哈希函数,它将am元素随机插入到每个槽的概率相等的槽中,那么哈希冲突总数的预期值是多少?

(很抱歉,这不仅仅是一个数学问题,而是一个编程问题)。

编辑: 这是我用Python模拟它的一些代码。我正在得到数字答案,但在将其推广到公式并解释它时遇到了麻烦。

import random
import pdb

N = 5
M = 8

NUM_ITER = 100000

def get_collisions(table):
    col = 0
    for item in table:
        if item > 1:
            col += (item-1)
    return col

def run():
    table = [0 for x in range(M)]

    for i in range(N):
        table[int(random.random() * M)] += 1

    #print table
    return get_collisions(table)

# Main

total = 0
for i in range(NUM_ITER):
    total += run()

print float(total)/NUM_ITER

2 个答案:

答案 0 :(得分:19)

你会在这里找到答案:Quora.com m 存储桶和 n 插入的预期碰撞次数为

n - m * (1 - ((m-1)/m)^n)

答案 1 :(得分:0)

可以找到SUM(x*(x+1)/2)指标的公式here期望值似乎是(n/2m)* (n+2m -1)

不知道方差,IANAM。