数据结构(基于python实现)02-算法复杂度分析
2018-03-22 14:47
543 查看
计算机基本的构造模块:数据结构和算法
所以提到数据结构,那么就不得不提算法。而如何评价一个算法的质量呢?
第一个层次就是正确性、第二个层次就是可读性和易维护性、最后就是分析一个算法的复杂度
算法复杂度:1、空间复杂度 2、时间复杂度
结果是:
如果我再嵌套一层循环呢:
结果是:
以上两个测试不知大家看出什么没有:对于循环来说,每嵌套一层循环,时间复杂度以指数级增长,即复杂度为:一层循环–>n;两层循环–>n^2;三层循环n^3;等等……
我们在编程中尽量避免使用循环嵌套。对于一个程序来讲,当出现两层以上的嵌套时,这个程序从算法复杂度角度来看就是不合格的,除非数据量小于100
所以提到数据结构,那么就不得不提算法。而如何评价一个算法的质量呢?
第一个层次就是正确性、第二个层次就是可读性和易维护性、最后就是分析一个算法的复杂度
算法复杂度:1、空间复杂度 2、时间复杂度
1、空间复杂度:
空间复杂度的计算需要计算程序运行所需的资源,一个显著的评价标准就是程序运行时的内存使用量。2、时间复杂度:
运行一个小程序,用于计算运行时间和内存的对比import time import psutil import os def problem_size(num): t_start = time.time() for i in range(num): # for j in range(num): i -= 1 t_stop = time.time() return t_stop - t_start, psutil.Process(os.getpid()).memory_info().rss print("num = 100的运行时间%f内存使用%s" % problem_size(100)) print("num = 200的运行时间%f内存使用%s" % problem_size(200)) print("num = 400的运行时间%f内存使用%s" % problem_size(400)) print("num = 1000的运行时间%f内存使用%s" % problem_size(1000)) print("num = 10000的运行时间%f内存使用%s" % problem_size(10000))
结果是:
# num = 100的运行时间0.000006内存使用9379840 # num = 200的运行时间0.000009内存使用9408512 # num = 400的运行时间0.000019内存使用9408512 # num = 1000的运行时间0.000057内存使用9408512 # num = 10000的运行时间0.000603内存使用9408512
如果我再嵌套一层循环呢:
import time import psutil import os def problem_size(num): t_start = time.time() for i in range(num): for j in range(num): i -= 1 t_stop = time.time() return t_stop - t_start, psutil.Process(os.getpid()).memory_info().rss print("num = 100的运行时间%f内存使用%s" % problem_size(100)) print("num = 200的运行时间%f内存使用%s" % problem_size(200)) print("num = 400的运行时间%f内存使用%s" % problem_size(400)) print("num = 1000的运行时间%f内存使用%s" % problem_size(1000)) print("num = 10000的运行时间%f内存使用%s" % problem_size(10000))
结果是:
# num = 100的运行时间0.000499内存使用9641984 # num = 200的运行时间0.001750内存使用9670656 # num = 400的运行时间0.007945内存使用9670656 # num = 1000的运行时间0.064220内存使用9670656 # num = 10000的运行时间7.021932内存使用9670656
以上两个测试不知大家看出什么没有:对于循环来说,每嵌套一层循环,时间复杂度以指数级增长,即复杂度为:一层循环–>n;两层循环–>n^2;三层循环n^3;等等……
我们在编程中尽量避免使用循环嵌套。对于一个程序来讲,当出现两层以上的嵌套时,这个程序从算法复杂度角度来看就是不合格的,除非数据量小于100
相关文章推荐
- Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析
- Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析
- Android版数据结构与算法(二):基于数组的实现ArrayList源码彻底分析
- Python 基于语句检测和语句频谱分析实现文本汇总算法 (document summary algorithm)
- 基于分析的提示应用又一例(实现复杂的TopN)
- 基于rsync同步算法的文件同步系统JAVA实现(四)——分析并发送不匹配数据块
- 基于python的分词算法的实现(1) - 算法
- 常用数据结构2——栈,实现PUSH、POP和取最小值操作算法时间复杂度为o(1)
- 用Python实现的数据结构与算法:队列
- Python实现各类数据结构和算法---直接选择排序
- 用Python实现的数据结构与算法:链表
- Python实现各类数据结构和算法---动态规划之最长公共子序列
- 常见排序算法的C语言实现以及算法复杂度分析(持续更新)
- 排序算法的C语言实现以及各个算法的时间复杂度和空间复杂度分析(冒泡排序)
- Python实现各类数据结构和算法----归并排序
- 基于左右值的无限级分类算法-oracle实现--02
- 能分析压缩的日志,且基于文件输入的PYTHON代码实现
- BIEE采用基于分析的过滤器实现复杂导航实例
- 基于Levenberg-Marquardt训练算法的BP网络Python实现