二分查找的平均查找长度详解【转】

简介: 来源:http://blog.csdn.net/turne/article/details/50488378 看数据结构书的时候碰上的内容,我自己将它化成关于级数的题,然后自己算的过程,基本就是等比级数和等差级数的混合内容。

来源:http://blog.csdn.net/turne/article/details/50488378

看数据结构书的时候碰上的内容,我自己将它化成关于级数的题,然后自己算的过程,基本就是等比级数和等差级数的混合内容。
满二叉树来分析折半查找的平均长度
 
h=层高 n=节点数
[]为计算过程的式
 
先算总查找次数
1*1+2*2+3*4+4*8...(h-1)*2^(h-2)+h*2^(h-1)  ………………[1]
 
[1]*2:
 
1*2+2*4+3*8+4*16...(h-1)*2^(h-1)+h*2^h  ……………………[2]
 
[2]-[1]:
[1]*2-[1]=[3]:
[1]=[3]:
 
-1*1-1*2-1*4-1*8-1*16...-2^(h-1)+h*2^h  ……………………… [3]
 
[4]+h*2^h=[3]…………………………………………………………………………[3.1]
 
-1*1-1*2-1*4-1*8-1*16...-2^(h-1) ……………………………………… [4]
 
[4]*2-[4]=[5]=[4]
 
-2^h+1  …………………………………………………………………………………… [5]
 
因为[5]=[4],所以把[5]代入[3.1]可以得到下面的结果
[3]=[5]+h*2^h  =  -2^h+1+h*2^h=(h-1)*2^h+1
 
由于 (n+1=2^h),所以有
 
[3]=(n+1)log(n+1)-(n+1)+1
    =(n+1)log(n+1)-n
 
最后,来求查找次数平均数
[3] /n = ((n+1)log(n+1)-n)/n
         
最终,平均查找长度约等于log(n+1)-1
 
上面的所有对数log的底数皆为2.
 
 
相关文章
|
运维 Kubernetes Cloud Native
【云原生-DevOps】企业级DevOps平台搭建及技术选型-CICD篇(一)
【云原生-DevOps】企业级DevOps平台搭建及技术选型-CICD篇(一)
1300 0
【云原生-DevOps】企业级DevOps平台搭建及技术选型-CICD篇(一)
|
7月前
|
敏捷开发 前端开发 测试技术
Apipost与Apifox分享操作便捷性对比
在现代软件开发中,API接口文档的快速共享至关重要。繁琐的分享流程可能导致沟通滞后、需求理解偏差,甚至延误项目交付。本文对比了Apipost与Apifox在文档分享上的差异。Apipost通过一键分享功能,集成调试、Mock和测试流程,支持权限控制和Markdown定制,大幅提升了跨部门协作效率。相比之下,Apifox的分享操作较为复杂,需多步骤完成,且存在版本管理和权限控制不足的问题。
162 0
|
11月前
|
NoSQL 安全 PHP
hyperf-wise-locksmith,一个高效的PHP分布式锁方案
`hyperf-wise-locksmith` 是 Hyperf 框架下的互斥锁库,支持文件锁、分布式锁、红锁及协程锁,有效防止分布式环境下的竞争条件。本文介绍了其安装、特性和应用场景,如在线支付系统的余额扣减,确保操作的原子性。
152 4
|
小程序 开发工具 开发者
入职必会-开发环境搭建31-微信开发者工具下载和安装
微信开发者工具是一款由微信官方推出的开发工具,旨在帮助开发者更高效地进行微信小程序和微信公众号的开发与调试。该工具集成了代码编辑、代码上传、实时预览、调试等功能,能够提供便捷的开发环境和调试工具,帮助开发者快速定位和解决问题。
367 0
|
存储 算法 C语言
3.9.3Cache替换算法
计算机组成原理之Cache替换算法
497 0
|
Java
Java编程:基于socket实现局域网双人联机对战五子棋
Java编程:基于socket实现局域网双人联机对战五子棋
1262 0
Java编程:基于socket实现局域网双人联机对战五子棋
|
JavaScript 前端开发 Java
毕设项目-基于Springboot和Vue实现蛋糕商城系统
毕设项目-基于Springboot和Vue实现蛋糕商城系统
464 1
|
数据采集 机器学习/深度学习 自然语言处理
3天没合眼,总结出了这份万字Python数据预处理教程
3天没合眼,总结出了这份万字Python数据预处理教程
|
机器学习/深度学习 编解码 算法
BEVFormer-accelerate:基于EasyCV加速BEVFormer
BEVFormer是一种纯视觉的自动驾驶感知算法,通过融合环视相机图像的空间和时序特征显式的生成具有强表征能力的BEV特征,并应用于下游3D检测、分割等任务,取得了SOTA的结果。
|
数据安全/隐私保护 UED 索引
大文件上传和优化
最近项目里面有一些视频处理的功能,大概流程就是后端拿到文件以后,使用FFmpeg等底层命令进行去水印,裁切等功能,虽然现在是短视频的年代,但是依然会出现一些高分辨率,高时长的大文件视频,这时候因为一些原因,如网络等,失败率会陡增。