关键码:可以标识一个记录的某个数据项。
键值:关键码的值。
主关键码:可以唯一地标识一个记录的关键码。
次关键码:不能唯一地标识一个记录的关键码。
查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。
查找的结果 :若在查找集合中找到了与给定值相匹配的记录,则称查找成功;否则,称查找失败。
静态查找 :不涉及插入和删除操作的查找 。
静态查找适用于:查找集合一经生成,便只对其进行查找,而不进行插入和删除操作,或经过一段时间的查找之后,集中地进行插入和删除等修改操作。
动态查找 :涉及插入和删除操作的查找。
动态查找适用于:查找与插入和删除操作在同一个阶段进行,例如当查找成功时,要删除查找到的记录,当查找不成功时,要插入被查找的记录。
查找结构 :面向查找操作的数据结构 ,即查找基于的数据结构。
线性表:适用于静态查找,主要采用顺序查找技术、折半查找技术。
树表:适用于动态查找,主要采用二叉排序树的查找技术。
散列表:静态查找和动态查找均适用,主要采用散列技术。
查找算法时间性能通过关键码的比较次数来度量。
关键码的比较次数与哪些因素有关呢?
⑴算法;
⑵问题规模;
⑶待查关键码在查找集合中的位置;
⑷查找频率。
查找算法的时间复杂度是问题规模n和待查关键码在查找集合中的位置k的函数,记为T(n,k)。
平均查找长度:将查找算法进行的关键码的比较次数的数学期望值定义为平均查找长度。

顺序查找的缺点:平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。
顺序查找的优点
算法简单而且使用面广。
1.对表中记录的存储没有任何要求,顺序存储和链接存储均可;
2.对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。

折半查找
使用条件:
1.线性表中的记录必须按关键码有序;
2.必须采用顺序存储。

折半查找判定树
判定树:折半查找的过程可以用二叉树来描述,树中的每个结点对应有序表中的一个记录,结点的值为该记录在表中的位置。通常称这个描述折半查找过程的二叉树为折半查找判定树,简称判定树。
判定树的构造方法
⑴ 当n=0时,折半查找判定树为空;
⑵ 当n>0时,折半查找判定树的根结点是有序表中序号为mid=(n+1)/2的记录,根结点的左子树是与有序表r[1] ~ r[mid-1]相对应的折半查找判定树,根结点的右子树是与r[mid+1] ~ r[n]相对应的折半查找判定树。
折半查找性能分析
具有n个结点的折半查找判定树的深度为[log2 n] +1 。
查找成功:在表中查找任一记录的过程,即是折半查找判定树中从根结点到该记录结点的路径,和给定值的比较次数等于该记录结点在树中的层数。
查找不成功:查找失败的过程就是走了一条从根结点到外部结点的路径,和给定值进行的关键码的比较次数等于该路径上内部结点的个数。

二叉排序树(也称二叉查找树):或者是一棵空的二叉树,或者是具有下列性质的二叉树:
⑴ 若它的左子树不空,则左子树上所有结点的值均小于根结点的值;
⑵ 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;
⑶ 它的左右子树也都是二叉排序树。
二叉排序树的定义采用的是递归方法

中序遍历二叉排序树可以得到一个按关键码有序的序列。
二叉排序树的构造从空的二叉排序树开始,依次插入一个个结点 。

一个无序序列可以通过构造一棵二叉排序树而变成一个有序序列;
每次插入的新结点都是二叉排序树上新的叶子结点;
找到插入位置后,不必移动其它结点,仅需修改某个结点的指针;
在左子树/右子树的查找过程与在整棵树上查找过程相同;
新插入的结点没有破坏原有结点之间的关系。

二叉排序树的删除
在二叉排序树上删除某个结点之后,仍然保持二叉排序树的特性。
分三种情况讨论:
1.被删除的结点是叶子;
操作:将双亲结点中相应指针域的值改为空。
2.被删除的结点只有左子树或者只有右子树;
操作:将双亲结点的相应指针域的值指向被删除结点的左子树(或右子树)。
3.被删除的结点既有左子树,也有右子树。
操作:以其前驱(无右子树)(左子树中的最大值)替代之,然后再删除该前驱结点。
操作:以其后继(无左子树)(右子树中的最小值)替代之,然后再删除该后继结点。

二叉排序树的查找
在二叉排序树中查找给定值k的过程是:
⑴ 若root是空树,则查找失败;
⑵ 若k=root->data,则查找成功;否则
⑶ 若k<root->data,则在root的左子树上查找;否则
⑷ 在root的右子树上查找。
上述过程一直持续到k被找到或者待查找的子树为空,如果待查找的子树为空,则查找失败。
二叉排序树的查找效率在于只需查找二个子树之一。

平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:
⑴ 根结点的左子树和右子树的深度最多相差1;
⑵ 根结点的左子树和右子树也都是平衡二叉树。
最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因子的绝对值大于1的结点为根的子树。

平衡因子:结点的平衡因子是该结点的左子树的深度与右子树的深度之差。

顺序查找、折半查找、二叉排序树查找等。
这些查找技术都是通过一系列的给定值与关键码的比较,查找效率依赖于查找过程中进行的给定值与关键码的比较次数。

散列的基本思想:在记录的存储地址和它的关键码之间建立一个确定的对应关系。这样,不经过比较,一次读取就能得到所查元素的查找方法。
散列表:采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表。
散列函数:将关键码映射为散列表中适当存储位置的函数。
散列地址:由散列函数所得的存储位置址 。
散列既是一种查找技术,也是一种存储技术。
散列只是通过记录的关键码定位该记录,没有完整地表达记录之间的逻辑关系,所以,散列主要是面向查找的存储结构。
散列技术最适合回答的问题是:如果有的话,哪个记录的关键码等于待查值。
散列技术的关键问题:
⑴ 散列函数的设计。如何设计一个简单、均匀、存储利用率高的散列函数。
⑵ 冲突的处理。如何采取合适的处理冲突方法来解决冲突。

冲突:对于两个不同关键码ki≠kj,有H(ki)=H(kj),
即两个不同的记录需要存放在同一个存储位置,ki和kj相对于H称做同义词。
设计散列函数一般应遵循以下原则:
⑴ 计算简单。散列函数不应该有很大的计算量,否则会降低查找效率。
⑵ 函数值即散列地址分布均匀。函数值要尽量均匀散布在地址空间,这样才能保证存储空间的有效利用并减少冲突。

20176408李俊 查找技术相关推荐

  1. Linux中文件查找技术大全

    Linux中文件查找技术大全 转载出处:http://tech.sina.com.cn/c/2001-10-29/6739.html 文/Linuxdoor 每一种操作系统都是由成千上万个不同种类的文 ...

  2. 查找技术:有序表的对分查找(折半查找)类

    一 查找技术相关总结: 1.顺序查找:(1)如果线性表为无序表(即表中元素的排序是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找:(2)即使是有序线性表,如果采用链式存储结构,也只能 ...

  3. 惠普新笔记本将采用Tile查找技术,可智能定位笔记本电脑

    全球领先的智能定位公司Tile与惠普正使用Tile的查找技术引入其他PC设备,以使千百万人可以安心地居家工作或准备返回办公室.从今天开始,惠普深受欢迎的EliteBook 800 G8系列(包括x36 ...

  4. 数据结构笔记 第六章 查找技术

    查找技术 在计算机科学中定义为:在一些(有序的/无序的)数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程叫做查找.也就是根据给定的某个值,在查找表中确定一个关键字等于给定值的记录或数据元 ...

  5. 数据处理技术——查找技术

    查找 查找的基本概念 线性表的查找 顺序查找(线性查找) 折半查找(二分或对分查找) 分块查找(索引顺序表查找) 总结 树表的查找 二叉排序树(二叉搜索树.二叉排序树) 基础知识 查找 插入 生成 删 ...

  6. mysql学习笔记 查找技术 1207 0311

    # 查看学生表 SELECT * FROM student;# 查分数等于200分的学生 SELECT * FROM student WHERE score = 200;# 查询分数不等于200的所有 ...

  7. mysql 查找相似数据_局部敏感哈希LSH(Locality-Sensitive Hashing)——海量数据相似性查找技术...

    一. 前言 最近在工作中需要对海量数据进行相似性查找,即对微博全量用户进行关注相似度计算,计算得到每个用户关注相似度最高的TOP-N个用户,首先想到的是利用简单的协同过滤,先定义相似性度量(cos,P ...

  8. 20176408李俊 线性表

    线性表 简称表,是n(n≥0)个具有相同类型的数据元素的有限序列. 线性表的长度:线性表中数据元素的个数. 空表:长度等于零的线性表,记为:L=( ). 非空表记为:L=(a1, a2 , -, ai ...

  9. java记事本查找_记事本的查找技术

    首先你会将记事本的外观都做好.文本区域推荐使用JTextArea.假如这个文本的变量命名为jTextArea.接下来我开始写算法了.建立一个类FindMethod,专门用来计算查找的算法. publi ...

最新文章

  1. 高德拉特难题:悬赏5000美金的一道作业排序问题
  2. 河北省往届高考成绩查询2021,2021河北高考成绩查询时间 高考成绩查询入口
  3. chmod 777命令_linux常用命令
  4. 弹窗在大屏上居中对齐,在小屏上被挡住解决方案
  5. python字符串转date,在Python上将字符串转换为Date类型
  6. python制作远程桌面控制_Python 远程桌面协议RDPY简介
  7. 模拟黑洞图像_黑洞“真容”今晚将被公布,先马约你一起见证~
  8. Bailian2796 Bailian3681 数字求和【入门】
  9. grafana安装配置 influxdb安装配置
  10. 使用虚拟机搭建ClouderaManager平台,并自动部署一个hadoop集群(CDH)
  11. 环境影响评价期末考试题库
  12. 富士施乐Fuji Xerox DocuPrint M255 z 驱动
  13. java程序员怎么创建自己的网站:第四章:做个网站引入广告赚点小钱
  14. Apache Geronimo 监控
  15. python优点是代码库支持、灵活_Google将限制Python语言的应用 开发社区热议
  16. 声音信号 dB 及 dBA 的计算方式
  17. Confluence 查看文档乱码问题
  18. PLC:学习笔记(西门子)3
  19. 企业微信聊天框中点击自建应用获取当前聊天外部联系人userid,wx.agentConfig调用
  20. python与建筑行业_Python+AI+CC,这些建模“高级功能”,90%的人不知道

热门文章

  1. 凯文·米特尼克 安全建议 十条经验
  2. Vue3 _ 11. Vue 生命周期 生命周期狗子
  3. 高德地图加载多个围栏、行政区查询方法
  4. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 Standard NLP tasks with specific vocabulary
  5. mysql 百亿级_ES实现百亿级数据实时分析实战案例
  6. 基于STM32超声波风速风向测量仪
  7. binlog事件类型详解
  8. scrapy-splash安装使用
  9. python 高斯白噪声-python高斯白噪声
  10. mysql数据库怎么查看端口号_怎么查看数据库端口号(mysql怎么查看端口号)