这个for循环的时间复杂度是多少?

时间:2015-04-02 14:18:43

标签: algorithm big-o time-complexity

for(i=0; i < n; i * = 25)

据我所知,复杂性无法确定。 迭代永远不会进行,因此循环基本上变为无限循环。

1 个答案:

答案 0 :(得分:0)

正如评论中已经说过的那样,循环仅终止于n ≤ 0。对于每个其他n,程序不会终止。

如果你有一些永不停止的东西,我认为你不想谈论复杂性,因为复杂性被用来了解大输入的运行时间和比较算法。

你甚至不能说你拥有的代码是算法,因为算法的定义经常包含,它必须终止。

如果你需要写下大字的东西,有很多方法可以看看。

  1. 算法永远不会终止,因此它会进行无限操作,而c f(n)找不到常数∞ < c⋅f(n)和函数n < ∞(多项式或指数)O(∞) ,所以它应该是n → 2n 这得到了big-o。
  2. 的正式定义的支持
  3. 如果你看一下执行操作次数的变化,如果你输入加倍,O(1)你看,执行的操作数没有改变,所以也许T(n) = T(n-1)也可以。
    这是由递归公式T(1)支持的。最后,您必须定义T(1) = O(1)是什么。复杂性与小的或特定的输入无关,因此也许可以定义{{1}}。
  4. 两种方式都说,运行时间不依赖于输入,但第二种主要是哲学的,第一种应该是首选的。

    但正如我在开头所说:你不想谈论永不终止的代码的复杂性(或仅针对无关的案例)。