[Data Structure & Algorithm] 线性表的查找

平均查找长度 ASL

影响查找算法好坏的主要标准 - 时间复杂度,通常用 - 平均查找长度

  • 定义 - 为确定记录在查找表中的位置,需要和给定值进行比较的关键字的个数的期望
  • 公式 - ASL = (查找成功时 + 查找失败时)的平均查找长度的期望
  • 基本概念
    • Ps - 查找成功时的概率
    • Pf - 查找失败时的概率
    • Pi - 需要比较I次才能确定位置的记录出现的概率
    • n - 查找表的长度
  • 好的算法
    • 可以改变 - Pi

      • 对于越小的i对应的Pi越大越好
    • 不可以改变 - Ps和Pf

线性表上的查找

  • 顺序表

    • 具体实现

      • 从序列的最后开始从后往前依次比较
      • 设置监视哨 - SeqList[0] = key;
      • 目的 - 避免在循环中每次都检查是否越界,运行更快
    • 近似查找概率 - 访问频率
    • 平均查找长度 - (n+1)/2
    • 优点 - 算法简单而适用范围广
    • 缺点 - 平均查找长度较大,尤其是n很大时
  • 有序表
    • 基本思路 - 二分查找(折半查找)

      1.设L[low..high]为当前查找区间,则mid = (low+high)/2

      2.将要查找的key值与L[mid]进行比较,

      - 如果相等,返回mid

      - 如果key < L[mid],high = mid -1

      - 如果key > L[mid],low = mid + 1

      3.重复1,直到找到key值,或者low>high

    • 判定树 - 将mid作为二叉树的根
      • 无论查找成功或失败,比较次数都不会超过判定树的深度log2(n+1)
    • 平均查找长度 = log2(n+1) - 1
    • 优点 - 查找效率高
    • 缺点 - 只适用于顺序有序表,不能用链式存储
      • 前期排序费时 - 高效率的排序方法也要O(nlog2n)
      • 如果需要插入和删除,都必须移动大量结点
    • 适用 - 插入和删除操作特别少的线性表
  • 索引顺序表
    • 基本思路 - 分块查找(Blocking Search)

      • 存储结构

        • 索引表

          • 索引项 - 数据域(块中的最大值)|地址域(块中第一个值的位置)
          • 索引表是有序的
        • 分块后的线性表 - 与索引表对应
          • 长度为n的线性表分为b块,每块含有s个元素(每块的元素个数不一定要相等)
      1. 索引表查找 - 折半查找 - 找到关键词所属的块
      2. 块中查找 - 顺序查找
    • 平均查找长度 - log2(n/s + 1) + s/2
    • 优点 - 插入或删除容易
    • 缺点
      • 增加索引表的存储空间
      • 需要将线性表分块排序

原文地址:https://www.cnblogs.com/break-dawnn/p/9806982.html

时间: 2024-10-10 06:03:13

[Data Structure & Algorithm] 线性表的查找的相关文章

线性表的查找

查找基本概念 查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作. 线性表的查找 在查找表中.线性表查找是最简单的一种,基本的操作为顺序查找和折半查找. 顺序查找:从表的一端開始.依次将查找的keyword与给定数据库进行批对,若keyword在给定数据库中存在.则查找成功.否则当数据库从头到尾没有批对到.则查找失败. 作用范围:即使用线性表的顺序存储又适合于线性表的链式存储结构. 数据元素类型定义 typedef struct{ KeyType key. //keywor

(转载)查找一 线性表的查找

查找一 线性表的查找 目录 查找的基本概念 顺序查找 二分查找 分块查找 三种线性查找的PK 参考资料 相关阅读 查找的基本概念 什么是查找? 查找是根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素. 查找算法的分类 若在查找的同时对表记录做修改操作(如插入和删除),则相应的表称之为动态查找表: 否则,称之为静态查找表. 此外,如果查找的全过程都在内存中进行,称之为内查找: 反之,如果查找过程中需要访问外存,称之为外查找. 查找算法性能比较的标准 --平均查找长度ASL(Av

[Data Structure &amp; Algorithm] 七大查找算法

查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找都可以归为一类——插值查找.插值查找和斐波那契查找是在二分查找的基础上的优化查找算法.树表查找和哈希查找会在后续的博文中进行详细介绍. 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录). 查找算法分类: 1)静态查找和动态查找: 注:静态或者动态都是针对查找表而言

转:线性表的查找-顺序查找

转自:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.2.1.htm 顺序查找(Sequential Search)     在表的组织方式中,线性表是最简单的一种.顺序查找是一种最简单的查找方法. 1.顺序查找的基本思想    基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较.若当前扫描到的结点关键字与K相等,则查找成功:若扫描结束后,仍未找到关键字等于K的结点,则

转:线性表的查找-二分查找

转自:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.2.2.1.htm 二分查找 1.二分查找(Binary Search)     二分查找又称折半查找,它是一种效率较高的查找方法.    二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构.不妨设有序表是递增有序的. 2.二分查找的基本思想    二分查找的基本思想是:(设R[low..high]是当前的查找区间) 

转:线性表的查找-分块查找

转自:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.2.3.htm 分块查找    分块查找(Blocking Search)又称索引顺序查找.它是一种性能介于顺序查找和二分查找之间的查找方法. 1. 二分查找表存储结构    二分查找表由"分块有序"的线性表和索引表组成. (1)"分块有序"的线性表    表R[1..n]均分为b块,前b-1块中结点个数为 ,第b块的结

查找一 线性表的查找

查找的基本概念 什么是查找? 查找是根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素. 查找算法的分类 若在查找的同时对表记录做修改操作(如插入和删除),则相应的表称之为动态查找表: 否则,称之为静态查找表. 此外,如果查找的全过程都在内存中进行,称之为内查找: 反之,如果查找过程中需要访问外存,称之为外查找. 查找算法性能比较的标准 ——平均查找长度ASL(Average Search Length) 由于查找算法的主要运算是关键字的比较过程,所以通常把查找过程中对关键字需

Structure.List 线性表 - 专业|程序|作业|项目|Code|代写|C|C++|Java|Matlab|C#|JS|留学生

线性表 包含顺序链表,单链表,双链表,双向循环链表的实现 代码下载链接: Structure.List =============================================================================================== 国内TOP5高校计算机工程师个人代写 QQ联系专业高效原创 QQ(24小时在线): 1926742804 如紧急可发送资料到[email protected]

[Data Structure &amp; Algorithm] 八大排序算法

排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序算法体系结构图: 1. 直接插入排序(Straight Insertion Sort ) 基本思想:将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列. 算法流程: 1)初始时, a[0]自成一个有序区, 无序区为a[1