各种查找算法的效率分析

各种查找算法的效率

  1. 顺序查找
    • 一般顺序表(没有顺序,随机排列)
      • 成功时平均查找长度: 1 + . . . + n n = n + 1 2 \frac{1+...+n}{n}=\frac{n+1}{2} n1+...+n=2n+1
      • 失败时平均查找长度: n n n
    • 有序顺序表(按照递增或递减排列)
      在这里插入图片描述
      • 成功时平均查找长度: 1 + . . . + n n = n + 1 2 \frac{1+...+n}{n}=\frac{n+1}{2} n1+...+n=2n+1
      • 失败时平均查找长度: 1 + 2 + . . . + n + n n + 1 = n 2 + n n + 1 \frac{1+2+...+n+n}{n+1}=\frac{n}{2}+\frac{n}{n+1} n+11+2+...+n+n=2n+n+1n
  2. 折半查找(二分查找)
    • 用折半查找法找到给定值的比较次数不会超过树的高度(n个元素的树高为 ⌈ l o g 2 ( n + 1 ) ⌉ \lceil log_2(n+1)\rceil log2(n+1)⌉
    • 成功时的平均查找长度: A S L = 1 n ( 1 × 1 + 2 × 2 + 3 × 4 + . . . + h × 2 h − 1 = n + 1 n l o g 2 ( n + 1 ) − 1 ≈ l o g 2 ( n + 1 ) − 1 ASL=\frac{1}{n}(1\times 1+2\times 2+3\times 4+...+h\times 2^{h-1}=\frac{n+1}{n}log_2(n+1)-1\approx log_2(n+1)-1 ASL=n1(1×1+2×2+3×4+...+h×2h1=nn+1log2(n+1)1log2(n+1)1
    • 折半查找的时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2n)
  3. 分块查找(索引顺序查找)
    • 平均查找长度: A S L = L I + L S ASL=L_I+L_S ASL=LI+LS L I L_I LI为索引查找的平均查找长度, L S L_S LS为块内查找的平均查找长度)
      • 如将长度为n的查找表均匀地分成b块,每块有s个记录,在等概率情况下,若在块内和索引表中均采用顺序查找,则平均查找长度为 A S L = L I + L S = b + 1 2 + s + 1 2 = s 2 + 2 s + n 2 s ASL=L_I+L_S=\frac{b+1}{2}+\frac{s+1}{2}=\frac{s^2+2s+n}{2s} ASL=LI+LS=2b+1+2s+1=2ss2+2s+n。可见若 s = n s=\sqrt{n} s=n ,则平均查找长度取最小值 n + 1 \sqrt{n}+1 n +1
  4. 树型查找
    • 二叉排序树(主要取决于树的高度)
      • 若二叉排序树的左右子树高度之差不超过1(即平衡二叉树),则平均查找长度为 O ( l o g 2 n ) O(log_2{n}) O(log2n)
      • 若二叉排序树是一个只有左(右)孩子的单支树,则平均查找长度为 O ( n ) O(n) O(n)
    • 平衡二叉树(查找过程与二叉排序树相同)
      • 平均查找长度为 O ( l o g 2 n ) O(log_2n) O(log2n)
        • 因为含有n个节点的平衡二叉树的最大深度为 O ( l o g 2 n ) O(log_2n) O(log2n)
    • 红黑树
      • 平均查找长度为 O ( l o g 2 n ) O(log_2n) O(log2n)
    • B树和B+树
      请添加图片描述
      请添加图片描述
  5. 散列表
    虽然散列表在关键字与记录的存储位置之间建立了直接映像,但由于冲突的产生,使得散列表的查找过程仍然是一个给定值和关键字进行比较的过程。因此仍需以平均查找长度作为衡量散列表的查找效率的度量。
    散列表的查找效率取决于三个因素:散列函数、冲突处理的方法和装填因子。
    直观的看, α \alpha α越大,表示装填的记录越满,发生冲突的可能性越大。

折半查找(二分查找)与二叉排序树的区别

二叉排序树与二分查找(折半查找)的查找过程相似,平均时间性能差不多。不同点如下:

  1. 唯一性:二分查找的判定树唯一,而二叉排序树随着关键字插入顺序不同可能生成不同的二叉排序树
  2. 插入和删除:二分查找的对象是有序顺序表,若有插入和删除节点的操作,所花的代价是 O ( n ) O(n) O(n);二叉排序树则无需移动节点,只需修改指针即可完成插入和删除操作
  3. 适用于动态还是静态:当有序表是静态查找表时,宜用顺序表作为其存储结构,采用二分查找实现找操作;若有序表是动态查找表,应选择二叉排序树作为其逻辑结构

平衡二叉树和红黑树的区别

二者的查、插、删的时间复杂度都是 O ( l o g 2 n ) O(log_2n) O(log2n),区别如下:

  1. 平衡二叉树的插入和删除很容易破坏平衡特性,故插/删后大都需要调整树的形态(计算平衡因子+找到最小不平衡树+LL/RR/LR/RL),这样一来时间开销就很大;而红黑树由于其特性,很多时候插入删除后并不会破坏红黑特性,即便需要调整一般也都可以在常数级时间内完成
  2. 即虽然二者的插、删、查的时间复杂度都是 O ( l o g 2 n ) O(log_2n) O(log2n),但实际上红黑树的插入和删除性能更好一点,平衡二叉树的查找性能更好一点
  3. 使用场景:平衡二叉树适用于以查为主、很少插入/删除的场景;红黑树适用于频繁插入、删除的场景,实用性更强

B树和B+树的区别

二者相同点是:除根节点外,最少 ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil 2m个分叉(确保节点不要太空)。任何一个节点的子树都要一样高(确保绝对平衡)

-m阶B树m阶B+树
类比二叉查找树的进化 --> m叉查找树分块查找的进化 --> 多级分块查找
关键字与分叉n个关键字对应n+1个分叉(子树)n个关键字对应n个分叉
节点包含的信息所有节点中都包含记录的信息只有最下层叶子节点才包含记录的信息(每个节点能存的信息更多,因此可以使树更矮),且叶节点包含所有的关键字
查找方式不支持顺序查找。查找成功时,可能停在任何一层节点,查找速度不稳定支持顺序查找。查找成功或失败都会到达最下一层节点,查找速度稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/29381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【office】world设置标题

这里写目录标题 一、整理样式库二、设置标题编号三、设置标题其它信息1.设置 标题 1a.设置字体b.设置边框c.设置段落 2.设置 标题 2a.设置字体b.设置边框 3.设置 标题 3a.设置字体b.设置边框 4.设置 标题 4a.设置字体 5.设置 标题 5a.设置字体 一、整理样式库 1.选择“开始” …

Java数据类型,一文带你彻底拿捏~

——Java中运算符是一种特殊的符号,用来进行数据的运算、赋值和比较等 思维导图 一.算术运算符 1.什么是算术运算符 ——算术运算符是用于数据类型值之间,使用2个或以上的数据进行运算 2.算术运算符概括 算术运算符 解释示例,-正号&…

TypeScript 泛型的概念和基本使用

什么是TypeScript 泛型? 在定义函数,接口,类的时候不能预先确定使用的数据类型,而是在调用使用这些函数,接口,类的时候才能确定的数据类型; 1,单个泛型的参数 例如通过使用any这种…

自动化干货!一文搞懂Salesforce Flow/流中的Pause元素

通过自动化,帮助团队提升效率,将员工从那些重复、枯燥、耗时的工作中解放出来,转而从事更具创造性、更有价值的工作,是很多企业数字化转型朴素而又迫切的需求,也是世界No.1 CRM——Salesforce的一大领先优势。 Flow B…

【element-ui】 el-table 表格动态合并相同数据单元格最全教程,可指定列+自定义合并条件,附完整代码

el-table合并单元格 1.固定合并 官方挺提供的合并具体某行列的方法:el-table合并行或列通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。 该函数可以返回一个包含…

Docker实战-如何去访问Docker仓库?

导语   仓库在之前的分享中我们介绍过,它主要的作用就是用来存放镜像文件,又可以分为是公共的仓库和私有仓库。有点类似于Maven的中央仓库和公司内部私服。 下面我们就来介绍一下在Docker中如何去访问各种仓库。 Docker Hub 公共镜像仓库 Docker Hub 是Docker官方提供的最…

【Qt高级】QThread与QTimer组合使用引出的信号槽执行在哪个线程的思考【2023.08.06】

源码见 testQThread_QTimer… Qt 版本5.6.3 视频讲解:https://www.bilibili.com/video/BV15P411C79i/ 链接: 视频讲解 简介 想法很单纯,就是主线程启动一个子线程,子线程里启动一个定时器,定时执行一些任务,然鹅实际开…

Yolov5缺陷检测/目标检测 Jetson nx部署Triton server

使用AI目标检测进行缺陷检测时,部署到Jetson上即小巧算力还高,将训练好的模型转为tensorRT再部署到Jetson 上供http或GRPC调用。1 Jetson nx 刷机 找个ubuntu 系统NVIDIA官网下载安装Jetson 的sdkmanager一步步刷机即可。 本文刷的是JetPack 5.1, 其中包…

Oracle日志相关操作

1.归档日志设置 # 切换账号 $ su - oracle# 登录oracle的sys账户 $ sqlplus / as sysdbasql> archive log list; #查看是不是归档方式 SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destin…

【Windows】Windows开机密码重置

文章目录 前言一、问题描述二、操作步骤2.1 安装DaBaiCai_d14_v6.0_2207_Online.exe2.2 插入U盘2.3 打开大白菜,点击“一键制作USB启动盘”2.4 等待进度条走完2.5 重启电脑,开机按“F12”或者“F8”(具体百度一下,对应品牌电脑开机…

笔试数据结构选填题

目录 卡特兰数Catalan:出栈序列/二叉树数 树 二叉树 N01N2 哈夫曼树(最优二叉树)Huffman 度m的哈夫曼树只有度为0和m的结点:Nm(n-1)/(m-1) 平衡二叉树AVL Nh表示深度为h最少结点数,则N00,N11&#…

网络防御(7)

课堂实验 R1 [Huawei] int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 100.1.12.2 24 protocolAug 1 2023 10:24:09-08:00 Huawei gOlIFNET/4/LINK STATE(1)[4]:The1ineIp on the interface GigabitEthernet0/0/0 has entered the Up state. [Huawei-GigabitEthernet0/0/…

SpringBoot 底层机制分析【Tomcat 启动+Spring 容器初始化+Tomcat 如何关联Spring 容器】【下】

😀前言 本篇博文是关于SpringBoot 底层机制分析实现,希望能够帮助你更好的了解SpringBoot 😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大…

Linux 查找某个目录下所有文件中是否含有某些字符串

使用如下命令进行查找: find . -name "*" | xargs grep -n --color "hello"查找当前目录下所有文件,找出含有字符串 “hello” 的文件并显示行号。 在~/.bashrc 中添加如下函数: function finds(){if [ -z $1 ];thene…

Leetcode.1559 二维网格图中探测环

题目链接 Leetcode.1559 二维网格图中探测环 rating : 1838 题目描述 给你一个二维字符网格数组 g r i d grid grid ,大小为 m x n ,你需要检查 g r i d grid grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于…

lc137. 只出现一次的数字 II

数组排序,既和前不一样又和后不一样的就是唯一的一个 public static int numberOnce(int[] nums) {Arrays.sort(nums);if (nums.length > 2 && nums[0] ! nums[1]) {//避免只有一个元素的数组return nums[0];}if (nums.length > 2 && nums[nu…

PPTP应用案例:让你的网络不再受限

嗨,小伙伴们,作为一家专业的PPTP代理供应商,我们深知网络安全对于每个人的重要性。今天,我将与大家分享一些关于PPTP的应用案例,借此帮助大家更好地了解PPTP的实际应用和专业性。无论你是在公共Wi-Fi上冲浪&#xff0c…

使用MyBatis操作数据库

hi,大家好,今天为大家带来MyBatis操作数据库的知识 文章目录 🐷1.根据MyBatis操作数据库🧊1.1查询操作🍇1.1.1无参查询🍇1.1.2有参查询 🧊1.2删除操作🧊1.3修改操作🧊1.4增加操作🧊…

Windows 安装 pandoc 将 jupyter 导出 pdf 文件

Windows 安装 pandoc 将 jupyter 导出 pdf 文件 1. 下载 pandoc 安装文件2. 安装 pandoc3. 安装 nbconvert4. 使用 pandoc 1. 下载 pandoc 安装文件 访问 https://github.com/jgm/pandoc/releases,下载最新版安装文件,例如,3.1.6.1 版&#…

【Redis面试题整理一】

一、Redis定义 Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,读写速度非常快,被广泛应用于缓存方向。并且,Redis 存储的是 KV 键值对数据。 二、Redis为什么不存在并发竞争 对数据类型的操作都是原子性的&a…