C语言假定一个线性表为32752963489425461870哈希表长为 13若采用除留余数法 Hkey=key Mod 13 求哈希地址 用线性探测再散列法处理冲突给出最终散列地址画出最后得到的散列表并求 平均查找长度。
首先,对于线性探测再散列法,当发生冲突时,我们需要依次向后探测,直到找到一个空位置为止。具体实现时,我们可以在哈希表中使用一个数组来存储元素,当发生冲突时,将元素存储在下一个空位置上。
按照除留余数法,可以得到每个元素的哈希地址:
H(32) = 6 H(75) = 11 H(29) = 3 H(63) = 4 H(48) = 9 H(94) = 7 H(25) = 12 H(46) = 7 (发生冲突) H(18) = 5 H(70) = 4 (发生冲突)
接下来,我们使用线性探测再散列法处理冲突。对于发生冲突的元素,我们依次向后探测,直到找到一个空位置为止。因此,46被放在了哈希表的下一个位置,即H(46) = 8。70被放在了再下一个位置,即H(70) = 9。最终得到的哈希地址如下:
H(32) = 6 H(75) = 11 H(29) = 3 H(63) = 4 H(48) = 9 H(94) = 7 H(25) = 12 H(46) = 8 H(18) = 5 H(70) = 9
根据哈希地址,我们可以画出最终得到的散列表:
0 1 2 3 4 5 6 7 8 9 10 11 12
32 29 63 94 25 46 18 70
48
75
最后,我们需要计算平均查找长度。平均查找长度指的是查找所有元素时所需的比较次数的平均值。假设表中元素的个数为n,查找成功的平均查找长度为ASL,查找不成功的平均查找长度为ASL',则平均查找长度为:
ASL = (ASL + ASL') / n
对于本题,所有元素都存在于表中,因此ASL' = 0。我们需要依次计算每个元素的查找次数,然后求和并除以n即可。具体计算过程如下:
ASL(32) = 1 ASL(75) = 1 ASL(29) = 1 ASL(63) = 1 ASL(48) = 1 ASL(94) = 1 ASL(25) = 1 ASL(46) = 2 ASL(18) = 1 ASL(70) = 2
ASL = (1 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 1 + 2) / 10 = 1.1
因此,最终的平均查找长度为1.1
原文地址: https://www.cveoy.top/t/topic/hsiE 著作权归作者所有。请勿转载和采集!