引入
先来看一道题:
如果 a+b+c=1000, a^2+b^2=c^2(a, b, c 均为正整数),求出a, b, c?
import time
start_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
for c in range(0, 1001):
if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
print('a, b, c: %d, %d, %d' % (a, b, c))
end_time = time.time()
print('time: %d' % (end_time - start_time))
print('Finish!')
运行结果:
a, b, c: 0, 500, 500
a, b, c: 200, 375, 425
a, b, c: 375, 200, 425
a, b, c: 500, 0, 500
time: 204
Finish!
时间复杂度和大O表示法
将代码进行优化:
import time
start_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
c = 1000 - a - b
if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
print('a, b, c: %d, %d, %d' % (a, b, c))
end_time = time.time()
print('time: %d' % (end_time - start_time))
print('Finish!')
运行结果:
a, b, c: 0, 500, 500
a, b, c: 200, 375, 425
a, b, c: 375, 200, 425
a, b, c: 500, 0, 500
time: 1
Finish!
我们可以发现,仅仅改动了一点代码,时间缩短了百倍!因此需要借助工具来衡量算法的优劣。
算法效率衡量
方法一:通过代码执行时间
这种方法依赖于程序的执行环境,不一定可靠!