线性表查找

0.前言

    查找也就是通常意义上的检索。指的是在给定某种条件的情况下,寻找满足的元素。被查找的对象我们可以简单的称之为元素,但不局限与数字,字符串,文件,对象等。查找运算的主要运算是关键字的比较,随意通常把查找过程中关键字的比较次数作为衡量一个算法效率优劣的标准,即,平均查找长度ASL:

    

    注:pi:查找第i个元素的概率,通常为1/n(1<=i<=n),ci:查找到第i个元素所需要

1.顺序查找

    顺序查找是一种最简单的查找方式,需要从表的一端开始进行比较,知道找到满足要求条件的元素为止。

    FOR seqList FROM 1 TO n

        IF Judge(seqList.get(i))

            RETUREN i

        ELSE

            CONTINUE

    

2.折半查找

    折半查找,又称二分查找,是一种效率比较高的查找方式,但是折半查找必须要求线性表是一个有序表,表中的元素按照关键的元素标志是有序的。在每一次的查找匹配值中,我们的根据当前区间的中间值与目标元素的比较,排除1/2的区间元素,同时获得1/2的目标元素。

    WHILE (low <= high)

        mid =  (low + high) / 2

        IFJudge(seqList.get(mid))

            RETURN mid

        IF JudgeUp(seqList.get(mid))

            low = mid +1

        ELSE

            high = mid -1

       对于折半查找,我们的我一使用二叉树来进行的图形化的展示。对于二叉树,内部节点的个数:

,树的高度的为 ,第i层的元素个数为 ,查找该层上每个元素需要进行比较的次数为i次。因此,得到如下的ASL:

        

        上述公式使用等差数列*等比数列元素求和的公式求得。

        

3.索引存储

    索引存储结构实在存储数据的同时,建立附加的索引表。一般的形式是:

        (关键字,地址)

    每一次的增删改都只是需要维护一下索引的结构就行,但是关键点在于,每一次对元素进行改变,都需要对索引进行维护,这样就增加的一定的开销。他的平均查找长度ASL主要根据索引本身的结构的来进行评判。

4.分块存储

    分块查找也就是我们经常说的索引顺序查找,是一种介于顺序查找和这般查找之间的查找方式。规定使用索引的方式的来存储线性表,将表R[0..n-1]平均分成b块,前面b-1块的元素个数为s=up[n/b],最后一块的元素个数小于等于s。每一块中的元素不一定必须有序,但是前面一块的最大元素一定要小于后一块元素的最小值(大小等标准),即分块有序。抽取各块的最大关键字(元素)以及起始关键字构成一个索引表idx[0..b-1],也就是说idx[i](0<=x<=b-1)存放着第i块的最大关键字以及在表R中的位置索引。由于是分块有序的,因此idx索引表是一个有序的递增的表。

    由此我们可以得出:

    1)二分查找方法+顺序查找

        

        注:b=up[n/s]

    分析 : 当s越小的时候,ASL的值越小,整体上是一个递增的关于s的函数,当n(100)取一定值得时候:

    

    2)顺序查找+顺序查找

      

        注:b=up[n/s]

        分析:当s=sqrt(n)的时候,ASL_ees取得极小值sqrt(n)+1,所以当采用顺序查找+顺序查找的时候,块中各元素选定为sqrt(n)的时候,是最佳的。

        

5.总结

    线性表的查找对于后面学习的树表的查找是非常重要的,只有对它进行深刻的思考,并且理解其中的不同查找的影响因素,才能够在一定程度上设计出符合实际需求的查找数据结构。

转载于:https://my.oschina.net/u/3520549/blog/1527088

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值