数据结构DAY02—算法的时间复杂度和空间复杂度分析

在这里插入图片描述

上一节我们聊了一下数据结构的基本概念,今天我们聊聊算法的相关的知识。同样,开始之前我们先思考以下几个问题:

  1. 什么是算法?
  2. 算法有哪些基本特征?
  3. 如何衡量一个好的算法?
  • 算法的基本特性

有一句话几乎成了计算机行业的公知,那就是“程序 = 数据结构 + 算法”,先不辩驳这句话的正确与否,至少体现了数据结构与算法在这个行业的重要性。
在这里插入图片描述

我们通过一个例子来阐明算法的基本特性,不知道大家小时候有没有搬过砖,农村自家造房子,为了省钱通常自家人把小货车运来的砖搬到师傅砌墙的地方(好像暴露年龄了)。假如,早上小明他爸跟他说,把门口的砖搬到二楼,今天师傅砌墙要用。那么小明把所有的砖搬到二楼的过程就相当于一个算法,眼前的砖相当于输入数据,把砖搬到二楼师傅砌墙的地方相当于输出算法是对特定问题求解步骤的一种描述,是指令的有限序列)。现在有以下几种情况出现:
在这里插入图片描述

  1. 小明同一块砖头反反复复搬到楼上又搬下来,被他爸发现揍了他一顿,因为小明这样没法完成搬砖的任务(违反了算法的有穷性必须在有限步骤结束
  2. 小明搬砖的思路千奇百怪,一会砖头放在隔壁二婶家,一会又藏在对面三叔家里,他爸发现又揍了他一顿,看不懂他到底在干什么。(违反了算法的确定性算法实现的每一个步骤不能存在歧义,相同的输入输出必须相同
  3. 他爸想让小明早点把砖头搬完,于是和小明说,小明你给我一次搬30块,小明怒了“你大爷的你来”,因为他根本搬不动。结果小明又被揍了,(违反了算法的可行性一个算法描述的操作必须是可以实现的
  4. 搬砖的时候,小明把隔壁的小花叫来说,你看我力气可大了,手里搬着几块砖头在小花面前秀,不利索的搬到二楼。被他爸发现又被揍了(违反了算法的输出一个算法必须有一个以上的输出
  5. 为了节省成本小明他爸和小明说,你直接去砖厂把砖搬回来吧,今天就不把砖拉到门口了,能节省拉货的钱,这就是零输入程序(算法的输入算法可以有零个或多个输入

以上便是一个算法五个重要特性。

  • 算法设计的要求

为了以后搬砖顺利,小明他爸让小明先说说搬砖的方法,并给他提了几点要求:

  1. 必须把砖搬到正确的位置(算法的正确性,能够解决具体的问题)
  2. 搬砖的方法必须描述清楚,容易理解(算法的可读性,要易于理解)
  3. 搬砖的时候要注意安全戴好安全帽,防止小石子掉下来(算法的健壮性,具备处理非法数据的能力)
  4. 最好能够轻松点有块的法子把砖搬完(算法的时间复杂度和空间复杂度要求
  • 算法的时间复杂度分析

小明他爸根据小明描述的搬砖过程,评估搬砖需要的时间以及搬砖需要工具。这便是算法中的时间复杂度和空间复杂度分析。

说完了基本概念,我们现在来看看一个具体的例子,如下所示:

int main() {
   
    MovingBricks(3000);
}
void MovingBricks(int n) {
   
    int i = 1; // 以搬砖的块数
    while (i <= n) {
   
        printf("搬第 %d 块砖", i);
        i++;   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值