算法分析
第一种方法的代码:
for a in range(0, 1001):
for b in range(0, 1001):
for c in range(0, 1001):
if a**2 + b**2 == c**2 and a+b+c == 1000:
print("a, b, c: %d, %d, %d" % (a, b, c))
时间复杂度计算:
一个循环结构(for)代表一个o(n),3个根据计算规则(上一篇)就是3个相乘,o(n * n * n)=o(n^3),然后一个分支结构,取最大值(没有elif和else)直接去if中的时间复杂度,o(1)
因此,T(n) = o( n ^ 3+1)= o(n ^3)
第二种方法代码:
for a in range(0, 1001):
for b in range(0, 1001-a):
c = 1000 - a - b
if a**2 + b**2 == c**2:
print("a, b, c: %d, %d, %d" % (a, b, c))
两个for循环,o(n*n),这里 c = 1000 - a - b;基本的操作就不细算了,然后一个分支,o(1),
因此,T(n) = o(n^2)
由此可见,我们尝试的第二种算法要比第一种算法的时间复杂度好多的。