algorithm - 确定算法的复杂性

标签 algorithm time while-loop complexity-theory

假设 algo(p) 是一种算法,它需要 Theta(p) 时间来执行并且不会改变 p。确定以下算法的运行时间复杂度:

Algo2(n) 
begin
p=1;
while p <= n 
    begin 
    algo(p)
    p=2*p
    end;
end;

真的不知道从哪里开始,我在想 O(logn) 可能是因为 p=p*2 但 while 循环中有一个 algo(p),我不知道这会如何影响事情。

最佳答案

这是大 Theta(n):

它调用 algo(p) O(logn) 次,p = 1, 2, 4, ..., 2^(floor(logn))。 这是 Theta(1 + 2 + ... + 2^(floor(logn)) = Theta(2^(floor(logn+1)-1) = Theta(n)。

关于algorithm - 确定算法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846494/

相关文章:

二维 vector 中的 C++ 回溯

algorithm - 什么方法适合根据接送地点对客户进行聚类

c++ - 如何为明星节目添加空间

c - linux内核启动时间

sql - 日期范围与无限间隔重叠

javascript - JQuery 在 5,10,15...55 整点后每 5 分钟运行一次

python - 如何在python中显示没有秒的区域设置敏感时间格式

c - 程序在分成 2 个程序时可以工作,但在同一个程序中使用时则不行

javascript - 为什么我不能在 while 循环中使用数组作为 'specified condition' ?

c - 如何在 "while(fscanf != EOF){blah}"内部确定下一个 fscanf 是否要返回 EOF?