数据结构-查找思想

查找长度即是比较次数,平均查找长度ASL,是每个元素查找需要的比较次数*其查找概率之和。每个元素查找概率相等即1/n。

线性表查找

  • 顺序查找,ASL=(1+...+n)*(1/n)=(n(n+1)/2)*(1/n)=(n+1)/2。

          平均时间复杂度 O(n)。

  • 二分查找,也称折半查找,要求线性表是按关键字有序顺序表,只适用于静态查找表。

        中间点位置=⌊(low+high)/2⌋,符号使用的是下中括号,不是上中括号⌈⌉。
        二分查找过程用二叉树来描述,称为描述二分查找的判定树,或比较树。
        ASL=((n+1)/n)*lg(n+1)-1≈lg(n+1)-1。
        树深度=⌈lg(n+1)⌉。
        平均时间复杂度 O(lgn)。

  • 分块查找(索引顺序查找),性能介于顺序和二分查找之间,要求线性表分块有序。

        它的索引表是由各块中的最大关键字及块起始位置组成的有序表。
        先查找索引表,确定块,再在块内顺序查找。

  • 哈希查找(杂凑法、散列法)

       不通过比较,直接在关键字和存储地址之间建立映射关系,通过关键字直接定位到记录在的位置。即通过哈希函数建立哈希表。

树表之二叉排序树

二叉排序树,又称二叉查找树。
运算:插入、生成、删除、查找。
平衡二叉树是指任一结点的左右子树的高度大致相同。

B-树、平衡树

忽律横杠读作B树,即Balance Tree,多路平衡查找树。度为m的B树称为m阶B树。度数大则高度小,较大的度数使结点中的关键字较多,相比减小了磁盘访问次数。
一般地,文件中查找性能,受到的磁盘IO的次数的影响,远大于内存中比较的次数的影响。B树用于对较大的,存放在外部存储器上的文件内查找,是一种尽可能降低磁盘IO次数的文件组织方式。Mysql的数据索引存储即是基于Hash表或者B+树。
非根结点关键字数j:⌈m/2⌉-1<=j<m-1。

https://www.sohu.com/a/154640931_478315

散列(Hash)技术

和排序类似,要突破lgn的下界,就不能只依赖比较。
将结点按关键字的散列地址,存储到散列表中的过程,称为散列。
散列函数的作用是压缩待处理的下标范围|U|到m=O(|K|),即|K|的线性阶数量级,|K|<= m <|U|,所以从所有情况来看,冲突总会出现。
散列函数的标准是简单和均匀。有平方取中法、除余法、相乘取整法、随机数法。
处理冲突的方法:开放定址法(线性探查法、二次探查法、双重散列法)、拉链法。
地址单元为空的地址称为开放地址。
开放定址是当冲突发生时,用某种探查法在散列表中找到一个地址来放置这个冲突的结点。
散列表上的查找:
1.在散列表中查找散列地址h(K),若其单元为空,则查找失败。
2.比较其单元和K值是否相等,若相等则查找成功。
3.按冲突处理方法计算下一个散列地址h(K)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值