多分查找法的性能分析--二分还是其他?
来源:互联网 发布:手机整人软件闪电 编辑:程序博客网 时间:2024/06/07 11:56
在一个有序数列中,共K个数字,在其中查找一个数字,常使用二分查找方法对数据进行分段以缩小范围进行定位来替代遍历。
另外一个相似的问题模型,K个电阻串连在一起,有1个电阻坏了,导致电路不通,问如何测定找到这个故障电阻。
问题的提出:常用方法都是采用二分法,现在考虑下采用3分呢,4分呢,……,K分呢(最极端的K分其实就是遍历了)。
分支(广度)少则深度大,现通过数值计算对多分查找进行性能分析,来看广度和深度二者应如何处理。
假设进行a分处理,第一次分支后,每个节点的查找次数分别为1,2,……a , 第二次分支后,每个节点的查找次数在其父节点的基础上进行累加。
图1 三分示例
查找次数期望E = S / K
S为所有子节点查找次数之和
由树形图可见
S1 = (1 + a)*a / 2 = t
递推公式为
n为分支次数,即树的高度,an= K
Sn = a*Sn-1 + an-1 * t
整理,得
S1 = t
S2 = aS1 + a*t = 2at
S3 = aS2+ a2 t = 3a2t
S4 = aS3 + a3 t = 4a3t
Sn = n * an-1* t
an= K
n = logaK = lgK / lg(a)
期望E = (1 + a) * logaK / 2
= (1 + a) * lgK / (2*lg(a) )
函数(1 + a) / (2*lg(a)) 图像
(在线函数作图http://www.e-tutor.com/et2/graphing)
a为整数,在a = 4时取最小值.
这种计算方法可以改进,每层的最后一个节点可以直接和其前面的节点次数一样。以一个笑话为例:
男:你喜欢我吗?
女:你猜?
男:喜欢。
女:再猜。
猜1次已经足够了。
调整图1
公式一样,只是t = (1 + a) * a / 2 – 1
Sn = n * an-1* t
期望E = Sn / K = (a2+a-2)*lg(K) / ( 2*a*lg(a) )
函数(a2+a-2) / ( 2*a*lg(a) )
在 a = 2时取最小值,
这个时候使用二分查找最优。
二分法的特点:非此即彼。
- 多分查找法的性能分析--二分还是其他?
- 二分查找法的实例分析
- 分冶-二分查找
- 二分查找分C++实现
- 二分查找(20 分)
- 二分查找的进一步分析(TAOCP)
- 对分查找(二分查找)
- 二分查找算法分析
- 算法分析:二分查找
- 二分查找算法分析
- 二分查找分析
- 【二分查找】在排序数组中,找出给定数字的出现次数 以及二分其他应用
- 数组的二分查找法
- 递归的二分查找法
- 黄金分割二分性能分析
- 查找----二分查找法
- CF 633 D 离散化+二分查找+暴力(还是要多学习学习呀,挺好的题目)
- 4-10 二分查找 (20分)
- NIO Server
- 个人学习4之--SQL中逻辑查询处理的各个阶段
- poj3664
- 字符串以及内存操作相关函数
- C#代码与javaScript函数的相互调用
- 多分查找法的性能分析--二分还是其他?
- CMOS的成像原理及发展
- noi2004 曼哈顿
- 2010-05-17
- 新的开始
- 输入某个日期,求出是星期几
- POJ1042 Gone Fishing(贪心)
- H.264的权重量化机制(转载)
- CVBS,YUV,VGA 含义