算法和时间复杂度
来源:互联网 发布:win10中的keeper软件 编辑:程序博客网 时间:2024/06/06 08:09
算法
算法: 求解一个特定问题的有限指令序列.
算法操作的是数据结构, 有输入量(可选), 输出量.
算法特征
有穷性, 确定性, 可行性, 输入量(可选), 输出量(一定有)
算法设计要求
正确性, 可读性, 健壮性(稳定性), 高效低存储(占用内存容量,占用硬盘容量)
时间复杂度
问题求解规模 n
代码行执行总次数为语句频度f(n)
代码执行时间的增长率T(n)
T(n) = O(f(n))
时间复杂度计算举例
f(n) = 3(代码执行次数是固定的) = f(1)
T(n) = O(fn(n)) = O(3) = O(1) 常量阶(常量数量级)
算法复杂度性能排名(最优到最差)
O(1) 常量阶 最快, n = 无穷时, 也只执行一次就完成.
O(Log2n) 对数阶 很快 e.g. 2^3 = 8, Log2^n = 3, n = 8时, 只需要执行3次
O(n) 线性阶 性能很慢了, e.g. n = 1000, 要执行1000次才能完成.
O(n^2) 平方阶 非常慢 n = 1000 需要执行 1000 * 1000次才能完成
O(n^3) 立方阶 蜗牛一样慢 n = 1000 需要执行 1000*1000*1000次才能完成
O(2^n) 指数阶 不能接受的性能指标, n = 8时, 需要执行 2^8 = 256次才能完成.
时间复杂度计算举例
f(n) = 1 + n + n = 1 = 2n + 2
T(n) = O(f(n)) = O(2n+2) = O(n); 线性阶, 只取最高阶, 忽略其他
f(m,n) = 1 + m + 2*m*n + m = 2mn + 2m + 1
假设m=n, 必须只保留一个变量
f(n) = 2n^2 + 2n + 1
T(n) = O(f(n)) = O(2n^2 + 2n + 1) = O(n2) 只取最高阶, 忽略其他, 忽略常量系数
时间复杂度计算简化规则
O(1) 没有循环
O(log2n) 一重循环, 但是执行次数小于循环次数n, e.g. 在有序序列中折半查找一个数据.
O(n) 一重循环
O(n^2) 两重循环
O(n^3) 三重循环
时间复杂度的最好最坏情况分析
算法的标称时间复杂度, 是按照算法执行次数的最坏情况给出的.
时间复杂度的最好情况, 可以作为算法使用场合的参考.
e.g. 对于有序序列的冒泡排序, 虽然是2个循环, 但是执行时, 却是O(n)
这样就派生出优化的冒泡排序算法.
空间复杂度
在设计算法时, 空间复杂度一般不考虑, 不重要, 优先考虑用空间换时间.
只有当空间复杂度大到不可接受的程度时, 才考虑降低空间复杂度的指标.
对数阶的案例
有序序列的折半查找.
- 算法和时间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法时间复杂度和空间复杂度
- 算法的时间复杂度和空间复杂度
- 算法之时间复杂度和空间复杂度
- Servlet中文乱码处理
- File类 读取文件
- 画统计图、柱状图X轴、Y轴的刻度坐标标度算法
- 用hadoop计算PI值
- 机器学习:K-means和K-medoids对比[4]
- 算法和时间复杂度
- linux多线程编程
- 调试经验--线程安全
- Android 相机 I-调用已存在的拍摄应用/系统相机
- 文章标题
- ruby on rails 注册登录模块的简单实现
- JSP--行为(Action)
- Caffe——when a blob will copy data
- 类的成员函数作为回调函数