#!/usr/bin/env python
#! _*_ coding:UTF-8 _*_

from Queue import Queue
import time

que = Queue()

time_begin = time.time()
# 如果a+b+c=1000, 且a^2+b^2=c^2,a,b,c为自然数,求出a,b,c所有的组合
# 使用枚举法计算结果
for a in range(1001):
    for b in range(1001):
        for c in range(1001):
            if a + b + c == 1000 and a**2 + b**2 == c**2:
                que.put({'a':a, 'b':b, 'c':c})
time_end = time.time()

print "运行的时间为 %d, 求解的结果如下:" % (time_end-time_begin)
for item in range(que.qsize()):
    print que.get()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day1/abc.py
运行的时间为 124, 求解的结果如下:
{'a': 0, 'c': 500, 'b': 500}
{'a': 200, 'c': 425, 'b': 375}
{'a': 375, 'c': 425, 'b': 200}
{'a': 500, 'c': 500, 'b': 0}

Process finished with exit code 0

同样的问题,采用不同的算法,运行时间大大降低,如下:

#!/usr/bin/env python
#! _*_ coding:UTF-8 _*_

from Queue import Queue
import time

que = Queue()

time_begin = time.time()
# 如果a+b+c=1000, 且a^2+b^2=c^2,a,b,c为自然数,求出a,b,c所有的组合
# 使用枚举法计算结果
for a in range(1001):
    for b in range(1001):
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            que.put({'a':a, 'b':b, 'c':c})
time_end = time.time()

print "运行的时间为 %d, 求解的结果如下:" % (time_end-time_begin)
for item in range(que.qsize()):
    print que.get()

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day1/abc2.py
运行的时间为 0, 求解的结果如下:
{'a': 0, 'c': 500, 'b': 500}
{'a': 200, 'c': 425, 'b': 375}
{'a': 375, 'c': 425, 'b': 200}
{'a': 500, 'c': 500, 'b': 0}

Process finished with exit code 0

同样的问题,发现第一种算法用的时间为124S,第二种方法用的时间为不到1S;这就需要对不同的算法衡量运行效率;

如何衡量效率呢?运行效率不仅和运行时间有关,还和计算机的运行环境有关,同样的算法,在不同的计算机上执行,执行时间也是不一样的。

所以,运行效率应该用执行步骤相关,将执行步骤成为时间复杂度。

在第一种算法中:T(n) = n^3 * 2

在第二种算法中:T(n) = n^2 * 3

若不考虑系统和偏置项,则为渐进函数,使用渐进函数表示即为大O表示法:

在第一种算法中:T(n) = O(n^3)

在第二种算法中:T(n) = O(n^2)

最新文章

  1. 基于TCP的网络编程
  2. iOS 直播-闪光灯的使用
  3. SpringMVC学习(一)
  4. Device eth0 does not seem to be present, delaying initialization. 问题
  5. IOS的一些小技巧
  6. 如何通过CRM评估客户价值和提高客户忠诚度?
  7. 胖AP(1602i)与苹果设备之间的问题总结
  8. spring 中的两个DaoSupport类的使用对比
  9. python学习第十六天 --继承进阶篇
  10. [LeetCode258] Add Digits 非负整数各位相加
  11. bootstrap3-datepicker and jquery.form.js
  12. MySQL-MHA高可用方案
  13. C语言之++--
  14. 质量管理:PDCA循环
  15. 关于ASL(平均查找长度)的简单总结
  16. 小a的轰炸游戏 (差分)
  17. LNMP 支持 ThinkPHP 的 pathinfo 模式
  18. SLAM学习笔记
  19. Oracle 用脚本安装第二个数据库
  20. 商业web漏扫神器——appscan篇

热门文章

  1. maven 标签classifier 研究一下
  2. 009_npm常用命令参数总结
  3. 16.xml
  4. Python+Pycharm—学习—pip
  5. bootstraptable 分页查询
  6. CF429E Points and Segments 构造、欧拉回路
  7. Vue文件中引入img 路径写法
  8. TMS-规划图
  9. 修改构造器默认prototype后,新实例的constructor指向问题和解决办法
  10. COMCMS_CORE 起步篇,如何运行和部署