线性查找与二分查找的平均查找次数的比较
*不讨论查找不成功的情况
*设一数组arr,长度为n(下列例子中,n 取具体值 100, 10000, 10000000)
线性查找(顺序查找)
在无序的数组中查找一指定值,必须遍历整个数组,直至查找成功,计算其平均查找次数也相当简单:
avg线性 = (1 + n) / 2
因在数组中,各个元素被查找的概率相等,最好的情况是第1个就是目标元素;最坏的情况是最后一个才是目标元素,就不得不遍历整个数组,平均查找次数是线性递增的:
n = 100,avg线性 = 50.5
n = 10000,avg线性 = 5000.5
n = 10000000,avg线性 = 5000000.5
二分查找
使用二分查找前,必须先保证数组有序,其每次先把目标元素与位于数组中间的值进行比较(假设数组升序),若目标元素较大(小),则舍弃位于数组中间的左(右)边部分,不再比较左(右)边,再使用二分查找比较剩余部分:
直至查找成功后停止。
二分查找的平均查找次数略微复杂:
avg二分 = ((n+1)*ceil(log2(n+1)) - 2^ceil(log2(n+1)) + 1)/n,
分子是全部元素的查找次数总和,分母就是数组大小n,相除即平均查找次数
???,
怎么来的?
数组个数 | 次数总和 |
1 | 1 |
2 | 3(1+2) |
3 | 5(1+2+2) |
4 | 8(1+2+2+3) |
5 | 11(1+2+2+3+3) |
6 |
14(1+2+2+3+3+3) |
7 | 17(1+2+2+3+3+3+3) |
8 | 21(1+2+2+3+3+3+3+4) |
9 | 25(1+2+2+3+3+3+3+4+4) |
... | ... |
序列1, 3, 5, 8, 11, 14, 17, 21, 25, ... 可在 OEIS 官网 查询得到
二分查找平均查找次数呈对数增长(保留两位小数):
n = 100,avg二分 = 5.8
n = 10000,avg二分 = 12.36
n = 10000000,avg二分 = 22.32
以下给出部分数组大小(图中n列)与平均查找次数(图中approximation列)
(图片数据来源WolframAlpha)
二者平均查找次数图形比较
蓝:线性查找
红:二分查找
线性查找与二分查找的平均查找次数的比较相关推荐
- 数据结构 顺序查找和折半查找的平均查找长度分析关于ASL(平均查找长度)的简单总结
顺序查找 折半查找的平均查找长度分析 ASL:平均查找长度 其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数. A S ...
- (王道408考研数据结构)第七章查找-第一节:查找的基本概念、平均查找长度
文章目录 一:查找的基本概念 (1)查找表和关键字 (2)查找的概念 二:静态查找表和动态查找表 三:查找算法评价指标--平均查找长度 一:查找的基本概念 (1)查找表和关键字 查找表(Search ...
- 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)
查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...
- 平均查找长度之二分查找 -【Java】
编程统计,长度为N的有序数组进行二分查找时,查找成功与失败的平均查找长度.注意,表达成总查找长度除以总查找个数的形式. 输入样例: 输入数组的元素个数:一个正整数: 6 输出样例: 在第一行输出查找成 ...
- 让你秒懂的折半查找(二分查找)
折半查找又称二分查找,只能适用于有序的顺序表. //折半查找 int Bsearch(int R[],int low,int high,int key){int min;while(low<=h ...
- 【数据结构】哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
一.哈希表 1.概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度.这个 ...
- 哈希表查找——成功和不成功时的平均查找长度
哈希表查找--成功和不成功时的平均查找长度 以下求解过程是按照"计算机统考的计算方法",不同的老师.教材在"处理冲突"上可能会有不同的方法,所以最主要的是掌握原 ...
- Hash表查找成功和查找不成功的平均查找长度(附总结)
Hash表的平均查找长度包括查找成功时的平均查找长度和查找失败时的平均查找长度. 查找成功时的平均查找长度=表中每个元素查找成功时的比较次数之和/表中元素个数: 查找不成功时的平均查找长度相当于在表中 ...
- 【hash表】hash表平均查找长度(ASL)
hash 表在处理 collision 的时候有很多种方式,比如 线性探测(linear probing).二次探测(quadratic probing).开链法(seperate chaning ...
- 计算二叉排序树的平均查找长度
查找成功的情况下: 第一层结点:一个 查找了一次 第二层结点:二个 每个查找两次 第三层结点:四个 每个查找三次 第四层结点:二个 每个查找四次 所以查找成功情况下的平均查找长度是: 查找失败的情况下 ...
最新文章
- 【音乐App】—— Vue-music 项目学习笔记:播放器内置组件开发(一)
- Angularjs Controller 间通信机制
- 【机器学习算法专题(蓄力计划)】十七、机器学习中决策树算法
- JAVA——基于HttpClient的正方教务系统[1999-2020]模拟登录基本解决方案
- 安卓手机与PC不得不说的那些事 之 篇一 网络分享
- 吃屎是一种什么样的体验?
- Lynis 检测自身安全漏洞工具(本机)
- win8选择哪个python版本_Win8的几个版本该怎么选
- SpringBoot集成Shiro进行权限控制和管理
- Eigen按行或列求和的使用
- 1.Hbase集群安装配置(一主三从)
- Qgis 3.18 的安装步骤
- 中文ssid linux,分享|LinSSID:一款Linux下的图形化Wi-Fi扫描器
- 触感啥意思_苹果手机系统触感反馈是什么意思
- 互联网大数据项目汇报计划书PPT模板
- 天啦噜!我竟然见到了超级网红区块链本人
- 并发请求:统计数据收集模式
- 5菜鸟教程_【菜鸟手册7】如何在NVIDIA Jetson平台上安装Anaconda
- 停车场管理系统(一)
- 基础的sql语句练习题+答案