分析包含while循环的算法

时间:2016-09-12 20:24:50

标签: algorithm

在分析算法时,我通常不会遇到for loop的问题,而我在分析涉及while loop的算法的运行时间时遇到问题。我将举例说明我的问题。

以下是我正在研究的coin-change algorithm(众所周知的算法)的一部分:

counter = 0
s = 0
while(s <= n/100)
   s = s+1
   t1 = n- 100*s
   h = 0
     while(h <= t1/50)
          h = h +1
          t2 = t1 - 50*h

...

有人可以解释知道嵌套while循环的算法运行时间的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

while循环只是编写for循环的另一种方式,因此评估复杂性不应该有任何不同。

这里,外部while循环在复杂度世界中运行n次(与现实世界中的n成比例),因为每次迭代s增加1并且它一直运行到{{1达到与s成比例的值。

我认为你的内部循环有点困惑,运行n次(在复杂世界中)t1。现在你认为算法是O(n ^ 2),但t1 = n - 100s在每次迭代中减少,因此内部循环对于每次后续迭代运行的次数更少,并且可能不是O(n ^ 2)。

t1对于每次迭代都是不同的,因此整个迭代集将运行:t1次。由于此系列中的项数与n成正比,因此求和将具有n平方项,并且对于报告复杂性,所有低阶项都将被忽略,因此您无需担心其余数字的总和。该算法为O(n ^ 2)。

诀窍是忽略每一步的常数和低阶项,这很容易!