查找:

给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败

查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序

动态查找表:查找的同时做修改操作(插入,删除)

静态查找表:查找中不涉及表的修改操作

内查找:整个查找过程都在内存中进行

外查找:查找过程需要访问外存

平均查找长度(ASL):平均需要比较的次数

ASL分为查找成功和查找失败两种情况

ASL越小,其时间性能越好

线性表的查找是一种最简单的查找表,分为顺序查找折半查找(二分法

顺序查找:

思路:从表的一端向另一端逐个将关键字和定值k比较,若相等,则查找成功;否则查找失败

while(i<size&&key!=a[i])
{
i++;
}
if(i>=size)
{
//查找失败
}
else
{
//查找成功}

性能分析:

查找成功的ASL:

综上,线性表顺序查找的时间复杂度为O(n)

折半(二分)查找:

折半查找又叫二分查找,要求元素有序(递增或者递减),下面讨论递增的情况

思路:

nums[low,..,high]是当前查找区间,首先确定中点mid=(low+high)/2,然后将待查找的值k和

nums[mid]比较:

(1)nums[mid]=k,查找成功

(2)nums[mid]<k,说明k在右子表nums[mid+1,high]中

(3)nums[mid]>k.说明k在左子表nums[low,mid-1]中

重复这一过程

代码:

binsearch(int nums[],int k,int n)
{
int low=0;
int high=n-1;
while(low<=high)
{
mid=(low+high)/2;if(k==nums[mid]){
return mid;
}
else if(k<nums[mid])
{
high=mid-1;
}
else
low=mid+1;
}
return -1;
}

二分查找的判定树(比较树):

内部节点:判定树中查找成功对应的节点

外部节点:判定树中查找失败对应的节点

外部节点的构造方法:

对于内部节点的单分支点,添加一个孩子节点成为双分支节点;

对于内部节点的叶子节点,添加两个孩子节点成为双分支节点

利用判定树求二分查找的ASL:

查找成功时,每个元素对应的概率为1/n,比较次数为根节点到该元素对应的节点的节点树(不是分支树)

查找失败是,每个外部节点的概率如果近似看出相等,每个外部节点的概率为1/N(N为外部节点的个数),比较次数为根节点到外部节点的边的个数

【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)相关推荐

  1. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

    原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...

  2. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  3. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  4. 数据结构与算法(一) 线性表之顺序表

     线性表是一种最简单.最常用的数据结构,根据存储方式可以分为顺序表和链表.  顺序表: 顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequent ...

  5. 数据结构和算法基础--线性表

    数据结构和算法基础–线性表 数据结构 = 数据的逻辑结构+数据的存储结构+数据的运算 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28ek7MfI-164242629 ...

  6. 【数据结构与算法】线性表的查找

    顺序查找(线性查找) 折半查找(二分或对分查找) 分块查找 顺序查找 typedef struct{ //顺序表结构类型定义ElemType *R; //表基址int length; //表长 }SS ...

  7. 《大话数据结构》读书笔记-线性表

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书. 文章目录 3.2 线性表的定义 3.3 线性表的抽象数据类型 3.4 ...

  8. 学习笔记-数据结构与算法之线性表

    目录 框架图 线性表 顺序结构 创建线性表 输出验证 获取第i个元素 插入元素到特定位置 删除特定位置元素 整体代码 链式结构 创建链表 输出验证 获取第i个元素 插入元素 删除元素 删除整表 完整代 ...

  9. 数据结构与算法之线性表(超详细顺序表、链表)

    原创公众号:bigsai 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 前言 通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容 ...

  10. Java数据结构和算法:线性表

    线性表的定义 线性表(linear-list)是最常用最简单的一种数据结构.一个线性表是n (n≥0)个相同类型数据元素的有限序列.记为: L= (a1, a2 , - , an ). 其中,L是表名 ...

最新文章

  1. JSP显示页面和数据库乱码
  2. sftp服务器同步文件到本地,服务器之间通过sftp的方式同步文件,并入库到本地数据的表中...
  3. 深入理解linux系统下proc文件系统内容
  4. 中国传统颜色html源码,中国传统颜色16进制代码对照表-HTML
  5. c语言getchar的作用,c=getchar()!='\n'到底什么用呢
  6. java垃圾回收器有哪些_Java常见的垃圾收集器有哪些?
  7. [HZOI 2016]tree—增强版
  8. Maple 教程(一)---初认识
  9. 小米洗手机拆解自动关机
  10. 测试总结报告写法简单总结
  11. git log 查找某天之后的提交
  12. 两个人聪明人的空城——《司马懿之虎啸龙吟》
  13. 【总结】1438- 你想知道的前后端协作规范都在这了
  14. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件教程
  15. 从用户文件到系统驱动,全面清理c盘
  16. Spark源码之coalesce算子
  17. 45-pytest-pytest.main()使用
  18. i5 1035G4和i5 1035G1 哪个好
  19. 2012年经济与股市战略
  20. Mac系统下获取/创建ssh key

热门文章

  1. CCF201512-1 数位之和(100分)【进制+文本】
  2. Bailian2909 字符串加空格【指针】
  3. CCF NOI1023 最大跨度
  4. Java 容器的使用及数组、List、Set 的相互转换
  5. Eclipse 插件管理
  6. 图灵机(Turing Machine)
  7. 强悍的 vim —— 可视模式(visual mode)
  8. for 循环 and while 循环(二)
  9. 趣学 C 语言(三)—— 琐碎
  10. 多元线性回归dw值_SPSS教程10:多元线性回归