买了一本电子书
这不又来大更新了?这回主要原因是买了一本电子书的C语言学习,400多页,还是清华出版社,瞬间就来了兴趣了啊!所以,边学习边写笔记,歪瑞古德啊,那么今天的笔记为算法
算法的特性
通过本次的电子书学习,了解到算法拥有以下的特性
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
特征 | 电子书中解释 |
---|---|
有穷性 | 一个算法必须在执行有穷之后结束且每一步都可在有穷时间内完成,不能无限的执行下去,例如,如果要编写一个由小到大的整数累加的程序,这时候要注意一定要设一个整数的最上限,也就是加到那个数为止,若没有这个最上限,那么程序将无终止的运行下去,也就是常说的死循环 |
确定性 | 算法的每一个步骤都应当是确切定义的,对于每一个过程不能有二义性,,将要执行的每一个动作必须作出严格而清楚的规定 |
可行性 | 算法中的每一步都应杠能有效运行,也就是说算法应是可行的,并且要求最终得到正确的结果。 |
输入 | 一个算法应有零个或多个输入,输入是在执行算法时需要从外界取得必要的加算法所需的初始量等一些信息 |
输出 | 一个算法有一个或多个输入。什么是输出?输出就是算法最终所求的结果。编写程序的目的就是要得到一个结果,如果一个程序运行下来没有任何结果,那么这个程序本身也就失去了意义 |
例子
其中可行性中给出了一段例子
int ,x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
if(y==0)
z=x/y
那么这段代码就是错误的,是一个无效的语句,因为0不可以做分母
其中输入也有例子,分别是多个输入和0个输入
多个输入
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
0个输入
main()
{
printf("hello world!");
}
算法的优劣
通过这篇,我了解到算法拥有以下几个优劣
- 正确性
- 可读性
- 健壮性
- 时间复杂与空间复杂度
特征 | 电子书中解释 |
---|---|
正确性 | 也就是缩写的算法能满足具体问题的要求,即对任何合法的输入算法都会得出正确的结果。 |
可读性 | 指算法被写好之后,该算法被理解的难易程度。一个算法可读性的好坏十分重要,如果一个算法比较抽象,难于理解,那么这个算法就不易交流和推广使用,对于修改,扩展,维护都十分不方便。因此在写一个算法的时候,要尽量将该算法写的简明易懂 |
健壮性 | 一个程序完成后,运行该程序的用户对程序的理解各有不同,并不能保证每一个人都能按照要求进行输入。健壮性就是指当输入的数据非法时,算法也会做出相应的判断,而不会因为输入的错误造成瘫痪。 |
时间复杂与空间复杂度 | 时间复杂度简单地说就是算法运行所需要的的时间。不同的算法具有不同的时间复杂度,当一个程序较小时感觉不到时间复杂度的重要性,当一个程序特别大时便会察觉到时间复杂度实际上是十分重要的。因此写出更高速的算法一直是算法不断改进的目标。空间复杂度是指算法运行所需的储存空间的多少,随着计算机硬件的发展,空间复杂度已经不再显得那么么重要 |
算法的描述
其中涉及的教程不是很多,类似于逻辑数学,大部分是流程图,我的理解就是,命几个字母的值,然后进行判断,如果是则进行什么,不是则进行什么,如此反复循坏,又或者不是那个值直接结束,也就是判断。
算法的基本结构
两位大帅哥Bohra和Jacopini提出了3种结构,即顺序结构 选择结构 循坏结构 这 三种
如果不按书上的讲解,我自己的理解就是
结构 | 自我解释 |
---|---|
顺序结构 | 按照顺序执行的 |
选择结构 | 其中拥有一个判断,根据条件某个字母是否成立而进行选择执行A,B,C,D等等 |
循环结构 | 反复地执行,直到不符合才终止 |
其中循坏结构又分为俩种
当型循环
先判断P是否成立,成立执行A,执行完后再判断,如果成立再执行A如此反复,直到P不成立,不执行循环
直到型循环
直到型循环是先执行A,然后判断P是否成立,如果成立再执行A,再判断,再成立,再执行A如此反复,直到不成立时跳出A停止循环
N-S流程图
N-S流程图是另一种算法表示,他的根据是: 既然任何算法都是由前面三种结构组成的,则各基本结构之间的流程线就是多余的,因此去掉所有的流程线,全部写在矩形框内,N-S图也是算法的一种结构化描述方法,也有3中基本结构
算法小结
主要是介绍了算法的基本概念和描述,特征,算法优劣性,算法描述的三个方法