07 1.4算法和算法分析(青岛大学-王卓)笔记

文章讨论了算法效率的两个主要方面:时间效率和空间效率。时间效率可以通过事后统计和事前分析来评估,通常用算法中基本操作的执行次数衡量。以两个n*n矩阵相乘为例,展示了算法运行时间的计算方法。文章还引入了时间复杂度的概念,用渐进表示法描述算法在大数据量时的行为,例如O(n^3)表示时间复杂度。
摘要由CSDN通过智能技术生成

算法效率:

(1):时间效率:指的是算法所消耗的时间;

(2):空间效率:指的是算法执行过程当中所消耗的存储空间;

算法时间效率的度量

算法时间效率可以用依据该算法编制的程序在计算机上执行所消耗的时间来度量。

事后统计:将算法实现,测算其时间和空间开销。

事前分析:对算法所消耗资源的一种估算方法。

一个算法的运行时间是指一个算法在计算机上运行所消耗的时间大致可以等于计算机执行一种简单的操作(如赋值,比较,移动)所需要的时间与算法中进行的简单操作次数乘积。

算法运行时间=一个简单操作所需要的时间*简单操作次数

算法运行时间=每条语句的执行次数*该语句执行一次所需要的时间

语句频度:语句被执行的次数;

每条语句执行一次所需要的时间,一般是随机器而异。取决于机器的指令性能,速度以及编译的代码质量。是由机器本身软硬件环境决定的,它与算法无关。我们可以假设执行的每条语句所需要的时间均为单位时间。此时对算法的运行时间的讨论就可以转化为讨论该算法中所有语句的执行次数,即频度之和。

例子:两个n*n矩阵相乘的1算法可描述为:

for(int i=1;i<=n;i++)//n+1次     当条件不满足时退出。
for(int j=1;j<=n;j++)//n(n+1)次
{
c[i][j]=0; //n*n次
for(int k=0;k<n;k++)//n*n*(n+1)次
c[i][j]=c[i][j]+a[i][k]*b[k][j];//n*n*n次
}

我们把算法所消耗的时间定义为该算法中每条语句的频度之和,则上诉算法的时间消耗T(n)为:

T(n)=2n^3+3n^2+2n+1;

算法时间复杂度的渐进表示法

为了方便比较不同算法的时间效率,我们仅仅比较它们的数量级

例如:两个不同的算法,时间消耗分别是:

T(n)=10n^2   与    T(n)=5n^3

数量级越大其算法时间复杂度越大;

若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称:时间复杂度。order:数量级。

对于T(n)=2n^3+3n^2+2n+1,当n趋于无穷时,T(n)/n^3趋于2,这表示n充分大时,T(n)与n^3是同阶或者同数量级,T(n)=O(n^3),算法的渐进时间复杂度。

注:主要是找n的最高次数。

n越大,算法执行的时间就越长,

排序:n为记录数

矩阵:n为矩阵的阶数

多项式:n为多项式的项数

集合:n为元素的个数

树:n为树的结点个数

图:n为图的顶点数或者边数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值