算法概念

算法 ( Algorithm )

一、功能: 有限时间内解决问题的一系列清晰指令

二、效率 

  • 空间
  • 时间

三、目标

  • 能够识别程序要求的功能以解决当前任务设计
  • 能够高效解决此任务的数据结构与算法
  • 评价该方案的效率和正确性

算法分析

运行时间 (时间复杂度) 

  1. 运行时间会随着输入的大小如何变化 
  2. 最好的情况: 运行时间的上限 (最少运行时间) 由最简单的输入决定 提供了所有输入的最终优化目标 
  3. 最差的情况:运行时间的下限 (最多运行时间) 由最复杂的输入决定 提供了所有输入的保障时间 
  4. 平均情况: 随机输入的运行时间的期望 需要建立随机输入的模型 是一种评价算法表现的方法 
  5. 平均情况时间通常很难测定 ,我们通常情况下关注最差情况下的运行时间

 可以看出,运行时间的效率从高到低的排序为:

Constant (常数的)> Logarithmic(对数的) > Linear(线性的) > N-log-N(N对数N) > Guadratic(二次方的) > Exponential(指数的) > Cubic(三次方的)

评估算法运行时间

算法 arrayMax 在最差情况下执行了 8n − 3 个基本操作。

定义:

a = 最快的基本操作所需要的运行时间

b = 最慢的基本操作所需要的运行时间

令 T (n) 为 arrayMax 的运行时间。

则应该有:

a (8n − 3) ≤ T (n) ≤ b (8n − 3)

因此,运行时间 T (n) 由两条线性函数所划定其范围

近似记法

Big - O 记法

一般习惯用 Θ (n) 记法来 渐进界定算法运行 时间的常数函数边界。有时,我们只希望这 个常数函数代表算法运行时间的上界。

尽管在最差情况下二分法搜索的运行时间为 Θ (lgn),认为在所有情况下二分法搜索的搜 索时间为 Θ (lgn) 是错误的。

二分法搜索的时间从来不会超过 Θ (lgn), 多数情况下其搜索时间都会少于Θ (lgn)

时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某 个辅助函数f(n) ,使得当n趋近于无穷大时

T(n)/f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。 记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度

#一般我们根据时间复杂度来判断该算法的时间效率
#举例说明

for (n):
    xxxxxxx
#这种为常见的O(n)

for (n):
    for(m):
        xxxxxx
#这种为O(n×m)
#若嵌套的两条程度同级别可视为 O(n^2)

for (n):
    xxxxxxx
for (n):
    xxxxxxx
#这种为O(n)+O(n),也为O(n)

附上Python内置方法时间复杂度的学习链接:

https://www.cnblogs.com/harvey888/p/6659061.html   

猜你喜欢

转载自www.cnblogs.com/kumata/p/9092779.html