【发布时间】:2012-02-24 15:29:38
【问题描述】:
我觉得我想多了这个问题,但无论如何……
我有一个哈希表,其内部数组中有 M 个插槽。我需要在哈希表中插入 N 个元素。假设我有一个哈希函数,它随机将一个元素插入到一个槽中,每个槽的概率相等,那么哈希冲突总数的期望值是多少?
(抱歉,这更像是一道数学题,而不是编程题)。
编辑: 这是我必须使用 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
【问题讨论】:
-
您希望如何测量“三重”碰撞?
-
我猜最有意义的。所以我会把它算作两次碰撞(在第一次之后添加的每个新元素一个)
-
最好的衡量标准似乎是检索所有项目的工作量,即
SUM(x * (x+1) /2),其中 X 是存储桶中项目的数量,总和是所有存储桶的总和。