算法的基本概念

首先我们要知道算法是什么?

一个算法是为了解决某一特定的问题而制定的一个实现过程。

算法的特性:

1.有穷性:一个算法必须在执行有穷步骤后结束且每一步都可在有穷的时间内完成,不能无限的执行下去。如果没有上限,那么程序将无休止的执行下去,也就是所谓的死循环。

2.确定性:算法的每一个步骤应当是确切定义的,对于每一个过程不能有二义性,将要执行的每个动作必须做出严格而清楚的规定。

3.可行性:算法中的每一步都应当能有效的执行,并要求最终得到正确的结果。

算法的优劣:

1.正确性:也就是所写的代码能满足具体问题的需求,并且任何合法的输入算法都会得出正确的结果。

2.可读性:是指算法被写好之后,该算法理解的难易程度,一个算法可读性的好坏十分重要。如果一个算法比较抽象且难以理解,那么这个算法就不利于交流和推广使用,对于修改、扩展、维护来说都十分不方便,因此,在追求高效的同时,也应是算法尽量简明易懂。

3.健壮性:这个就是指当输入数据非法时,算法也会做出相应的判断,而不会因为输入的错误而造成瘫痪。

4.时间复杂度和空间复杂度:简单的说,时间复杂度就是算法运行所需的时间。不同的算法具有不同的时间复杂度,当一个程序较小时,就感觉不到时间复杂度的重要性,但是当一个程序特别大时,便会察觉到时间复杂度实际上是十分中要的。因此写出一个高效的算法一直是算法不断改进的目标。空间的复杂度是指算法运行所需的存储空间的多少,随着计算机硬件的发展,空间复杂度已经不再显的那么重要。


算法的描述方式:

算法包含算法设计和算法分析两方面内容,算法设计主要研究怎样针对某一特定类型的问题设计出求解的步骤,算法分析则要讨论所涉及出来的算法步骤的正确性和复杂性。

因此对一些问题的求解的步骤,需要一种表达方式,也就是所谓的算法描述。算法描述有很多种方式,例如:

1.自然语言:自然语言就是人们通常用的语言,这种表示方式通俗易懂。

任意输入3个数,求者三个数中的最小数

①:定义4个变量分别为x、y、z以及min。

②:输入大小不同的三个数分别赋值给x、y、z。

③:判断x是否小于y,如果小于,则将x的值赋值给min,否则将y的值赋值给min。

④:将min和z进行比较,如果小于则执行第⑤步,否则就将z的值赋值给min。

⑤:将min的值输出。


2.流程图:使用流程图的话,大家首先要了解一下流程的的一些常用基本符号。

流程图符号:

算法的基本概念_第1张图片


输入一个数,如果大于0输出1,等于0输出0,否则输出-1。

算法的基本概念_第2张图片


Bohra和Jacopini为了提高算法的质量,经过研究提出了3种基本结构:即顺序结构,选择结构和循环结构。因为任何一个算法都可以用这3中基本结构组成。这3中基本结构之间可以并列,可以相互包含,但是绝对不允许交叉。整个算法都是由3种基本结构组成的,所以只要规定好3种基本结构的流程图的画法,就可以画出任何算法的流程图。


3.N-S 流程图:N-S图另一种算法表示法,它的根据:既然任何算法都是上面介绍的3种结构组成的,则各基本结构之间的流程线就是多余的,因此去掉了所有的流程线,将全部的算法写在一个矩形框中。他同样也具有三种基本结构。

求0~100的和。

算法的基本概念_第3张图片


4.伪代码表示:用传统的流程图和N-S图表示算法直观易懂,但画起来比较费事,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的。因此,流程图适宜于表示一个算法,但在设计算法过程中使用不是很理想的(尤其是当算法比较复杂、需要反复修改时)。为了设计算法时方便,常用一种称为伪代码的工具。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章一样,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,易懂也便于向计算机语言算法(即程序)过渡。


你可能感兴趣的:(算法)