问答题
假定把关键字key散列到有n个表项(从0到n-1编址)的散列表中。对于下面的每一个函数H(key)(keyr为整数),这些函数能够当作散列函数吗?(即对于插入和查找,散列程序能正常工作吗?)如果能够,它是一个好的散列函数吗?请说明理由。设函数random(n)返回一个0到n-1之间的随机整数(包括0与n-1在内)。
问答题
H(key)=key/n
【正确答案】
【答案解析】不能当作散列函数,因为key/n可能大于n,这样就找不到适合的位置。
问答题
H(key)=1
【正确答案】
【答案解析】能够作为散列函数,但不是一个好的散列函数,因为所有关键字都映射到同一位置,造成大量的冲突机会。
问答题
H(key)=(Key+random(n))%n
【正确答案】
【答案解析】不能当作散列函数,因为该函数的返回值不确定,这样无法进行正常的查找。
问答题
H(key)=key%p(n);其中p(n)是不大于n的最大素数
【正确答案】
【答案解析】能够作为散列函数,是一个好的散列函数。