CH7-查找

2023-11-19


20220119161235

1.查找的基本概念

20220119161446

20220119161620

20220119161653

20220119161749

20220119161921

20220119162119

20220119162249

2. 线性表的查找

2.1 顺序查找(线性查找)

【算法2.1.0】类型定义

20220119162748
typedef struct {//数据元素类型定义
	KeyType key;//关键字域
	...			//其他域
}ElemType;

typedef struct {	//顺序表结构类型定义
	ElemType *R;	//表基址
	int length;		//表长
}SSTable;			//Sequential Search Table
SSTable ST;			//定义顺序表ST

【算法2.1.1】顺序查找

20220119164034

int Search_Seq( SSTable ST , KeyType key ){//若成功返回其位置信息,否则返回0
    for( i=ST.length; i>=1; --i )
		if ( ST.R[ i ].key==key ) return i;
    return o;
}

int Search_Seq(SSTable ST,KeyType key) {
	for (i = ST.length ; ST.R[i].key != key ; --i )
		if ( i <= 0) break ;
	if (i > 0) return i ;
    else return 0 ;
}
int Search_Seq(SSTable ST,KeyType key){
	for (i = ST.length ; ST.R[i].key != key && i>0 ; --i );
    if (i > 0) return i;
	else return 0 ;
}

【算法2.1.2】改进后的顺序查找

20220119164536

int Search_Seq( SSTable ST , KeyType key ){
	ST.R[O].key =key;
	for( i=ST.length; ST.R[i].key!=key; --i)
	return i;
}

20220119164744

性能分析

20220120083143

20220120083355

20220120083546

20220120083859

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

20220120090110

20220120090158

【算法2.2.1】非递归算法

int Search_Bin ( SSTable ST,KeyType key ) {
    low = 1 ; high = ST.length ;	//置区间初值
    while (low <= high) {
        mid = (low + high)/ 2 ;
        if (ST.R[mid].key == key) 
            return mid ;	//找到待查元素
        else if (key <ST.R[mid].key)			//缩小查找区间
            high=mid-1;							//继续在前半区间查找
        else low = mid + 1;						//继续在后半区间查找
    }
    return 0 ;			//顺序表中不存在待查元素
}// Search_Bin

【算法2.2.2】递归算法

int Search_Bin (SSTable ST, keyType key, int low, int high) {
    if(low>high)
        return 0;	//查找不到时返回0
    mid=(low+high)/2;
    if(key==ST.elem[mid].key) 
        return mid;
    else if(key<ST.elem[mid].key)
        Search_Bin(ST,key,low,mid);
    else 
        Search_Bin(ST,key,mid,high);
}

性能分析

20220120091521

20220120091632

20220120091706

20220120092429

2.3 分块查找

20220120092515

性能分析

20220120092822

20220120092837

20220120092948

3. 树表的查找

20220120093216

3.1 二叉排序树

20220120093302

20220120093504

20220120093546

20220120100705

【算法3.1.0】类型定义

typedef struct {
    KeyType key;	//关键字项
    InfoType otherinfo;//其他数据域
}ElemType;

typedef struct BSTNode {
    ElemType data;	//数据域
    struct BSTNode *lchild,*rchild;	//左右孩子指针
}BSTNode,*BSTree;
BSTree T;//定义二叉排序树T

【算法3.1.1】递归查找

20220120102007

BSTree SearchBST(BSTree T,KeyType key) {
    if((T) || key==T->data.key) return T;
    else if (key<T->data.key)
    	return SearchBST(T->Ichild,key);//在左子树中继续查找
    else 
        return SearchBST(T->rchild,key);//在右子树中继续查找
}// SearchBST

性能分析

20220120102640

20220120102721

20220120103304

20220120103350

插入

20220120103457

20220120103618

生成

20220120103721

20220120103758

20220120103841

删除

20220120104012

20220120104034

20220120104114

20220120104205

20220120104329

3.2 平衡二叉树

20220120104456

20220120104611

20220120104659

20220120104827

分析与调整

20220120104955

20220120105052

20220120105156

LL型调整

20220120105234

20220120105330

20220120105432

RR型调整

20220120105516

20220120105546

20220120105757

20220120105702

LR型调整

20220120105836

20220120105900

20220120105926

RL型调整

20220120110005

20220120110100

20220120110124

例题

20220120111157

20220120111239

20220120111316

20220120111412

20220120111519

20220120111018

4. 哈希表的查找

20220120112104

20220120112154

20220120112248

20220120112316

4.1 基本术语

20220120112417

20220120112514

20220120112632

4.2 散列函数构造方法

20220120112743

20220120112927

20220120113011

20220120113102

直接定址法

20220120113235

除留余数法

20220120113315

4.3 处理冲突

20220120113349

开放定址法(开地址法)

20220120113908

20220120113938

20220120114058

20220120114120

20220120114501

20220120114615

链地址法(拉链法)

20220120114838

20220120115006

20220120115134

4.4 散列表查找

20220120115333

20220120115530

20220120115742

20220120115926

20220120120044

20220120120119

20220120120205

存中…(img-3YYHv8O1-1642651437063)]

[外链图片转存中…(img-xJkp7FIE-1642651437063)]

[外链图片转存中…(img-jdamQ6od-1642651437063)]

[外链图片转存中…(img-OiZ0F4JV-1642651437064)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CH7-查找 的相关文章

  • 【leetcode】----102二叉树的层序遍历

    102二叉树的层序遍历 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 返回其层次遍历结果 3 9 20 15 7 BF
  • 二叉排序树的基本操作

    二叉排序树的应用 利用二叉链表存储二叉排序树 输入一组任意序列 实现二叉排序树的创建 插入 删除 中序遍历 要求 有菜单进行选择 安排 2020 6 4 晴朗 二叉排序树的基本定义 1 左子树的所有节点小于根节点 2 若右子树非空 则右子树
  • LeetCodes刷题总结1——寻找两个正序数组的中位数

    题目 给定两个大小分别为 m 和 n 的正序 从小到大 数组 nums1 和 nums2 请你找出并返回这两个正序数组的 中位数 算法的时间复杂度应该为 O log m n 示例1 输入 nums1 1 3 nums2 2 输出 2 000
  • java实现赫夫曼树以及赫夫曼编码和解码(用byte[])

    首先对于赫夫曼编码有个大概的理解 赫夫曼编码 Huffman Coding 又称霍夫曼编码 是一种编码方式 可变字长编码 VLC 的一种 Huffman于1952年提出一种编码方法 该方法完全依据字符出现概率来构造异字头的平均长度最短的码字
  • 二叉排序树与平衡二叉树(BST&AVLT)

    平衡二叉树的一些操作 平衡二叉树相对于二叉排序树来说是二叉排序树的一个优化版 避免了二叉排序树中的极端情况 想更好的理解还是要结合图片自己动手做做QwQ 这里写的是双平衡 双旋转版 并非LL RR LR RL四种特殊情况单独处理 平衡二叉树
  • 哈希表以及用js封装一个哈希表

    最近在学数据结构和算法 正好将学习的东西记录下来 我是跟着一个b站博主学习的 是使用js来进行讲解的 待会也会在文章后面附上视频链接地址 大家想学习的可以去看看 本文主要讲解哈希表 其他数据结构后续学完也会持续更新 目录 一 什么是哈希表
  • 线索二叉树(中序、先序和后序及遍历)

    链式存储 线索二叉树是二叉树的一类 在看线索二叉树之前我们先看一下二叉树的链式存储 一个二叉树的存储例子 后面用到的二叉树都是这棵 代码是这样的 public class BinaryTreeNode
  • (Java)leetcode-979 Distribute Coins in Binary Tree(在二叉树中分配硬币)

    题目描述 给定一个有 N 个结点的二叉树的根结点 root 树中的每个结点上都对应有 node val 枚硬币 并且总共有 N 枚硬币 在一次移动中 我们可以选择两个相邻的结点 然后将一枚硬币从其中一个结点移动到另一个结点 移动可以是从父结
  • Aggressive cows-疯牛POJ(2456)-详解

    描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000 000 但是 John的C 2 lt C lt N 头牛们并不喜欢这
  • (Java)leetcode-236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先)

    题目描述 给定一个二叉树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的
  • 【数据结构】树与二叉树总结(一)

    数据结构 树与二叉树的总结 一 1 AVL树 动态平衡二叉树 树表的查找 2 哈夫曼树 二叉树的应用 3 树 树与二叉树的转换 4 分裂树 5 S K R 注 K为结点 R为关系 一 树 定义 n n gt 0 个结点构成的有限集合 当n
  • 【数据结构】&&【C++】平衡搜索二叉树的模拟实现(AVL树)

    数据结构 C 平衡搜索二叉树的模拟实现 AVL树 一 AVL树的性质 二 AVL树的模拟实现 AVL树结点的定义 AVL树的插入 平衡因子的更新 左单旋 右单旋 双旋 左右旋 右左旋 AVL树的删除 检查是否是AVL树 三 完整代码 一 A
  • 二叉树交换左右子树的三种实现方式

    二叉树交换左右子树的三种实现方式 顺序存储结构 链式存储结构 顺序存储结构 交换左右子树实际上就是同层之间交换位置 在顺序存储结构下 先确定树的深度 再划分层 每个层内做交换即可 链式存储结构 递归实现很简单 非递归可以借助栈或队列辅助实现
  • Java的扩容机制

    类别 初始容量 扩容方式 最大容量 HashMap 16 达到0 75就乘2 2的30次方 HashSet 16 达到0 75就乘2 2的30次方 Hashtable 11 达到0 75就乘2 1 Integer MAX VALUE 8 A
  • 算法训练营第六天(7.17)

    目录 unordered map LeeCode242 Valid Anagram 梦的开始 LeeCode1 Two Sum unordered set LeeCode349 Intersection of Two Arrays LeeC
  • CH7-查找

    文章目录 1 查找的基本概念 2 线性表的查找 2 1 顺序查找 线性查找 算法2 1 0 类型定义 算法2 1 1 顺序查找 算法2 1 2 改进后的顺序查找 性能分析 2 2 折半查找 二分或对分查找 算法2 2 1 非递归算法 算法2
  • [共同学习] 平衡二叉树浅见

    平衡二叉树 平衡二叉树的概念 AVL树结点的定义 AVL树的插入 左左 右单旋 右右 左单旋 左右 先左旋 再右旋 右左 先右旋 再左旋 AVL树的验证 验证其为二叉搜索树 验证其为平衡树 AVL树的性能 AVL树的实现 感悟 以上 二叉搜
  • 数据结构--二叉树的二叉链表实现

    1 二叉树的二叉链表示意图 二叉链表的每个结点由三个域组成 数据域 左指针域和右指针域 左右指针分别用来保存左右孩子结点的存储地址 2 二叉链表实现二叉树 2 1 头文件及其定义 BTNode h pragma once typedef c
  • 二叉树的递归遍历、非递归遍历、层次遍历

    1 递归遍历 2 非递归遍历 3 层次遍历 1 递归遍历 在使用递归遍历的时候 每个节点会经过三次 public class PreInPosTraversal public static class Node public int val
  • 【LeetCode:162. 寻找峰值 | 二分】

    算法题 算法刷题专栏 面试必备算法 面试高频算法 越难的东西 越要努力坚持 因为它具有很高的价值 算法就是这样 作者简介 硕风和炜 CSDN Java领域新星创作者 保研 国家奖学金 高中学习JAVA 大学完善JAVA开发技术栈 面试刷题

随机推荐

  • 位移运算使用技巧

    位移运算使用技巧 左位移 lt lt 右位移 gt gt 左位移 lt lt 将二进制数向左位移操作 高位溢出则丢弃 地位补0 int a 11 int b a lt lt 1 b 22 位移前 0000 1011 位移后 0001 011
  • 达芬奇传

    列奥纳多 迪 皮耶罗 达 芬奇 出生于1452年 1519年逝世 享年67岁 画家 发明家 科学家 生物学家 工程师 达 芬奇的意思是 来自芬奇镇 他的名字叫做列奥纳多 达 芬奇的父亲叫瑟 皮耶罗 达 芬奇 是佛罗伦萨的法律公证员 因此十分
  • git:批处理启动Git-Bash窗口并显示特定目录

    参考 使用批处理脚本 在特定目录中启动Git Bash窗口
  • 【数据结构】复杂度

    博客主页 小王又困了 系列专栏 数据结构 人之为学 不日近则日退 感谢大家点赞 收藏 评论 目录 一 什么是数据结构 二 什么是算法 三 算法的效率 四 时间复杂度 4 1大O渐进表示法 4 2常见时间复杂度计算举例 4 3例题 消失的数字
  • StarkNet 批量交互 mint 铸造 js 脚本

    代码使用 starknet 模块与 StarkNet 网络进行交互 通过读取私钥文件和执行铸造操作来创建 NFT 非同质化代币 它通过批量运行的方式处理多个私钥和地址对 并将结果输出到控制台和日志文件中 代码的详细步骤 导入模块和变量 co
  • QT5串口编程----线程循环发送不成功问题

    今天想写一个QT5的串口编程 能够循环发送数据 想具体到us级别 不需要设置ms发送 所以想用一个线程一直发送 关键问题是碰到在线程循环发送竟然发不出去 见鬼了 最后找到问题是要在每次发送后要判断waitForBytesWritten是否发
  • jmeter接口测试,CSV数据文件引用,参数化

    1 新增一个Excel文件 填写会用到的变量数据 2 将文件保存为CSV格式文件 3 在jmeter里添加 CSV数据文件配置 导入登录的用户和密码数据等信息 在jmeter里引用Excel转化的CSV格式数据文件 说明 带入的数据依次是
  • RTKLIB源码解析(一)、单点定位(pntpos.c)

    目录 pntpos satposs estpos raim fde estvel ephclk satpos satsys seleph eph2clk ephpos eph2pos rescode lsq valsol matmul do
  • 计算机视觉入门之构建一个扫描仪

    源代码 import the necessary packages from transform import four point transform from skimage filters import threshold local
  • tengine [emerg] invalid IPv6 address in resolver “[fe80::1%enp2s0]“ in .../nginx.conf:137

    错误 nginx emerg invalid IPv6 address in resolver fe80 1 enp2s0 in usr local nginx conf nginx conf 137 解决 1 vim etc resolv
  • kafka(三)重平衡

    历史文章 kafka 一 kafka的基础与常用配置 文章目录 一 kafka消费者组 二 重平衡 Rebalance 2 1 重平衡触发条件 2 2 重平衡策略 2 2 1 Range 平均分配 2 2 2 RoundRobin 轮询分配
  • 独家

    作者 Damir Yalalov 翻译 陈超 校对 赵茹萱 本文约1100字 建议阅读5分钟 本文介绍了ChatGPT如何解决简单的机器学习任务并给出了鸢尾花分类和城市预测两个案例 一句话概括 ChatGPT可以帮助你完成简单的机器学习任务
  • ldconfig: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

    libcuda so
  • 【宠粉福利】这次我们准备了 iPhone 12、AirPods Pro、罗技鼠标等大礼等你来领!...

    喜迎开学季 C 站开豪礼 最高可开 iphone 12 盲盒开出的不只是一份礼物 更是对于一切美好的期待 拆开一个盲盒 就像开始一场未知的爱丽丝梦游仙境 为 两点一线 朝九晚九 的生活 埋下一刻期待的种子 去收获一份未知的惊喜 这次 价格再
  • CentOS 7 关闭网络限制

    1 安装CentOS 7 3操作系统mini版本即可 2 设置关闭Selinux 编辑 etc selinux config vi etc selinux config SELINUX disabled 重启机器 查看selinux状态 s
  • C++中的namespace

    namespace中文意思是命名空间或者叫名字空间 传统的C 只有一个全局的namespace 但是由于现在的程序的规模越来越大 程序的分工越来越细 全局作用域变得越来越拥挤 每个人都可能使用相同的名字来实现不同的库 于是程序员在合并程序的
  • 手撕计算机网络——应用层(四):P2P

    前言 进入应用层学习也有了一段时间了 接下来的这篇文章中小荔枝会将应用层P2P结构体系于我们客户 端系统体系在分发文件中的机理进行整理 希望今天能结束应用层学习哈哈哈 运输层我来啦 目录 前言 一 P2P的自拓展性 二 BitTorrent
  • 【高德地图API】从零开始学高德JS API(八)——地址解析与逆地址解析

    摘要 无论是百度LBS开放平台 还是高德LBS开放平台 其调用量最高的接口 必然是定位 其次就是地址解析了 又称为地理编码 地址解析 就是将地址转换为经纬度 而逆地址解析 就是将经纬度转换为地址 经纬度一般是由专业测绘机构用GPS采集 然后
  • Shell——脚本执行命令和控制语句

    前言 在正常情况下 shell按顺序执行每一条语句 直至碰到文件尾 if选择结构示例 if后面紧跟判断条件 then后面是执行语句 fi是结束标志 多重if结构示例 case多选结构 通常用于在一系列模式中匹配某个变量的值 命令 只在cas
  • CH7-查找

    文章目录 1 查找的基本概念 2 线性表的查找 2 1 顺序查找 线性查找 算法2 1 0 类型定义 算法2 1 1 顺序查找 算法2 1 2 改进后的顺序查找 性能分析 2 2 折半查找 二分或对分查找 算法2 2 1 非递归算法 算法2