10 + 9 + 8 + ... + 1 的时间复杂度是多少?

2020-07-16 12:15:34 +08:00
 smallyu

比如有一个两层的循环,如果是

n = 0  
for i in range(10):  
    for j in range(10):  
    n += 1  
    
print(n)  // 100

复杂度应该是 n^2 吧,那这样呢:

n = 0
for i in range(10):
	for j in range(i, 10):
		n += 1
            
print(n)   // 55

相当于 10 + 9 + 8 + ... + 1 = 55,这个复杂度应该怎么描述?

两个循环还好理解,如果是三层循环呢:

 n = 0
 	for i in range(10):
 		for j in range(i, 10):
 			for k in range(j, 10):
 				n += 1
            
 print(n)   // 220

主要是三层循环就想不明白了,求教这怎么理解呢?

4148 次点击
所在节点    程序员
24 条回复
newtype0092
2020-07-16 16:37:56 +08:00
我也被自己绕昏了,看起来确实是 O(1)啊
SiliusMo
2020-07-16 17:48:09 +08:00
从 1 加到 10 这个代码里都没有 n. 哪里来的 O(n)?
无论你套几层循环,需要的步骤都是常量, 所以结果是 O(A). A 代表一个常数. 其实也就是 O(1).
ourFEer
2020-07-16 17:51:33 +08:00
O(1)
wnpllrzodiac
2020-07-16 17:51:39 +08:00
复杂度和 指令优化是两个概念。虽然现在编译器智能了,而且机器性能高了,很多东西都不需要人考虑了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690540

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX