数据结构(C语言)超详细知识点笔记4---算法的基本概念

三 算法的基本概念

本章节笔记概念性内容比较多,我会尽量用通俗易懂的描述和例子结合起来,希望大家能够理解😘

在这里插入图片描述

1.算法的定义

  • 对特定问题求解方法和步骤的一种描述,它是指令的有限序列,每个指令表示一个或多个操作。
  • 算法就是解决问题的方法和步骤

简单来说,算法就像是做一件事情的详细步骤说明书

例如,你要做一份水果沙拉,你可能会有这样的步骤:

  1. 洗水果(这是一个指令,但也包含了洗苹果、洗香蕉等多个操作,

    同时解释了上面那句话"每个指令可以表示一个或多个操作")

  2. 切水果

  3. 把切好的水果放入碗中

  4. 加入沙拉酱并搅拌均匀

在这里插入图片描述

2.算法的描述

算法可以用一下多种语言来进行描述

  • 自然语言:英语、中文…
  • 流程图:传统流程图、NS流程图…
  • 伪代码:类语言-类C语言(例如前两章的抽象数据结构类型)
  • 程序代码:C/C++、Java、Python…

3.算法的特性

  1. 有限性

    有限步骤之内正常结束,不能形成无穷循环。(算法必须是有限的,而程序可以是无穷的)

    有限性就是必须在有限步骤内正常结束,不能陷入无穷循环

    比如:

    你要数 1 到 100 的数字,

    这是一个有明确终点(100)的任务,

    你数完就结束了,这就是有限的。

    如果让你一直数下去,没有尽头,

    那就不符合算法的有限性。

    在这里插入图片描述

  2. 确定性

    算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

    确定性的意思就是每次输入相同的值必须返回一个固定的值,不得随意变化

    比如:

    用计算器计算 2 加 3,

    无论你什么时候按 2 加 3 这个操作,结果都是 5,

    不会出现有时是 5,有时是其他数字的情况。

    在这里插入图片描述

  3. 可行性
    原则上能精确进行,操作可通过已实现的基本运算执行有限次而完成。

    可行性是指算法必须要有一个可行的步骤去完成对应操作

    就像有些学生写编程题,要求你写一个算法并给出输出结果,结果学生不会做直接 printf 输出结果,你们说这是否符合可行性?

    正如你所想,这是不符合可行性的,虽然输出结果一样,但并没有体现解决问题的步骤和方法,没有通过一系列有逻辑的基本运算来得到结果

    再来一个生动的例子,

    你要做一个蛋糕,食谱上的步骤都是可行的,

    比如打鸡蛋、搅拌面粉等,通过这些基本操作的有限次执行,你最终可以完成做蛋糕这个任务。

    如果食谱上有一个步骤是 “用魔法让蛋糕出现”,这就不符合可行性,因为没有办法执行这个操作。

    在这里插入图片描述

4.算法与程序的关系

  • 算法是解决问题的一种方法或一个过程,一个问题可以有多种算法

  • 程序是算法的具体实现

    程序=数据结构+算法

    以整理玩具为例,

    你决定用一排盒子(数据结构 - 数组)来放玩具,

    然后用一种特定的方法(算法 - 比如按颜色分类)来整理玩具。

    这个整理玩具的整个过程就是一个程序。

在这里插入图片描述

5.算法的设计要求

  1. 正确性:算法能够正确的解决实际问题。

    假如你要设计一个算法来计算一个矩形的面积。

    正确的算法应该是长乘以宽(面积 = 长 × 宽)。

    如果按照这个算法进行计算,就能准确地得出矩形的面积,这就是算法的正确性。

  2. 可读性:算法应具有良好的可读性,以帮助人们理解。

    假设你要向朋友解释如何烤蛋糕。

    如果你把步骤写得很清楚,

    比如 “第一步,将烤箱预热到 180 度;第二步,把鸡蛋打散……” 这样条理清晰的步骤,

    你的朋友很容易就能理解,这就像算法的可读性。

    如果步骤写得混乱,你的朋友就很难明白该怎么做。

  3. 健壮性:算法能对输入的非法数据做出反应或处理,而不会产生莫名其妙的输出。

    假如你设计了一个计算器程序。

    当用户输入正常的数字进行计算时,比如 “2 + 3”,程序能正常计算出结果是 5。

    但是如果用户输入了一些不合理的内容,比如 “abc + def”,

    健壮的算法应该能够识别出这是非法输入,并给出提示(自己定义的提示.不是系统的自动报错),而不是崩溃或给出错误的结果。

  4. 高效率性和低存储量:效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。

    假设你要在一个大仓库里找一件特定的物品。

    一种方法是从仓库的第一个角落开始,一个一个地找(这可能会花费很长时间,效率低);

    另一种方法是你有一个物品索引表,通过查看索引表可以快速定位到物品所在的位置(这种方法效率高)。

    同时,如果这个索引表不需要占用很大的空间来存储,那就满足了低存储量的要求。

    在算法设计中,类似地,要追求快速运算和较少的存储资源占用

地找(这可能会花费很长时间,效率低);

另一种方法是你有一个物品索引表,通过查看索引表可以快速定位到物品所在的位置(这种方法效率高)。

同时,如果这个索引表不需要占用很大的空间来存储,那就满足了低存储量的要求。

在算法设计中,类似地,要追求快速运算和较少的存储资源占用

我已经尽可能将枯燥的概念性知识转化为有趣的例子和图片,希望你们能够理解算法的基本概念,如果喜欢的话.麻烦点一个赞,谢谢😘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值