【数据结构入门】1.4.3算法与算法分析(持续更新ing)(算法的时间复杂度分析)

算法与算法分析3(算法的时间复杂度分析)

数据结构 手写笔记+思维导图资源,希望大家支持哈哈
建议大家下点赞收藏 pc端下载思维导图哦 看的清晰一点,内容更详细

分析算法时间复杂度的基本方法

  1. 找出速度最大的那条语句(基本操作语句)
  2. 计算该语句的执行次数(即函数(f(n)))
  3. 用大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;

分析:

  1. 找到执行次数最多的 i = i * 2;

  2. 找到函数f(n)
    关键就是这里要找出来执行次数 x 与关系,并表示成 n 的函数
    若循环执行 1 次:i=12=2,
    若循环执行 2 次:i=2
    2=2²,
    若循环执行 3 次:i=2*2²=2³,
    若循环执行 x 次:i=2ˣ
    设语句②执行次数为 x 次,由循环条件
    i<=n,∴ 2ˣ<=n ∴x<=log₂n
    所以呢就有一下这张图片了
    在这里插入图片描述

  3. 算o(n)
    T (n) = O (log₂n)

最后老样子我附上全文的思维导图预览,大家需要的话可以在电脑端下载完整思维导图哦
在这里插入图片描述

posted @ 2025-05-18 21:08  deepcyc  阅读(28)  评论(0)    收藏  举报