for i=1 to n
for j=1 to i
for k=1 to j
x+=1
我认为这是O(n 3 )
for i=1 to n
for j=1 to i
for k=1 to i
x+=1
我也认为这个是n 3 ,因为最里面的循环仍然依赖于最外层的循环。
请验证我的答案并解释我错的原因。
答案 0 :(得分:1)
假设你有第一个正确。然后你可以轻易地争辩说第二个版本的复杂性至少是第一个版本的复杂性。为什么?版本之间的唯一区别是第二个版本为k = 1 to i
,第一个版本为k = 1 to j
。但在第一个版本中,j
始终小于或等于i
。因此,在第二个版本中,k
的循环将始终更频繁地运行。
现在考虑一下这段代码:
for i=1 to n
for j=1 to n
for k=1 to n
x+=1
首先,表明其时间复杂度为 O(n 3 )。然后,进行类似于我上面的论证,以表明此代码的复杂性大于或等于第二个版本的复杂性。得出结论,所有三个代码段的复杂性必须是 O(n 3 ),如果第一个的复杂性是,然后显示第一个的复杂性是为O(n 3 )强>