[菜问*2]到底什么时候才是O(logN)?递归算法的时间复杂度怎么计算?

qpalwosk 2005-12-12 04:31:20
如题,麻烦哪位大虾随口解释一下,一定让偶受益匪浅 非常very感激
...全文
844 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenhornet 2005-12-15
  • 打赏
  • 举报
回复
借lz地方问一下,递归方程该怎么解啊?
Kvci 2005-12-13
  • 打赏
  • 举报
回复
当计算某个结果时
某个循环体要执行的次数的表示函数就是其时间复杂度

比如一个数组中有N个元素,求和或者找最大元素要求最起码遍历每个元素一次
执行次数只与元素个数N有关,那其时间复杂度就是O(N),
大概可以看出,N越大,执行的次数就越多,时间就越长
执行总时间与N成正比

如果某个操作,比如我要把数组a中第i个 元素值赋给b
只要一句 b=a[i] 即可,而不用考虑N的个数为多大
因此这个操作的时间复杂度为O(1),
由于N可以任意值,我这个操作都只要一次
因此可以看成是与N无关

xdop 2005-12-13
  • 打赏
  • 举报
回复
统计

最深循环

内部

语句的执行频度

就得到时间复杂度的关于循环次数的最高次项

另外,时间复杂度和常量无关

比如

for(i=0;i<N;i++)
{}
for(i=0;i<N;i++)
for(j=0;j<M;j++)
{}

时间复杂度T(N+N*M)

如果M为常量,则关于N的最高次项是1次,时间复杂度O(N)

如果M是变量,则时间复杂度需要进行多项式计算:

因为M可能在每轮循环中都不同

比如顺序表中折半查找时
M分别为N/2, N/4, N/8, ...

事实上,logN的多项式展开也是类似的形式

最终的频度统计公式中就出现了 logN 项,这就是来历
jp1984 2005-12-12
  • 打赏
  • 举报
回复
递归算法的分析就是根据递归算法执行步骤 ,找到递归关系 , 一般为一个递归方程形式
解这个递归方程就行了.
寻开心 2005-12-12
  • 打赏
  • 举报
回复
1 比如有序的序列当中查找一个数字,折半查找的情况下的平均查找次数就是 O(logN)
2 递归是要看具体的递归函数来分析的,最终得到的还是关于N的一个计算次数的函数
找几个例子看吧

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧