2015-04-02 100 views
-3
for(i=0; i < n; i * = 25) 

至于我想的复杂性无法确定。 迭代永远不会继续,所以循环基本变成无限循环。这个循环的时间复杂度是多少?

+0

它取决于'n'的值,它永远不会继续。 – 2015-04-02 14:21:07

+0

如果n <= 0,它是恒定的时间,如果n> 0,它是无限的。 – gnasher729 2015-04-02 14:21:09

+0

或者其他的东西完全是,如果'i'在循环体中被修改! – Hurkyl 2015-04-02 14:21:37

回答

0

正如评论中所述,该循环仅终止于n ≤ 0。对于其他所有n,程序不会终止。

我想你不想谈的复杂性,如果你有什么事情,永远不会终止,因为复杂性被用来获取大的投入运行时间的想法,并比较算法。

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

如果你被要求写在大澳的东西有看看这个方法不止一种。

  1. 算法永远不会终止,所以它是无限的操作,你不能找到一个常数c∞ < c⋅f(n)n < ∞功能f(n)(多项式或指数),所以它应该是O(∞)
    这由big-o的正式定义支持。
  2. 如果你看一下执行的操作的数量的变化,如果您双击输入,n → 2n你看到的,执行的操作的数量不会改变,所以也许O(1)也是可能的。
    这由重复公式T(n) = T(n-1)支持。最后你必须定义T(1)是什么。复杂性与小的或特定的输入无关,所以也许可以定义T(1) = O(1)

两种方式都表示,运行时间不取决于输入,但第二个主要是哲学,第一个应该是首选。

但正如我在开始时说:你不想谈上永远不会终止(或只为不相关的情况下)代码的复杂性。