0
点赞
收藏
分享

微信扫一扫

算法的特征

witmy 2022-04-17 阅读 43
c语言

算法顾名思义是一种计算的方法,就好比小枫喜欢小飞,小枫如何追到小飞的方法,这个方法就可以理解成一个算法。所以算法指的就是在一件有目的的事件中,为了达到目的的一种方法。

为了方便记忆,下列描述算法的特征均用小枫的故事。

算法的五个基本特征:
1.有输入;
2.有输出;
3.确定性;
4.有穷性;
5.有效性;

首先来讲有输入
一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。
这段话怎么理解呢,比如一个问题:某人从宿舍到食堂吃饭的路线如何设计。如果你要解决这个问题,你最先要知道的就是这个某人是谁,并且,随着某人的变化,路线也会变化。
比如当某人是小枫时,可能的路线就是下一层楼直线去食堂,而你给出的这个小枫就是用户输入语句由外部提供的输入。
再如果说,改变一下问题的提问方式,把某人改成小璇,那么问题就变成了小璇去食堂吃饭的路线,那么聪明的你一顶发现了,这个问题不需要我们从外部提供输入,而这个问题本身的小璇就是算法的输入。
总结来说,就是你构建一个算法,这个算法一定要有一个开始的值,就好比“谁做什么有什么结果”里的“谁”。

再来讲有输出
一个算法应有一个或多个输出,输出的量是算法计算的结果。
这个应该好理解一些,俗话说百因必有果,算法也要有结果,而输出就是算法的结果,就比如说,小枫今天去打lol去了,那么他打lol赢了or输了,总有个结果,这个结果就是输出。
算法是必须要有输出的,就像小枫做事一定要有一个结果,拒绝中途摆烂啥的,什么计算机算到一般,突然给你在命令行给你来个啊对对对,爷不算了,这是不可能的,所以输出是必备的。

关于确定性
算法的每一步都应确切地、无歧义地定义。对于每一种情况,需要执行的动作都应严格地、清晰地规定。
这个怎么理解呢,其实就是你做的每一件事都是有意义的,对于结果都是起到一个推进作用。

//比如啊,现在有一件事情是小枫要向小飞表白。
//那么如何达到表白这个目的呢?
//首先我们要导库
#include<stdio.h>
//然后定义主函数
int main{
	//这个算法是不需要输入的也就是0个输入
	//直接定义小枫
	int xf=0//再定义一个小飞
	int xff=2//如何让小枫表白成功呢,就要让小飞飞感受到小枫的爱
	//于是小枫就做了以下步骤:买花,买蜡烛,唱歌,表白
	if(xf==0){
		xf++;//如果小枫啥都还没做,他就先去买花
	}
	if(xf==1){
		xf++;//如果小枫买了花,他就去买蜡烛了
	}
	if(xf==2){
		xf++;//如果小枫买了蜡烛,他就去学唱歌
	}
	if(xf==3){
		return xf>xff;//如果小枫学会了唱歌就跟小飞表白,并返回表白结果
	}
}
上述代码就是有确定性的,每一步都是有自己存在的作用和理由,
那什么是不确定信呢?
就比如你在小枫买花和买蜡烛的中间插入一个
到中午了,小枫要去吃个饭,吃饭这个东西对最后表白就没影响,并不会让小飞飞感受到小枫的爱,所以吃饭这件事就没有存在的必要,就是不确定的。
但你稍微改一下,小枫要去和别的女孩子吃个饭,那直接把GG打在公屏上,那直接G了兄弟们对不对,那这件事就对结果有影响了,那也是确定的。

关于有穷性
一个算法无论在什么情况下都应在执行有穷步后结束。
怎么理解呢,这个好理解,你如果知道了一件事情你不管怎么去做都没有结果,你还会去做嘛?这个时候就会有兄弟来一句,那不总要试试。那我可真是***********。
举个例子,还是小枫啊,小枫今天无聊去数蚂蚁,诶排排坐在路边就在那数,一只两只三只,好不容易数了20220508只诶,蚁后又生了一坨,他又继续数,然后他就一直数,直到有一天小枫变成了老枫,他还在数,毕竟蚂蚁子子孙孙无穷尽也,他就数不完,那小枫数蚂蚁这件事情他有结果嘛?他没有,他是无穷的,他不会停下来,除非小枫正常了。
所以有穷性的本质还是一个算法要有输出,也就是说要在有穷的程序里有结果(结束)。

关于有效性
算法中每一条运算都必须是足够基本的。就是说,它们原则上都能精确地执行,甚至人们仅用笔和纸做有限次运算就能完成。
也就是说,算法中,每一步都是可以理解,可以做的事情,不是不能做的。
举例环节:还是小枫表白的环节把,上述举例的表白需要准备花,需要准备蜡烛巴拉巴拉的,这些东西都是小枫可以去做到的,我们大胆点,如果小飞飞跟小枫说,小枫你今年踢进世界杯夺冠我们就就在一起,小枫直接望着天空平躺:G!!!这是不可能的啊兄弟们,小枫踢进世界杯,这就不是有效的,是无效的,不可能的,他就不具备有效性。
用运算来表示就是,算法内部可以执行1+2,2+5,6+9,但是他不能执行1+2+3+…+∞。因为∞是你表示不出来的,无效的,就像小枫进世界杯,都是想都想不出来的东西。

上述就是算法的五个特性,然后就是如何描述算法把,首先你把算法想成一件事情,事情就可以用语言表述把,除非你跟小枫一样语言能力不完善。
其次你可以画图把,画流程图来表示,每一步做啥然后再做啥,然后就是用伪代码,伪代码是啥呢,就是我在确定性里写的东西就是伪代码,就是他不一定可以运行,但是是你程序的一个大概框架。然后就是N-S图,这个我不是很能理解,记着就行了大概长这个样子。
在这里插入图片描述
@2022.4.17

举报

相关推荐

0 条评论