精华内容
下载资源
问答
  • 数据结构>> 邓俊辉 上述C(k)的递推公式看了好久都没看懂(深刻受到清华的降维打击,差点放弃学习)。 期间主要参考了如下帖子: https://ask.csdn.net/questions/699067,其回答对于我,起到了非常重要的...

    来源:<<数据结构>> 邓俊辉

    上述C(k)的递推公式看了好久都没看懂(深刻受到清华的降维打击,差点放弃学习)。

    期间主要参考了如下帖子:

    https://ask.csdn.net/questions/699067,其回答对于我,起到了非常重要的作用。

    对于C(k)来说,我的理解、或者大家有误的理解是:C(k)=C(k-1)+ +2+C(k-1)+ 2 。按照上述回答的理解,C(k-1)是下一层实例得到的总比较次数。1表示一次比较失败,2表示两次比较成功,2表示两次比较失败。

    其中错误的地方在于C(k-1)是只能看作b层左右两个部分的总比较次数,而不能看作a层元素2左右两部分的总比较次数。要想把C(k-1)看作a层左边部分的总比较次数,就需要加上2^(k-1)。因为上述回答也提到,我们可以理解a层左边部分的总比较次数比b层左分支的总比较次数多了2^(k-1),因为a层想要进入b层左分支,那么b层左分支所有元素的比较次数都需要加1次失败的比较,而b层左分支共有2^(k-1)个元素,故不难得出。b层右侧同理。

     

    展开全文
  • 顺序查找 折半查找平均查找长度分析 ASL:平均查找长度 其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数。 ASL=∑i=1npici ASL=\sum_{i=1...

    顺序查找 折半查找的平均查找长度分析

    ASL:平均查找长度

    其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数。
    A S L = ∑ i = 1 n p i c i ASL=\sum_{i=1}^{n} p_ic_i ASL=i=1npici

    一般顺序查找的平均查找长度:

    • 因为顺序查找就是顺序存储 一个一个比较,所以如果查找成功的话说明就和之前不相等的元素已经比较过了。
    • 所以第 n 个元素就是比较了 n 次
    • 每个元素都比较了其所在位序的次数
    • 每个元素被查找的概率都是1/n 所以

    A S L 成 功 = 1 n ( 1 + 2 + 3 + … + n ) = n + 1 2 ASL_{成功}=\frac{1}{n}(1+2+3+…+n)=\frac{n+1}{2} ASL=n1(1+2+3++n)=2n+1

    $ASL_{成功}=n+1 $

    有序顺序表的平均查找长度:

    • 查找成功的 ASL 不影响

    • 如果查找不成功的话,因为顺序表有序,所以可以提前结束,从而缩短查找失败的比较次数,需要画个简单【判定树】

    • 举个例子,在[10 20 30 40 50 60]中查找

    image-20210924175755222
    • 失败的一共有 n+1个结点,所以每个结点的概率就是 1 n + 1 \frac{1}{n+1} n+11
    • 比较次数是 每个失败结点上一层的层数

    A S L 失 败 = 1 n + 1 [ 1 + 2 + 3 + … + n + n ] = n 2 + n n + 1 ASL_{失败} = \frac{1}{n+1}[1+2+3+…+n+n]=\frac{n}{2}+\frac{n}{n+1} ASL=n+11[1+2+3++n+n]=2n+n+1n

    折半查找的平均查找长度:

    • 要涉及到判定树:n 个元素就有n 个【内部结点】 n+1个【外部结点】

    • 【判定树】一定是【满二叉树】

    • 根据折半算法画出初级判定树(只有内部结点),其他空位用【查找失败的方框代替】

    • 算 ASL 直接就是算 [每层结点的个数*层数]➗结点个数

    image-20210924180742717

    • 不成功要具体例子具体计算。
    展开全文
  • 数据结构--折半查找

    2011-11-29 16:57:07
    数据结构习题---折半查找代码 void BinInsert(int A[],int &n,int item) { int j,low=1,high=n,mid; while(low) { /* 利用折半查找法查找合适位置*/ mid=(low+high)/2; /* 计算当前查找部分的中间位置*/ if...
  • 数据结构】顺序查找和折半查找

    千次阅读 多人点赞 2021-04-03 08:07:36
    摘要:在本篇文章中,主要讲述了在数据结构中所涉及的几大查找算法,包括:顺序查找、折半查找、分块查找和散列表查找。这些查找方式都是数据结构中最基本的查找方式,并且在数据结构中运用广泛。在查找算法中,最为...

    顺序查找和折半查找

    摘要:本篇文章中,主要讲述了在数据结构中涉及的几大查找算法,包括:线性结构、树形结构和散列结构及算法的效率指标。这些查找方式都是数据结构中最基本的查找方式,并且在数据结构中运用很广泛。合适的使用对应的查找算法,不仅能够提高算法操作效率,还能够节省查找时间,下述便先来谈谈查找算法中的基于线性结构的顺序查找算法和折半查找算法。

    知识框架:
    在这里插入图片描述

    一、查找的基本概念
    1、查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找的结果一般分为两种:查找成功(在数据集合中找到了满足条件的数据元素)、查找失败。

    2、查找表(查找结构):用于查找的数据集合称为查找表,由同一类型的数据元素组成,可以是一个数组或链表等数据类型。对查找表经常进行的操作一般有如下四种:
    (1)查询某个特定的数据元素是否在查找表中
    (2)检索满足条件的某个特定的数据元素
    (3)在查找表中插入一个数据元素
    (4)从查找表中删除某个数据元素

    注:(1)、(2)类查找表称为静态查找表;(3)、(4)类为动态查找表;静态查找表与动态查找表的区别在于:静态查找表只是查看满足某一条件的数据元素是否在表中,在就返回true,否则返回false,不做其它操作;而动态查找表则是在表中查询这个数据元素,如果不存在则插入这个数据元素,否者删除这个数据元素。

    3、查找表的查找方法
    (1)静态查找表:顺序查找、折半查找、散列查找等。
    (2)动态查找表:二叉排序树查找、散列查找。

    4、关键字:在数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结构应该是唯一的。如一个学生元素构成的数据集合中,学生元素中“学号”这一个数据项的值唯一地表示一名学生。

    5、平均查找长度:在查找过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的平均值。

    二、顺序查找和折半查找
    1、顺序查找
    (1)概念:主要在线性表中进行查找,顺序查找通常分为对一般的无序线性表(无序表)的顺序查找和对按关键字有序的顺序表(有序表)的顺序查找。

    (2)基本思想:从线性表的一端开始,逐个检查表中的关键字是否满足给定条件。若找到,则查找成功,并且返回该关键字在线性表中的位置。若已查找到表的另一端,但没有找到符合给定条件的元素,则返回失败的信息。

    (3)哨兵的作用:顺序查找过程中引入“哨兵”的作用:主要是为了判断在查找过程中数组是否越界,同时引入“哨兵”还可以避免很多不必要的判断语句,提高程序效率。

    (4)平均查找长度:在顺序查找的过程中时,对于有n个数据元素的数据集合中,给定值key与表中第 i 个元素相等,即定位第 i 个元素时,需要进行 n-i+1 次关键字的比较,即有:C= n-i+1,查找成功时,顺序查找的平均长度为:(n+1)/2;查找不成功时,与表中的各个关键字的比较次数是 n+1 次,从而顺序查找不成功的平均查找长度为:n+1。

    2、折半查找
    (1)折半查找又叫二分查找,仅用于有序顺序表。

    (2)基本思想:首先将给定值key与表中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置。若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分进行折半查找。依次重复如此步骤,直到找到为止,或确定表中没有所需要查找的元素,则查找失败,返回查找失败的信息。

    (3)折半查找操作过程:
    在这里插入图片描述
    初始:i=0,j=n-1,mid=(i+j)/2=(0+n-1)/2=(n-1)/2
    第一种情况:
    key>(n-1)/2,则:i=mid+1,j=n-1,mid=(i+j)/2
    第二种情况:
    key<(n-1)/2,则:i=0,j=mid-1,mid=(i+j)/2
    注:若 i>j,则查找不成功。

    (4)折半查找过程可用二叉树来描述,又叫判定树。

    • 查找成功时的平均查找长度为从根结点到目的结点的结点数;
    • 查找失败时的查找长度为从根结点到对应失败结点的父结点的路径上的结点树。
    • 用折半查找法查找给定值的比较次数最多不超过树的高度。
    • 查找成功:根结点—>目的结点的结点数
    • 查找失败:根结点—>对应失败结点的父结点的结点数

    注:每个结点值均大于其左子结点值,且均小于其右子结点值,因此,判定树是一颗平衡二叉树。

    (5)平均查找长度:在等概率查找时,查找成功的平均查找长度:ASL=log2(n+1)-1
    注:折半查找的时间复杂度:O(log2n)

    3.分块查找
    (1)分块查找又称为索引顺序查找,吸取了顺序查找和折半查找各自的优点,既有动态查找,又适于快速查找。

    (2)基本思想:将查找表分为若干子块,块内元素可以无序,但块间必须有序,即第一个块中的最大关键字小于第二个块中的所有记录的关键字,第二个块中的最大关键字小于第三个块中的所有记录的关键字,以此类推。再建立一个索引表,索引表中每个元素含有各块的最大关键字和各块中第一个元素的地址,索引表按关键字有序排列。

    (3)分块查找的过程有两步:在索引表中确定待查记录所在的块,可以顺序查找或折半查找;在块内顺序查找。

    (4)平均查找长度:将长度为n的查找表均匀分为b块,每块含有s个记录,在等概率的情况下,若在块内和索引表中均采用顺序查找,则平均查找长度为:

    • 平均查找长度:ASL=L1+L2=(b+1)/2+(s+1)/2=(s2+2s+n)/2s

    若采用折半查找时,则平均查找长度为:

    • ASL=L1+L2=(s+1)/2+log(b+1)
    展开全文
  • 折半查找判定数及平均查找长度

    万次阅读 多人点赞 2016-07-06 13:28:31
    折半查找判定数及平均查找长度 折半查找的过程看,可用二叉树来描述,二叉树中的每个结点对应有序表中的一个记录,结点中的值为该记录在表中的位置。通常称这个描述折半查找二叉树的过程称为折半查找判定树。 ...

    折半查找判定数及平均查找长度

    折半查找的过程看,可用二叉树来描述,二叉树中的每个结点对应有序表中的一个记录,结点中的值为该记录在表中的位置。通常称这个描述折半查找二叉树的过程称为折半查找判定树。

    例如:长度为10的折半查找判定树的具体生成过程:
    都遵循这个规律,左孩子结点<根结点<右孩子结点
        (1)在长度为10的有序表中进行折半查找,不论查找哪个记录,都必须和中间记录进行比较,而中间记录为
    (1+10)/2 =5  (注意要取整)   即判定数的的根结点为5,如图7-2(a)所示。
         (2)考虑判定树的左子树,即将查找区域调整到左半区,此时的查找区间为[1,4],那么中间值为(1+4)/2 =2 (注意要取整) ,所以做孩子根结点为2,如图7-2(b)所示。
         (3)考虑判定树的右子树,即将查找区域调整到右半区,此时的查找区间为[6,10],那么中间值为(6+10)/2 =8 (注意要取整) ,所以做孩子根结点为8,如图7-2(c)所示。
           (4)重复以上步骤,依次去确定左右孩子、


    1.折半查找是一棵二叉排序树,每个根结点的值都大于左子树的所有结点的值,小于右子树所有结点的值。
    2.折半查找判定数中的结点都是查找成功的情况,将每个结点的空指针指向一个实际上不存在的结点————外结点,所有外界点都是查找不成功的情况,如图7-2(e)所示。如果有序表的长度为n,则外结点一定有n+1个
    折半查找判定数中,某结点所在的层数就是即将要比较的次数,整个判定树代表的有序表的平均查找长度即为查找每个结点的比较次数之和除以有序表的 长度。
      例如:长度为10的有序表的平均查找长度为
            ASL=(1*1+2*2+3*4+4*3)/10=29/10;

    折半查找判定数中,查找不成功的次数即为查找相应外结点与内结点的比较次数。整个判定树代表的有序表的平均查找长度。查找失败时的有序表的平均查找长度即为查找每个外结点的比较次数之和除以外结点的个数。
    如图7-2(e)所示
       例如:查找失败时,。长度为10的有序表的平均查找长度为
     ASL=(3*5+4*6)/11=39/11;

    展开全文
  • 数据结构折半查找

    千次阅读 2018-12-27 19:48:37
    折半查找(Binary Search) 基本概念 在介绍查找算法前我们先重温几个重要概念: 1)数据:客观事物的符号表示,是所有能输入到计算机中,并能被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,...
  • 数据结构折半查找

    千次阅读 2018-10-17 23:50:02
    二分查找 折半查找(Binary Search) 折半查找算法的基本前提: 1)采用物理线性结构存储; 2)数据必须有序。   思想: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找...
  • //lenght:目标数组长度 //key:要查找的值 int BinarySearch(int *arr,int length,int key) { //前指针与后指针 int low=0 ,high=length; //中心指针,计算公式如下 int mid = (high+low)/2;//low + (high/low)/2 ...
  • 折半查找,适合顺序表,关键字有序排列。可以用二叉判定树描述判定过程。下面给出公式推导过程: 谢谢阅读。
  • 哈工大数据结构实验三——图形结构及其应用 哈工大课程实验合集 1.实验要求 步骤 2.实验步骤 2.1 设计BST 先看看BST树是啥。 BST也叫二叉查找树,它本质上也是一棵二叉树。只不过对于二叉树的每个节点来说,节点存储...
  • 【哈尔滨工业大学2005 四、1(8分)】画出对长度为18的有序的顺序表进行折半查找时的判定树,并指出在等概率时查找成功的平均查找长度,以及查找失败时所需的最多的关键字比较次数。 判定树如下: 图1-1判定树 ...
  • 查找算法–折半查找 算法思路: 当一个顺序表的元素是有序排列的,这时我们才可以使用折半查找。我们查找的过程是找到中间位置判断这个位置上的值是不是目标值,若是则直接找到,若不是,判断中间位置上的值与目标值...
  • 查找:给定一个值,在查找表中确定一个其关键字与给定值得数据元素(或记录)。 查找包含有一下几种操做: 1、查询某个“特定”的数据元素是否在查找表当中; 2、检索某个“特定”的数据元素的相关属性; 3、在查找...
  • C语言数据结构之查找(顺序查找,折半查找) tips:前些天已经学习了树和图的相关知识,今天来总结下两种常用的查找方式(顺序查找,折半查找)。 为了演示方便,顺序查找和折半查找的数据存储结构就直接采用数组。...
  • 折半查找法又称为二分查找法,该方法要求带查找的表是顺序存储结构并且表中的关键字大小有序排列。 查找过程: 先确定待查记录所在的区间,然后逐渐通过待查找值与区间中间值进行比较进而调整区间大小,不断缩小范围...
  • 折半查找的过程看,以有序表的中间记录作为比较对象,并以中间记录将表分割为两个子表,对子表...长度为n的折半查找判定树的构造方法为: ⑴ 当n=0时,折半查找判定树为空; ⑵ 当n>0时,折半查找判定树的根...
  • 整理内容来源:zzu信息工程学院数据结构ppt 本节讨论两类不同的查找表:静态查找表和动态查找表,给出在不同查找表上进行查找的不同算法和性能分析以及动态查找表的创建方法。 1 查找的基本概念 静态查找: 基于...
  • 本文实例为大家分享了C语言实现顺序表的顺序查找和折半查找的具体代码,供大家参考,具体内容如下 顺序查找: #include using namespace std; int SeqSearch(int r[],int n,int k) { r[0]=k;//下标0用作哨兵存放...
  • 也就是说,在使用折半查找算法查找数据之前,应该首先把该表的数据按照所查的关键字进行排序 折半查找算法 对静态表查找表{2,5,7,17,23,25,31,35,42,76,88}采用折半查找算法查找关键字为17的关键字的...
  • 数据结构折半查找

    千次阅读 2018-11-25 18:52:13
    折半查找 折半查找,必须是对有序表(一般为递增顺序)进行查找,定义low指针为0,首先将有序表中间关键字key与要查找的key进行比较,相等则成功,若表中记录key大于查找key,则移动hign指针,high=mid-1;在[low,mid...
  • 数据结构------查找之折半查找 1.折半查找又称二分查找,仅适用于有序的顺序表。 2.基本思想:首先将给定值与与表中中间位置的元素进行比较,若相等则查找成功,并返回该元素在表中的的位置;若不相等,则所要查找的...
  • 数据结构几种平均查找长度

    千次阅读 2020-04-16 17:39:35
    数据结构几种平均查找长度 总结的有关数据结构平均查找长度ASL的三种计算小技巧: 1.顺序查找法的平均查找长度为:(n+1)/2 2.散列表的查找成功和查找不成功的平均查找长度 技巧(线性探测法和链地址法): ...
  • 1、 折半查找需要查找表中的数据有序的排列,首先将查找关键字k与表中间的元素R[mid]进行对比,若k&gt;R[mid],则将最左端的下标low更新为mid右边的第一...折半查找平均查找长度为 时间复杂度为O(log n) ...
  • 折半查找判定数及平均查找长度 折半查找的过程看,可用二叉树来描述,二叉树中的每个结点对应有序表中的一个记录,结点中的值为该记录在表中的位置。通常称这个描述折半查找二叉树的过程称为折半查找判定树。 ...
  • 折半查找使用的条件首先就是,其序列是有序的。基本思想就是,每次比较该序列的中间的元素,若相等则查找成功,若大于该中间值,则去右半部分子序列进行再此的比较,若小于该中间值,则去左半部分的子序列进行再次的...
  • 折半查找1.头文件及类型定义2.顺序表类型定义3.函数声明4.基本操作4.1 初始化顺序表4.2 赋值4.3 折半查找★★★4.4 main函数5.小结 1.头文件及类型定义 #include<stdio.h> #define ElemType int #define ...
  • 1、顺序查找 2、二分查找(折半查找) 3、哈希查找
  • 折半查找技术,也就是二分查找,通常称为二分法查找。它的前期是线性表中的记录必须是关键码有序(通常从大到小有序),线性表必须采用顺序存储、折半查找的基本思想是: 取中间记录作为比较对象,若给定值与中间...
  • 数据结构折半查找及其二叉判定树画法

    万次阅读 多人点赞 2019-09-25 23:55:40
    折半查找又叫二分查找,是数据结构中一种很重要的查找方式。 其特点有以下几个: 只能对有序的顺序表进行查找。 是一种静态查找。 查找的平均时间复杂度为o(log2n)。 成功平均查找长度ASL约log2(n+1)-1。 ...
  • 数据结构与算法》实验和课程...《数据结构与算法》实验:查找结构的实验比较——二叉查找树BST & 二分(折半查找数据结构与算法》实验:排序算法实验比较——选择排序 & 堆排序 《数据结...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,319
精华内容 4,927
关键字:

数据结构折半查找平均查找长度

数据结构 订阅