折半查找的时间复杂度log2(n)的推导
来源:互联网 发布:linux arm 启动代码 编辑:程序博客网 时间:2024/05/21 18:40
假设对n个元素的折半查找需要消耗的时间为t(n)。容易知道:
如果n = 1,则t(n) = c1
如果n > 1,则t(n) = t(n/2) + c2
其中n/2需要取整,c1、c2都是常数
对于正整数n,可以有:
t(n) = t(n/2) + c2
= t(n/4) + 2*c2
= t(n/8) + 3*c2
= ...
= t(n/(2的k次方)) + k*c2
一直推演下去,直到n/(2的k次方)等于1,也就是k = log2(n),此时等式变为:
t(n) = t(1) + k*c2 = c1 + log2(n)*c2
于是时间复杂度为log2(n)。注意log2(n)和log(n)其实是同样的复杂度,因为它们之间仅仅差了一个常量系数而已。
这个是不严格的推导,因为没有考虑整数除以2之后可能有余数的情况。但即使有余数,也是不影响时间复杂度的。
如果n = 1,则t(n) = c1
如果n > 1,则t(n) = t(n/2) + c2
其中n/2需要取整,c1、c2都是常数
对于正整数n,可以有:
t(n) = t(n/2) + c2
= t(n/4) + 2*c2
= t(n/8) + 3*c2
= ...
= t(n/(2的k次方)) + k*c2
一直推演下去,直到n/(2的k次方)等于1,也就是k = log2(n),此时等式变为:
t(n) = t(1) + k*c2 = c1 + log2(n)*c2
于是时间复杂度为log2(n)。注意log2(n)和log(n)其实是同样的复杂度,因为它们之间仅仅差了一个常量系数而已。
这个是不严格的推导,因为没有考虑整数除以2之后可能有余数的情况。但即使有余数,也是不影响时间复杂度的。
0 0
- 折半查找的时间复杂度log2(n)的推导
- 算法时间复杂度的简单推导
- 算法的时间复杂度推导方法
- 2.3-3时间复杂度的推导过程
- 时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- 时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- 时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- n*log n复杂度的差分方程推导
- 查找算法的时间复杂度
- 满二叉树的折半查找公式推导
- C 里 求 log2 N 的问题
- ST算法_求RMQ问题_时间复杂度O(n*log2(n))+O(1)
- 快速排序的时间复杂度nlogn是如何推导的??
- 有序链表查找的时间复杂度是O(n)的原因是
- 查找一个字符串里,出现次数最多的字符,时间复杂度O(n)
- 如何用O(n)时间复杂度查找第k大数的优化算法 C++程序
- 写一个函数查找每个字符的个数,区分大小写,时间复杂度要求O(n)
- 查找一个字符串里,出现次数最多的字符,时间复杂度O(n)
- Java中的字节对齐方式
- c++ 中关于没有默认构造函数的成员类对象问题
- C#学习2
- C++编程规范之29:考虑重载,以避免隐式类型转换
- http协议上传实现
- 折半查找的时间复杂度log2(n)的推导
- BW中DSO的分类及应用
- C++编程规范之30:避免重载&&,||或,(逗号)
- java数据结构-HashMap
- Android Animation之frame animation
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- 中国天气网API
- 39 java 方法重载 (1)
- R-$和@符号的意义