第 2 章 快速入门
2.1 入门案例
案例:如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),求出所有a、b、c可能的组合?
解决方案:
1.猜三个,条件匹配
2.猜两个,另一个计算
算法五特性:
输入、输出、有穷性、确定性、可行性
1、输入: 算法具有0个或多个输入
2、输出: 算法至少有1个或多个输出
3、有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步 骤可以在可接受的时间内完成
4、确定性:算法中的每一步都有确定的含义,不会出现二义性
5、可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
算法评判标准:
基本环境+代码目标
服务器环境是否一致/两种代码是否在一台机器上运行
两种代码的目的一致
分析代码的方法:
(1)前提:
环境一致
目标一致
(2)思路:
代码由内向外依次执行
(3)内容:
步骤数量
单位执行时间
关系:步骤数量*单位执行时间=代码运行时间(时间)
2.2 算法复杂度
(1)时间复杂度
时间复杂度:做一件事情所需要花费的时间
规律趋势 -----渐进时间复杂度 ——–表现形式大O技法 O(表达式主干)
时间复杂度分类:
时间复杂度 | 说明 |
---|---|
最优 | 梦想(最少) |
最坏 | 最低保障****** |
平均 | 统计 |
时间复杂度基本计算规则:
1.基本规则:一步到位 O(1)
一步:在一个具体的数字步骤范围中,肯定能完成这件事
2.顺序规则:一步一步O(n)
一步:在一个不具体的数字步骤范围中,肯定能完成这件事
3.循环规则:
简单循环 乘积的关系 O(n**3)
递归循环 O(logn)
4.分支规则:最坏时间复杂度
5.抓主干:
6.默认最坏时间复杂度:
(2)空间复杂度
空间复杂度:代码的运行所占用的存储空间
目的:用空间换取时间
(3)常见时间复杂度
常数最小,n越多,值越大,效率越低,时间越长
2.3 性能分析模型详解
timeit模块使用方法
1.构造一个测试对象
测试对象是一个单一功能的函数
2.对整个测试对象进行指定次数的测试
给一个的指定数值,返回一个总时间