可信计算中常用的哈希扩展操作步骤
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可信计算中常用的哈希扩展操作步骤
哈希表基本操作及其扩展
数据结构
一、哈希表的概念:
哈希表本身是一个数组,其元素在数组中存放位置为:通过哈希函数使元素关键码和元素存储位置有一定的映射关系。
二、哈希表的特点:
搜索数组中某一元素时,可以通过该元素的关键码和存储位置的映射关系直接找到对应位置查看是否存在。
在数组中插入元素时,根据哈希函数计算出插入元素的位置并且在此位置存放。
存在哈希冲突:两个不同的元素通过哈希函数所映射的存储位置相同即为哈希冲突。
例如:两个元素的关键字X != y,但有HashFunc(x) == HashFunc(y)
三、哈希冲突的解决方法
根据哈希表的特点可知,哈希冲突在所难免,虽然可以通过调整哈希函数来降低哈希函数的可能性,但还是不能完全避免哈希冲突,因此提出两种解决方案:
闭散列:开放地址法,即当哈希表未装满时,将待插入元素Key放在下一“空位”处。
“空位寻找”:线性探测和二次探测。
线性探测:从发生哈希冲突的位置挨着挨着向后找空位置,直到找到空位置。
二次探测:从哈希冲突的位置加上i2i2,i=1,2,3,….
开散列:拉链法,首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。
四、注意问题:
(1)使用闭散列方法时扩容须满足的负载因子(大于0.7)。
(2)使用开散列方法时扩容须满足的负载因子(等于1)。
(3)扩容时将原哈希表中的内容存放至新表时,映射到新表的位置须重新计算。
(4)为了尽可能的避免哈希冲突,使用素数表对齐做哈希表的容量。
(5)闭散列删除时只需要将其元素的状态改为删除即可。
(6)开散列在删除时需要将其所在节点进行删除,删除节点须注意是否为头节点
查找。
(7)闭散列查找某一元素时,只须在存在状态的元素中寻找,如果状态该元素的关键码所映射的位置为空(EMPTY)或者删除(DELET),表示该元素不存在。
(8)闭散列查找某一元素时,不仅需要在所映射的当前位置去找,还须在其所挂链表中寻找代码实现。