学习笔记--数据结构与算法基础(青岛大学-王卓)--第七章查找算法

简介: 学习笔记--数据结构与算法基础(青岛大学-王卓)--第七章查找算法

视频链接
在这里插入图片描述
数据结构与算法基础(青岛大学-王卓)--第七章查找

本章知识框架
在这里插入图片描述

1.查找的基本概念

  • 什么是查找表?

在这里插入图片描述

  • 什么是关键字

在这里插入图片描述

  • 什么是查找

在这里插入图片描述

  • 查找是否成功?

  • 查找的目的?

在这里插入图片描述

  • 查找的分类

在这里插入图片描述

  • 如何评价查找算法

在这里插入图片描述

  • 查找过程中我们需要研究什么?

在这里插入图片描述

2.线性表的查找

对于这一部分,该视频讲解了顺序查找(线性查找),折半查找(二分或对分查找)和分块查找这三类查找。
在这里插入图片描述

顺序查找(线性查找)
在这里插入图片描述

  • 顺序查找

在这里插入图片描述
算法1:在这里插入图片描述
算法2:
在这里插入图片描述
算法3:
在这里插入图片描述

算法改进:

把待查关键字key存入表头(“哨兵”、”监视哨”),从后往前逐个比较,可免去查找过程中每一步都要检测是否查找完毕,加快速度。

在这里插入图片描述
在这里插入图片描述
对改进算法的时间效率进行分析:
在这里插入图片描述
在这里插入图片描述

顺序查找的特点:
在这里插入图片描述

折半查找(二分或对分查找【查找表必须是有序表】)
什么是折半查找:
在这里插入图片描述
非递归算法:
在这里插入图片描述
在这里插入图片描述
递归算法:

int Search Bin(SSTable ST, KeyType key,int low ,int high){
    if(low > high) return 0;
    mid = (low + high)/2;
    if(key == ST.elem[mid].key) return mid;
    else if(key < ST.elem[mid].key)
        high = mid - 1;
    else
        low = mid + 1;
    Bin(ST,key,low,high);
}

折半查找的性能分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分块查找(索引顺序查找)
分块查找:
下面查38,先选择块(38大于22并且小于48所以在索引表序号7开始的块中即第二块),再从块内进行查找(通过顺序查找,即可找到38位于序号10)
在这里插入图片描述
分块查找性能分析:
在这里插入图片描述
分块查找优缺点:
在这里插入图片描述
顺序,折半和分块查找的方法比较

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/d25381a023c54f04b2ed7f2102ccd384.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Zif5Zif55qE56iL5bqP5ZGY6ZOy5bGO5a6Y,size_15,color_FFFFFF,t_70,g_se,x_16)

3.树表的查找

动态查找表:表结构在查找过程中动态生成
在这里插入图片描述

  • 二叉排序树
  • 平衡二叉树
  • 红黑树
  • B-树
  • B+树
  • 建树

二叉排序树

  • 什么是二叉排序树

在这里插入图片描述
二叉排序树
在这里插入图片描述
非二叉排序树
在这里插入图片描述

  • 二叉排序树的性质

中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排列的递增有序序列。

在这里插入图片描述
中序遍历二叉排序树
在这里插入图片描述

  • 二叉排序树查找操作

在这里插入图片描述
查找105,过程红色箭头
在这里插入图片描述
二叉排序树的存储结构
在这里插入图片描述
二叉排序树算法思想
在这里插入图片描述
算法代码描述:
在这里插入图片描述

  • 二叉排序树的查找分析

在这里插入图片描述
二叉排序树的平均查找长度:
在这里插入图片描述
最好情况和最坏情况:
含有n个结点的二叉排序树的平均查找长度和树的形态有关
在这里插入图片描述

  • 二叉排序树的插入操作

在这里插入图片描述
如果插入的结点为叶子结点
在这里插入图片描述
二叉排序树的生成
在这里插入图片描述
例子1:
在这里插入图片描述
在这里插入图片描述
关键字的输入顺序不同,建立的不同二叉排序树:
在这里插入图片描述

  • 二叉排序树删除操作

在这里插入图片描述
(1)被删除的结点是叶子结点:直接删去该结点。
在这里插入图片描述
在这里插入图片描述
(2)被删除的结点只有左子树或者只有右子树,用其左子树或者右子树替换它(结点替换)。
在这里插入图片描述
在这里插入图片描述
(3)被删除的结点既有左子树,也有右子树
在这里插入图片描述在这里插入图片描述
例子:
在这里插入图片描述

  • 平衡二叉树

在这里插入图片描述
什么是平衡二叉树?
在这里插入图片描述
什么是平衡因子?
根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能是-1、0,或1
在这里插入图片描述
例子1(是一个平衡二叉树):
下图是结点为40的平衡因子计算过程:
在这里插入图片描述
在这里插入图片描述
例子2:
在这里插入图片描述
在这里插入图片描述

  • 失衡二叉排序树的分析和调整

在这里插入图片描述
平衡调整的四种类型:
在这里插入图片描述
调整(调整原则:1.降低高度;2.保持二叉排序树性质):
在这里插入图片描述
LL型调整:
在这里插入图片描述
在这里插入图片描述
例子:
在这里插入图片描述
RR型调整:
在这里插入图片描述
在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述
LR型:
在这里插入图片描述
在这里插入图片描述
例子:
在这里插入图片描述
RL型:
在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述

4.哈希表的查找

  • 散列表(哈希表)的基本概念

在这里插入图片描述
例1:
在这里插入图片描述
例2:
在这里插入图片描述
在这里插入图片描述
散列表:
在这里插入图片描述
散列表的优缺点:
在这里插入图片描述
散列方法:
在这里插入图片描述
冲突:
在这里插入图片描述

  • 构造散列函数

使用散列表要解决好二个问题
在这里插入图片描述
构造散列函数考虑的因素:
在这里插入图片描述
构造的要求和相关构造方法:
在这里插入图片描述
直接定址法(一个x对应唯一的Y值):
在这里插入图片描述
除留余数法:
在这里插入图片描述

  • 处理冲突的方法

在这里插入图片描述
开放定址法(开地址法)
在这里插入图片描述
线性探测法:
在这里插入图片描述
例子:
在这里插入图片描述
二次探测法:
在这里插入图片描述
伪随机探测法:
在这里插入图片描述

链地址法(拉链法)
在这里插入图片描述
链地址法建立散列表步骤:
在这里插入图片描述
链地址法的优点:
在这里插入图片描述

  • 散列表的查找

在这里插入图片描述
例子1(线性探测法):
在这里插入图片描述
例子2(链地址法):
在这里插入图片描述

  • 散列表的查找效率

在这里插入图片描述
在这里插入图片描述

相关文章
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
1238 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
731 1
|
9月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
588 1
|
9月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
248 0
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
538 153
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
524 30
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
785 25
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
891 23
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
644 3
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
785 23

热门文章

最新文章