26考研——数据结构概述(1)

408答疑



一、数据结构的基本概念

二、算法和算法评价

三、参考资料

鲍鱼科技课件

b站免费王道课后题讲解:
在这里插入图片描述

网课全程班:
在这里插入图片描述

26王道考研书


四、总结

时间复杂度的通俗理解

O(1)

  • 描述:表示算法的执行时间不随输入规模 n n n 的变化而变化,即无论输入规模如何,算法都能在常数时间内完成。
  • 例子:酒店管理员将100把钥匙分别存放在100个编号格子中。当需要取出某号钥匙(如10号)时,直接根据编号定位到对应格子,无需额外操作。
  • 特点:无论钥匙总数是100还是1000,查找时间均为常数级别。类似计算机通过索引直接访问内存地址的机制。

O(n)

  • 描述:表示算法的执行时间与输入规模 n n n 成线性关系,即输入规模增加时,算法的执行时间也线性增加。
  • 例子:酒店管理员将钥匙编号后用绳子串起来,需要从一串钥匙中找到特定房间的钥匙,这需要逐个检查每个钥匙。
  • 特点: 数据量增加时,查找时间成比例增加(如100把钥匙需查100次,1000把需查1000次)。适用于无法直接通过索引定位的线性结构(如链表)。

O( n 2 n^2 n2)

  • 描述:表示算法的执行时间与输入规模 n n n 的平方成正比,即输入规模增加时,算法的执行时间呈平方级增加。
  • 例子:酒店扩大到100层,每层100个房间,钥匙按楼层和房间号排序,需要先找到楼层编号,再找到房间编号,这相当于双层循环的代码。

O( l o g 2 n log_2n log2n)

  • 描述:表示算法的执行时间与输入规模 n n n 的对数成正比,即输入规模增加时,算法的执行时间对数级增加。
  • 例子:钥匙有序存放时,采用二分查找法,例如查找23号钥匙:
    1. 将100把钥匙从中间(50号)分为两部分,确定23号在前半部分(1-50)。
    2. 继续将前半部分从中间(25号)分割,确定23号在1-25之间。
    3. 重复此过程,每次将搜索范围减半,直至找到目标钥匙。
  • 特点:数据量翻倍时,操作时间仅增加一步。效率显著高于线性查找,适用于有序数据集(如二叉搜索树、二分算法)。

程序时间复杂度分析

循环主体中的变量参与循环条件的判断

在用于递推实现的算法中,首先找出基本运算的执行次数与问题规模之间的关系式,解得最高次幂,则算法的时间复杂度为 O ( n k ) O(n^k) O(nk)。例如:

  1. 设基本运算 i = i ∗ 2 i=i*2 i=i2 的执行次数为 t t t,则 2 t ≤ n 2^t \leq n 2tn,解得 t ≤ log ⁡ 2 n t \leq \log_2 n tlog2n,故 T ( n ) = O ( log ⁡ n ) T(n) = O(\log n) T(n)=O(logn)
int i = 1;
while (i <= n)
    i = i * 2;
  1. 设基本运算 y = y + 1 y=y+1 y=y+1 的执行次数为 t t t,则 t = y − 5 t=y-5 t=y5,且 ( t + 5 + 1 ) ( t + 5 + 1 ) < n (t+5+1)(t+5+1) < n (t+5+1)(t+5+1)<n,解得 t < n − 6 t < \sqrt{n}-6 t<n 6,即 T ( n ) = O ( n ) T(n) = O(\sqrt{n}) T(n)=O(n )
int y = 5;
while ((y + 1) * (y + 1) < n)
    y = y + 1;

循环主体中的变量与循环条件无关

此类题可采用数学归纳法或直接累计循环次数。多层循环时从内到外分析,忽略单步语句、条件判断语句,只关注主体语句的执行次数。此类问题又可分为递归程序和非递归程序:

  • 递归程序一般使用公式进行递推。时间复杂度的分析如下:
    T ( n ) = 1 + T ( n − 1 ) = 1 + 1 + T ( n − 2 ) = ⋯ = n − 1 + T ( 1 ) T(n) = 1 + T(n-1) = 1 + 1 + T(n-2) = \cdots = n - 1 + T(1) T(n)=1+T(n1)=1+1+T(n2)==n1+T(1)
    T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n)

  • 非递归程序的分析比较简单,可以直接累计次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

408答疑+v:18675660929

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值