从简单的例子来看看 算法的到底能改变什么?

先来看一道题:

如果 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:",(a,b,c))

end_time = time.time()
print("一共耗时:%.2f"%(end_time-start_time))

第二种写法:只是少了一层循环而已

import time

start_time = time.time()

# 这次只有2层循环
for a in range(0,1001):
    for b in range(0,1001):
        c= 1000-a-b
        if a**2 +b**2 ==c**2:
            print("a,b,c:",(a,b,c))

end_time = time.time()
print("一共耗时:%.2f"%(end_time-start_time))

 

结果分析

第一种的结果如下:

a,b,c: (0, 500, 500)
a,b,c: (200, 375, 425)
a,b,c: (375, 200, 425)
a,b,c: (500, 0, 500)
一共耗时:111.88

Process finished with exit code 0
时间复杂度分析:
三层循环
    T(n) = O(n*n*n) = O(n3)

 第二种的结果如下:

a,b,c: (0, 500, 500)
a,b,c: (200, 375, 425)
a,b,c: (375, 200, 425)
a,b,c: (500, 0, 500)
一共耗时:0.96

Process finished with exit code 0

时间复杂度:

T(n) = O(n*n*(1+1)) = O(n*n) = O(n2)

从结果分析得知,

       第一种三层循环--运行时间:111.88秒

       第二种两层循环--运行时间:0.96秒

      大大提高了运行效率!

 

 

如果你和我有共同爱好,我们可以加个好友一起交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值