计算时间复杂度(2个简单算法)

时间:2014-03-16 17:15:49

标签: algorithm time-complexity pseudocode

以下是两种算法(伪代码):

Alg1(n)
1.    int x = n
2.    int a = 0
3.    while(x > 1) do
3.1.    for i = 1 to x do
3.1.1       a = a + 1
3.2     x = x - n/5

Alg2(n)
1.    int x = n
2.    int a = 0
3.    while(x > 1) do
3.1.    for i = 1 to x do
3.1.1       a = a + 1
3.2     x = x/5

差异在第3.2行。

时间复杂度:

  • Alg1:c + c + n * n * 2c = 2c +2cn²= 2c(n²+ 1)= O(n²)
  • Alg2:c + c + n * n * 2c = 2c +2cn²= 2c(n²+ 1)= O(n²)

我想知道计算是否正确。

谢谢!

3 个答案:

答案 0 :(得分:2)

不,我担心你不正确。

在第一个算法中,行:

x = x - n/5

使while循环O(1) - 它将运行五次,但是n大。 for循环为O(N),因此整体为O(N)

相比之下,在算法2中,x减少为

x = x/5

作为x = n开始,此while循环在O(logN)中运行。但是,内部for循环每次都会减少为logN。因此,您正在为n + n/5 + n/25 + ...再次执行O(N)次操作。

答案 1 :(得分:1)

下面是推断两种算法增长顺序的正式方法(我希望您对Sigma Notation感到满意):

enter image description here

enter image description here

答案 2 :(得分:-1)

算法1
您将{x}的值减少5,因此n + n-5 + n-10 +.... <{1}} O(N^2)

算法2
您将{x}的值减少n/5,因此n + n/5 + n/25 +.... <{1}} O(N logN)

请参阅wikipedia了解大哦{O()}符号