【数据结构入门】1.4.3算法与算法分析(持续更新ing)(算法的时间复杂度分析)
算法与算法分析3(算法的时间复杂度分析)
数据结构 手写笔记+思维导图资源,希望大家支持哈哈
建议大家下点赞收藏 pc端下载思维导图哦 看的清晰一点,内容更详细
分析算法时间复杂度的基本方法
- 找出速度最大的那条语句(基本操作语句)
- 计算该语句的执行次数(即函数(f(n)))
- 用大O表示法表示时间复杂度
定理

例题1
示例代码及分析:
x = 0; // 执行 1 次
y = 0; // 执行 1 次
for (int k = 0; k < n; k++) // 条件判断执行 n+1 次
x++; // 循环体执行 n 次
for (int i = 0; i < n; i++) // 外层条件判断执行 n+1 次
for (int j = 0; j < n; j++) // 内层条件判断执行 n(n+1) 次
y++; // 内层循环体执行 n² 次
1.f(n)=n(n+1)
2.T(n)=O(n²)(时间复杂度)
例题2
代码:
void example(float x[][], int m, int n) {
float sum[];
for (int i=0; i<m; i++) {
sum[i] = 0.0;
for (int j=0; j<n; j++)
sum[i] += x[i][j];
cout << i << " << sum[i] << endl;
}
}
分析:
- f(n)=m*n
- T(n)=O(m*n)
例题3:N×N矩阵相乘
代码:
for(i=0; i<n; i++)
for(j=0; j<n; j++) {
c[i][j] = 0;
for(k=0; k<n; k++)
c[i][j] += a[i][k] * b[k][j];
}
分析:
算法中的基本操作语句为 c [i][j]=c [i][j]+a [i][k]*b [k][j];
这里有的同学数学方法 不会我 al了一下,可以复习一下数学哈哈

例题4
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
for (int k = 1; k <= j; k++) {
x = x + 1;
}
}
}


例题5(重要例子)
(考研期末考试出现多次)
代码:
i=1;
while (i <= n)
i = i * 2;
分析:
-
找到执行次数最多的 i = i * 2;
-
找到函数f(n)
关键就是这里要找出来执行次数 x 与关系,并表示成 n 的函数
若循环执行 1 次:i=12=2,
若循环执行 2 次:i=22=2²,
若循环执行 3 次:i=2*2²=2³,
若循环执行 x 次:i=2ˣ
设语句②执行次数为 x 次,由循环条件
i<=n,∴ 2ˣ<=n ∴x<=log₂n
所以呢就有一下这张图片了
![在这里插入图片描述]()
-
算o(n)
T (n) = O (log₂n)
最后老样子我附上全文的思维导图预览,大家需要的话可以在电脑端下载完整思维导图哦



浙公网安备 33010602011771号