数据结构与算法-2

学习视频:数据结构与算法基础(青岛大学-王卓)

算法的定义

解决问题的方法和步骤(有穷性、确定性、可行性、输入、输出);
程序 = 数据结构 + 算法。
ps:健壮性,指处理出错的方法不应是中断程序的执行,而是输出一个代表出错的值。

算法的时间量度

一般采取事前分析的方法:
算法运行时间 = 一个简单操作所需的时间 * 简单操作的次数 ;
算法运行时间 = ∑ 每条语句执行的次数 (又称为语句频度)* 该语句指向一次所需的时间;
每条语句执行一次need的时间一般随机器而异,与算法无关,所以我们可以假设每条语句所需的时间均为单位时间,这样,算法运行时间就只取决于语句频度了。
算法运行时间 = 语句频度 * 单位时间;
ex:n*n矩阵相乘

for(i = 1; i <= n; i++{
    
    							//执行n+1次
	for(j = 1; j <= n; j++ ){
    
    						//执行n*(n+1)次
			c[i][j] = 0//执行n*n次
			for(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)= 2 * n³ + 3 * n² + 2n + 1;

ex:算法的比较
T1(n) = 10n T2(n) = 5n²
根据算法的渐进时间复杂度:若有某个辅助函数f(n),使得当n趋近于无穷大,T(n)/f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同量级函数,记作T(n) = O(f(n)),O(f(n))为算法的渐进时间复杂度;
所以T1好;

ex:T(n)= 2 * n³ + 3 * n² + 2n + 1,求其时间复杂度?
n趋近无穷时,T(n)/n³ = 2;
T(n) = O(n³ );

因此一般情况下,不必计算所有操作执行次数,只考虑算法中的基本操作(一般为次数最大的,即频度最大)执行的次数n,

排序:n为记录数;
矩阵:n为矩阵阶数;
多项式:n为项数;
集合:n我元素个数;
树: n为结点个数;
图: n为定点数或边数;

时间复杂度分析例题

attention:时间复杂度是由嵌套最深层语句的频度决定的
first:找到执行次数最多的;
second:找到f(n);
third::取其数量级用符号"O"表示

有时,算法中基本操作重复执行的次数还随着问题的数据集不同而不同,例如顺寻查找a[i]中等于e的元素,返回其所在位置,最好情况1次,最坏情况n次,评价时间复杂度为O(n);(一般考虑最坏)

加法规则:
T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(Max(f(n),g(n)))
乘法规则:
T(n) = T1(n) * T2(n) = O(f(n)) * O(g(n)) = O(f(n) * g(n))

在这里插入图片描述

算法时间效率比较
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

算法的空间量度

空间复杂度:算法所需存储空间的度量
S(n) = O(f(n)),n为问题的规模大小

学习视频:数据结构与算法基础(青岛大学-王卓)

猜你喜欢

转载自blog.csdn.net/fly_ship/article/details/107730997
今日推荐