设散列表地址空间为0到10,散列表函数为h(k)=k mod 11,用线性探查法解决碰撞.现从空的散列表开始,依次插
问题描述:
设散列表地址空间为0到10,散列表函数为h(k)=k mod 11,用线性探查法解决碰撞.现从空的散列表开始,依次插
按键码值95,14,27,68,82,则最后一个关键码82的地址是多少?
求详细解题过程及原理,要详细呀!
答
哈希存储的基本原理是将元素的值(如95、14等)进行哈希计算得到哈希地址,再将其存储到指定地址.如果该地址已有元素,称之为存在“冲突”,再采用冲突检测法处理冲突,如线性探测再散列法.
如元素的值为95时,采用哈希函数h(k)=k mod 11时,得到的哈希地址为7,即h(95) = 95 % 11 = 7.
针对本题:
(1)构造哈希表,有11个地址空间(0~10);
(2)计算各个元素的哈希地址,若没有冲突,则直接存储到相应地址的哈希表中:
h(95) = 95 % 11 = 7 没有冲突
h(14) = 14 % 11 = 3 没有冲突
h(27) = 27 % 11 = 5 没有冲突
h(68) = 68 % 11 = 2 没有冲突
h(82) = 82 % 11 = 5 有冲突(因为地址5已经被值为27的元素占用了)
(3)对于有冲突的元素,发生冲突后必须马上处理(采用线性探查法),不能到最后一起处理:
h(82) = (5 + 1) % 11 = 6 没有冲突
(4)最后哈希表0~10的11个地址空间依次存储的元素为:
0 1 2 3 4 5 6 7 8 9 10
N N 68 14 N 27 82 95 N N N
其中N表示此处为空.