赞
踩
目录:
在不同的书中对于算法的描述各有千秋,下面用一句简单的话来描述算法:
算法:解决问题的方法和步骤
一个程序主要包块两个方面的信息:
(1)数据:在程序中要用到那些数据,以及这些数据的类型和数据的组成形式。
(2)算法:解决某个问题所选用的方法,以及用该方法解决问题的步骤。
算法解决的不仅仅是 数值计算 问题,更多的是解决 非数值运算 问题;
(1)数值运算: 对于数值运算往往有现成的模型,因为人们对数值运算研究比较深入,算法比较成熟,几乎所用数值运算都可以找到问题解决方法。问题:加减乘除、判断闰年、求方程的根……
(2)非数值运算: 非数值运算的种类繁多,要求各异,难以做到全部都有现成的答案,因此只有一些典型的非数值运算(例如排序算法、查找搜索算法等)有现成的、成熟的算法可供使用。非数值运算最常见的就是用于事务管理领域,如:图书检索、学生电子信息档案、人事管理和行车调查管理……
1.有穷性
:一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。 一个算法应包括有限的操作步骤,这里的有穷性意思是指“在合理的范围之内”,比如让计算机运算10000年才结束,那该计算就不能算有效的算法,究竟什么算是“合理限度”,由人们的常识和需要判读。
2.确定性
:算法中的每一个步骤都应当是确定的,不能是含糊和模棱两可,使算法的执行者或阅读者都能明确其含义及如何执行 。例如“手举过头顶”,这个步骤就是不确定的,没有说明是右手、左手、还是双手举过头顶。
3.有效性(可行性)
: 算法中每一个步骤都应当能有效地执行,并得到确定的结果。 例如,若b=0,则执行a/b是不能有效执行的,因为分母不能为0。
4.有0个或多个输入
:所谓输入是指在执行算法时需要从外界取得必要的信息。 例如,求任意两个整数的最小值,则需要用键盘输入2个整数,然后才能输出最小值。当然,一个算法也可以没有输入,比如直接输出一行信息“Hello world!"。
5.有1个或多个输出
:算法的目的就是为了求解,“解”就是输出,无输出的算法没有任何意义。 注意,算法的解,不仅仅是通过运算得到的数值,还可以是文字。
表示一个算法常用的方法有:自然语言、传统流程图、结构化流程图(N-S流程图)、伪代码、计算机语言等
1.
自然语言:用人们日常使用的语言(汉语、英语等其他语言)表示算法,但此方法表示的含义往往不太严格,而且描述分支和循环的算法不太方便。因此,除了简单的问题外,一般不用自然语言表示算法。
2.
传统流程图:直观形象、易于理解。流程图是用一些图框来表示各种操作。常用流程图符号:
菱形框:根据给定条件是否成立决定如何执行其后的操作,它有一个入口,两个出口。
其它流程框就不作介绍了,大家应该都知道,不懂得可以搜一下看看。
下面是一个例子:
判断2000-2500年中的每一年是否为闰年,将结果输出。
传统流程图弊端:没有严格限制,使用者可以不受限制使流程图转来转去,毫无规律,难以读懂。
随着发展,在1966年,Bohra和Jacopini提出来3中基本结构:顺序结构、选择结构、循环结构。由以上3种基本结构组成的算法结构,可以解决任何复杂问题。
3.
N-S流程图
1973年,美国学者I.Nassi和B.Shneiderman提出来一种新的流程图形式,将使用3种基本结构的流程图中的箭头完全去掉,全部算法写在一个矩形大框内。这种流程图又称 N-S结构化流程图 (N、S是2位学者的英文姓氏首字母)
例子:判断2000-2500年中的每一年是否为闰年,将结果输出。
例子:判断素数
4.
伪代码
用传统的流程图和N-S图表示算法直观易懂,但画起来比较费事,而在修改比较麻烦。因此,流程图适合于表示一个算法,但在设计算法过程中使用就是不很理想。为了设计算法方便,常用一种称为伪代码(peseudo code)的工具。
伪代码:介于自然语言和计算机语言之间的文字和符号来描述算法。优点:书写方便,格式紧凑,修改方便。缺点:伪代码写算法并无固定的、严格的语法规则。
总结:
以上是4种原始的表示算法的方式,在程序设计中可根据需要和习惯选用。个人认为以上4种表示算法的方式只需了解,能看懂以上4种方式表示的简单算法问题即可。(当然,如果对所学专业有用或感兴趣可锻炼一下你的画画能力)
通过以上4种表示算法的方法介绍,一是让我们了解算法表示方式的发展历程,二是让我们明白好算法的重要性。
5.
用计算机语言表示算法
用计算机语言(C语言等)表示算法必须严格遵循所用的语言的语法规则,在前面写的最简单的程序(Hello world!及详解)文章中就介绍了C语言最简单程序,以及C语言的一些最基本语法规则。
结构化程序设计方法的基本思路:把一个复杂问题过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
得到结构化的程序一般包括以下4个步骤:
(1)自顶而下
(2)逐步细化
自上而下、逐步细化:将问题求解由抽象逐步具体化的过程。(类似写文章时拟提纲)
(3)模块化设计:将程序模块,分成若干个子模块(一般不超过50行),划分子模块时要注意模块的独立性(每一个模块完成一项功能)
(4)结构化编码:将以设计好的算法用计算机语言来表示(结构化语言:C语言、Visual Basic等)
其它有关文章:
1.
C语言重要知识点总结【1】:C语言与计算机语言(内含Hello world!详解)
2.
C语言重要知识点总结【2】:程序设计概念
了解了 程序设计、C语言 和 算法 的基本知识之后,接下来我们将正式进入C语言程序设计的学习:顺序结构设计、选择结构设计、循环结构设计、数组、函数、指针、结构体……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。