一、什么是算法?
算法,就是计算机对解题方案完整又准确的描述。通俗的说就是解决某项问题所采取的方法和步骤。
算法主要分成两大类:数值算法、非数值算法。
1)数值算法:目的是求数值的解,特点就是少量的输入和输出、大量复杂的运算。
2)非数值算法:目的是对数据进行处理,特就是大量的输入和输出、简单的运算,应用面十分广泛。
二、算法的基本特征
1、能行性
2、确定性
3、有穷性
4、可以没有输入或者多个输入但是至少有一个输出
理解:算法是对计算机的解决问题方案的描述,那每一步都应该是可以执行并且是确定、没有歧义的,使用者可以不通过输入设备进行输入但是通过算法,计算机一定要有一个输出的结果,这也要求了算法步骤必须有限,否则计算机将会一直按照算法的步骤一直算下去,就一直没有结果输出。
三、算法的表示
这里主要介绍几种类型的描述算法的工具:自然语言、流程图、伪代码、程序设计语言
1)自然语言:就是人们常用的语言描述,这是通俗易懂的。
2)流程图:就是用图画的形式,随着时代的发展流程图的呈现也在不断地进步,细分下来有:传统流程图、N-S流程图(盒图)、PAD图
传统的流程图,就是用箭头和图形组合的形式展现
盒图,也就是N-S流程图,它是在传统的流程图的基础上演化而来,主要体现在课可以嵌套使用并且省掉的箭头
PAD图,是一种以二维树形结构图的方式对结构化程序进行描述,因此由PAD图设计出来的程序也必然是结构化程序,通过软件工具可以将这样的PAD图翻译成程序代码。见下表:
上部分是盒图,下部分是PAD图
3)伪代码(PDL):“伪”就代表假,它是使用介于自然语言和计算机语言的文字和符号来描述算法。它本质上时不能直接被计算机理解执行的,需要借助高级语言的控制结构和自然语言来描述,运用缩进格式来表示控制结构的嵌套,比如像:procedure、begin、end、loop、if、then等等。特点就是少量的语法规则和大量的自然语言描述,使用起来比较灵活。
4)程序设计语言:就是我们常说的C语言、Python,java等等编程语言。
四、算法的分析角度
主要就是几个方面:正确性、简单性、时间复杂度、空间复杂度
1)2)正确性和简单性就是算法(解决方案的描述)对于解决这个问题而言是不是正确的,是不是足够简单。也就是解决这个问题,你的解决方案是否正确和解决方式是否足够简单。
3)时间复杂度:就是算法在机器上执行运算花费的时间。主要分成了“事前分析估算”和”事后统计“。
”事后统计“就是字面意思,在执行完算法之后,统计运算需要的时间,但是这需要执行完程序之后并且受到硬件设备的影响,这样的统计往往会难以判断执行运算时计算机需要的时间。
”事前分析估算“,就是在执行算法之前的时间估算,主要基于以下几个因素:高级语言的种类(越是高级的语言,执行效率越低)、采用的算法策略、编译器的质量、问题的规模等等
显然,一个算法在不同语言的描述、用不同编译器编译、不同计算机上执行所耗费的时间都不一样。
算法=控制结构(顺序、分支、循环)+原操作(固有的数据类型的操作),算法时间就取决于两者的综合效果。
抛开计算机软硬件的影响,用问题的规模来决定一个算法的”工作量“,用n来表示问题规模的函数
时间复杂度的呈现等级有以下几个,见下表:
随着n的不断增加,时间复杂度也不断增加,算法的执行效率就越低。
4)空间复杂度:就是一个算法在运行过程中临时占用的存储空间的大小。借用书上的描述一用:
最后,作为笔记,肯定有很多的不足之处,希望大家多多包涵,有什么不准确的地方也希望能收到指正,阿白会更改哒!