以下是两种算法(伪代码):
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行。
时间复杂度:
我想知道计算是否正确。
谢谢!
答案 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感到满意):
答案 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()}符号