【概述】

查找是在具相同类型的记录构成的集合中,找出满足给定条件的记录,给定的查找条件是多样的,为便于讨论,将查找条件限制为 “匹配”,即查找关键码等于给定值的记录。

在查找中,常将数据元素称为记录,将可以标识一个记录的某个数据项称为关键码,关键码的值称为键值,若关键码可以唯一标识一个记录,则称其为主关键码,反之,称为次关键码

【查找分类】

1.静态查找

静态查找是指不涉及插入、删除操作的查找,其在查找不成功时,只返回一个不成功的标志,查找的结果不改变查找集合。

其适用于以下两种情景:

  • 查找集合一旦生成,只对其进行查找
  • 对查找集合经过一段时间查找后,集中地进行插入、删除等操作

2.动态查找

动态查找是指涉及插入、删除操作的查找,其在查找不成功时,需要将查找的记录插入到查找集合中,查找的结果可能会改变查找集合。

其适用于查找与插入、删除操作在同一阶段进行的情景。

【查找结构】

一般而言,各种数据结构都会涉及到查找操作,但在某些应用中,查找操作是最主要的操作,为提高查找效率,需要设计专门的查找结构。

常见的查找结构有:

  • 线性表:适用于静态查找,主要采用顺序查找、折半查找等
  • 树表:适用于动态查找,主要采用二叉排序树查找等
  • 散列表:静态查找、动态查找均适用,主要采用哈希查找

【查找的性能】

查找算法的基本操作通常是将记录的关键码与给定值进行比较,其运行时间主要消耗在关键码的比较上,因此应以关键码的比较次数来度量查找算法的时间性能,其时间复杂度是问题规模 n 和待查关键码在查找集合中的位置 k 的函数,记为:T(n,k)

对于查找算法,关心的是其整体性能,故将关键码的比较次数的数学期望值定义为平均查找长度(ASL)

对于查找成功的情况,有:,其中,Pi 为查找表中第 i 个记录的概率,Ci 为找到第 i 个记录所需的关键码的比较次数。

对于查找不成功的情况,平均查找长度为查找失败对应的关键码的比较次数。

【分类】

1.线性表的查找技术

1)顺序查找:点击这里

2)二分查找:点击这里

3)插值查找:点击这里

4)斐波那契查找:点击这里

2.树表的查找技术

1)二叉排序树:点击这里

2)平衡二叉树(AVL 树):点击这里

3.哈希查找:点击这里

理论基础 —— 查找相关推荐

  1. 理论基础 —— 查找 —— 平衡二叉树

    [概述] 二叉排序树的查找效率取决于二叉排序树的形态,而构造一棵形态均匀的二叉排序树与结点的插入次序有关,但结点的插入次序不是随人的意志决定的,这就要求我们找到一种动态平衡的方法,对于任意给定的关键码 ...

  2. 理论基础 —— 查找 —— 二叉排序树

    [概述] 二叉排序树(Binary Search Tree),又称二叉查找树,其本质是按一定的顺序进行构造的二叉树. 其递归定义如下: 若其左子树不空,则左子树上所有结点的值均小于根结点的值 若其右子 ...

  3. 理论基础 —— 查找 —— 斐波那契查找

    [概述] 斐波那契查找,其利用了黄金分割原理来对二分查找进行了改进. 黄金分割又称黄金比例,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约 ...

  4. 理论基础 —— 查找 —— 插值查找

    [概述] 以查字典为例,在英文字典中查 "apple" 时,下意识的会翻开前面的书页,当查 "zoo" 时,下意识的翻开一定是后面的书页,显然,此时还绝对不是从 ...

  5. 理论基础 —— 查找 —— 顺序查找

    [概述] 顺序查找是最基本的查找技术之一,其基本思想是:从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值 k 相比较,若相等则表示查找成功:若扫描结束仍没有找到关键字等于 k 的 ...

  6. 理论基础 —— 查找 —— 二分查找

    [概述] 二分查找又称折半查找,其要求线性表中的记录必须按关键码有序,且必须采用顺序存储. 其基本思想是:用给定值 k 先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功:若不相 ...

  7. 代码随想录Day01:数组理论基础、二分查找、移除元素

    目录 数组理论基础.二分查找.移除元素 1.数组理论基础 2.Leetcode704.二分查找 方法一 左闭右闭: 方法二 左闭右开: 方法三 左开右开: 方法四 左开右闭: 3.Leetcode27 ...

  8. 代码随想录算法训练营第一天 | 数组理论基础,704. 二分查找,27. 移除元素

    今日学习的文章链接如下: 代码随想录 (programmercarl.com) 代码随想录 (programmercarl.com) 704. 二分查找 自己看到题目的第一想法 拿到题目首先想办法,一 ...

  9. 【代码随想录算法练习】| DAY01 | JavaScript | 数组理论基础,704. 二分查找,27. 移除元素

    详细解析:请看Carl老师的讲解 数组基础理论 下标从 0 开始 内存空间地址是连续的 增删元素时,会涉及其他元素地址的变动 704. 二分查找 | 点击查看力扣对应题目 二分法,也叫折半查找法,这里 ...

最新文章

  1. 金立M2017续航出色不仅是因为电池大,还有超强快充
  2. boost::fibers::unbuffered_channel用法的测试程序
  3. 重载VerifyRenderingInServerForm
  4. 高考填报志愿计算机操作技巧,高考志愿填报技巧经验
  5. 蓝桥杯2017初赛-分巧克力-二分
  6. 再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!
  7. 单片机学c语言还是python好_单片机开发用哪种语言最好?
  8. arm-arago-linux-gnueabi 下载,arm-arago-linux-gnueabi问题
  9. ZetCode 教程翻译计划正式启动 | ApacheCN
  10. Idea在plugin的marketplace中一直查不到东西安装插件
  11. mysql新增字段会锁表_MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?...
  12. Ubuntu下在Apache中运行Keystone
  13. PowerDesigner--comment和name互相复制
  14. 计算机网络那些事~(二)
  15. wap页面在微信内置浏览器浏览遇到的问题
  16. unity中移动的九种方法
  17. 苹果台式电脑怎么使用计算机,苹果笔记本键盘怎么用_苹果笔记本电脑键盘的使用方法-win7之家...
  18. 1062. 洪水填充
  19. 系统分析设计——如何识别类
  20. PhotoShopCS6从入门到精通--笔记

热门文章

  1. swing组建的层次
  2. 奥运吉祥物动画宣传片
  3. Flink的设计与实现:集群资源管理
  4. 什么样的数据才有价值?应该怎样收集和处理?终于有人讲明白了
  5. 你知道荷兰旗问题吗?
  6. Jeewx 捷微管家操作配置文档(开源版本)
  7. 怎样正确查看Linux的内存占用情况
  8. JEECG UI标签库做成单独开源项目规划
  9. 关于struts线程问题 转
  10. “无法找到运行搜索助理需要的一个文件”的解决办法