《数据结构与算法分析》学习笔记四——散列表(哈希表)、优先队列(堆)

本文详细介绍了哈希表(散列表)的概念,包括散列函数、冲突解决方法如分离链接法和开放定址法。接着,文章探讨了优先队列(堆)的性质,包括最小堆的定义、插入和删除操作的时间复杂度。此外,还提到了C++中的优先队列priority_queue的实现。

哈希表

          散列(hash)是以常数平均时间复杂度进行插入,删除和查找的继续,但不支持排序操作。

       每个关键字被映射到从0到TableSize-1范围中的某个数,并放到适当的单元中,这个映射就叫做散列函数(hash function),理想情况下不同关键字映射到不同单元,但由于单元有限,因此要寻找散列函数在单元间均匀地分配关键字。当两个关键字散列映射到同一个值的时候称为冲突。解决冲突的方法有几种,包括分离链接发和开放定址法。

        分离链接法将散列到同一个值的所有元素保留到一个表中,每个表都有表头,执行find时,使用散列函数确定究竟考察哪个表,然后遍历该表,找到并返回位置;执行insert时,遍历相应的表检查该元素是否已经处于适当的位置,若为新元素则插入表头或表尾。缺点是需要指针,分配地址减缓了速度,同时还需要实现链表。

         开放定址法也是用链表解决冲突,当发生冲突就尝试另外选择单元,直到找到空的单元。

           h(x) = (h(x) + F(i)) mod TableSize

         (1)线性探测法:函数F是i的线性函数,典型的为F(i)= i,若产生冲突,则放入下一个空闲地址。

          1,2,3,…,m-1

       故只要表足够大,总能找到一个自由单元,但花费时间相对多。更糟的是占据的单元会形成一些区块,称为一次聚集,散列到区块中任何关键字都需要多次试选才能添加到相应区块。

          (2)平方探测法:消除线性探

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值