IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构第七章 查找 -> 正文阅读

[数据结构与算法]数据结构第七章 查找

目录

1 线性表的查找

顺序查找(线性查找)

顺序查找:?

顺序查找的特点:

折半查找(二分或对分查找)

折半查找算法:(非递归)

折半查找算法:(递归)

分块查找

查找方法比较?

2 树表的查找

二叉排序树

平衡二叉树

B-树

B+树

3 散列表的查找



基本概念

查找表:由同一类型的数据元素构成的集合。

关键字:用来标识一个数据元素的某项数据的值? ?主关键字 、次关键字

查找成功:给出记录信息或位置 、 查找不成功:给出空记录或空指针

平均查找长度ASL(Average Search Length) 期望值


查找的操作:

  1. 查询某个特定的数据元素是否在表中。(静态查找表)
  2. 检索某个特定的数据元素的各种属性。(静态查找表)
  3. 在查找表中插入一个数据元素。(动态查找表)
  4. 删除查找表中的某些元素。(动态查找表)

1 线性表的查找

  1. 顺序查找(线性查找)

应用范围:

  • 顺序表或线性链表表示的静态查找表
  • 表内元素无序

数据类型定义:

数据元素类型定义顺序表的定义

顺序查找:?

  

?从最后一个元素开始查找:

  

改进:把待查关键字key存入表头(哨兵、监视哨)

设置监视哨的顺序查找:

  

当ST较大时,改进能使进行一次查找所需平均时间几乎减少一半。

比较次数与key位置有关:

  • 查找第i个元素,需要比较n-i+1
  • 查找失败,需比较n+1

时间复杂度:O_{\left ( n \right )}

平均查找长度ASL:ASL = \frac{1}{n} \sum_{i=1}^{n} i=\frac{n+1}{2}

空间复杂度:一个辅助空间——O(1)


顺序查找的特点:

  • 优点:算法简单,逻辑次序无要求,且不同存储结构均适用。
  • 缺点:ASL太长,时间效率低。

  1. 折半查找(二分或对分查找)

折半查找:每次将待查记录所在区间缩小一半。

mid = (low + high) /? 2? ? ?中间位置的值

key<mid : high = mid -1? ?关键字的值比中间位置的值小

key>mid : high = mid +1? ?关键字的值比中间位置的值大

key == mid? 找到

high < low?? 结束

折半查找算法:(非递归)

  • 设表长为n,low、high、mid 分别指向代茶元素所在区间的上界、下界和中点,key为给定的要查找的值
  • 初始令? low=1,? high=n,? mid=(low+high)/2
  • 让k与mid指向的记录比较
  • 重复上述操作,直至high < low,查找失败
  

折半查找算法:(递归)

  

判定树

查找成功查找不成功
比较次数 = 路径上的结点数比较次数 = 路径上的内部结点数
比较次数 = 结点的层数比较次数 = 结点的层数
比较次数 ≤ 树的深度 = log2n+1比较次数 ≤ 树的深度 = log2n+1

平均查找长度ASL 【成功时】

ASL = \sum_{i=1}^{n} p_{i}c_{i}?

时间复杂度:O(logn)

  • 折半查找优点:效率比顺序查找高。
  • 折半查找缺点:只适用于有序表,且限于顺序存储结构。(对线性链表无效)?
  1. 分块查找

分块查找(Blocking Search) (索引顺序查找)

  1. 将表分成几块,且表有序,或者分块有序
  2. 建立索引表。(每个结点的最大关键字域和第一个结点的指针,且关键字有序)
  3. 先确定待查记录所在块(顺序或折半),再在块内查找。

平均查找长度ASL:

ASL =L_{b} + L_{w} = \frac{1}{2}\left [ \frac{n}{s}+s \right ]+1

?用折半查找确定块的分块查找ASL:

ASL \approx log_{2}\left [ \frac{n}{s}+1 \right ]+\frac{s}{2}

  • 优点:插入和删除比较容易,无需进行大量移动。
  • 缺点:要增加一个索引表的存储空间,并对初始索引表进行排序运算。
  • 使用情况:既要快速查找又经常动态变化的线性表

查找方法比较?

顺序查找折半查找分块查找
ASL最大最小中间
表结构有序表有序表分块有序
存储结构顺序表、线性链表顺序表顺序表、线性链表

?

2 树表的查找

  1. 二叉排序树

  2. 平衡二叉树

  3. B-树

  4. B+树

3 散列表的查找

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:32:05  更:2021-08-13 12:34:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:19:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码