算法基础概念
对解决问题的求解步骤的描述,在计算机中表现为指令的有限序列,并且每天指令表示一个或多个操作。其实算法并不是个陌生词汇,例如小学的加减乘除中“先算乘除,后算加减”就是四则运算的算法。到后面文章要讲的指数运算,矩阵运算以及其他的代数运算都是一种算法。
简单来说:算法就是你解决问题的技巧和方式。
算法=控制结构+原操作(对固有数据类型操作)
算法三要素:
操作:
- 算术运算:加,减,乘,除
- 关系比较:大于,等于,小于,不等于
- 逻辑运算:与,或,非
- 数据传送:输入,输出,赋值
控制结构:
- 顺序结构
- 选择结构
- 循环结构
数据结构:
算法操作的对象是数据,数据间的逻辑关系,数据的存储方式以及处理方式就是数据的数据结构。它和算法设计息息相关。
算法基本性质:
- 目的性:算法有明确的目的,能完成赋予它的功能
- 分布性:完成其复杂的功能,由一系列计算机可执行的执行顺序
- 有序性:步骤是有序的,不可以随便改变算法步骤的执行顺序
- 有限性:是有限的指令序列,所包含的步骤是有限的
- 操作性:有意义的算法总是对某些对对象进行操作,使其改变状态,完成其功能
算法设计及基本方法
设计时考虑的质量指标:
- 正确性:首先对于一切合法的输入数据都能得到满足要求的结果。
- 可读性:本质上为了与人的阅读与交流,其次才是让计算机执行,算法应该易于人理解;另一方面,晦涩难读的程序比较容易隐藏多的错误而难以调试。如果一个算法只有设计者才能够理解,那么注定是个失败的算法。
- 稳健性:当输入一些非法的数据时,算法应该能够恰当给出反应和进行处理,而不是产生莫名其妙的的输出结果。
- 高效率和低存储需求:效率指的是算法执行时间,存储量指的是算法执行过程中所需的最大存储空间,(也就是后面所说的时间复杂度,空间复杂度)
基本方法:
- 结构化方法:结构化方法总的指导思想是自顶向下,逐步求精,它的基本原则是功能的分解和模块化
拓展:
1. 自顶向下:
将现实世界的问题经过抽象转化为逻辑空间或求解空间的问题,将复杂的大问题划分成小问题,找出问题的关键和重点,然后抽象的,概括地描述问题。
2. 逐步求精:
将复杂的问题抽象化处理变味相对比较简单的问题,经过若干步精化处理,最后细化到用“3种基本结构”以及基本操作去描述
3. 模块化:把一个大程序按照一定的原则划分成若干个相对独立但相关的小模块的方法(就像一辆车,音响系统,动力系统,他们是单独的模块,但是他们又是相关的)
2.面向对象方法:
所谓的对象是包含数据和对数据操作代码的实体,或者是说在传统的数据结构中加入一些被称为成员函数的过程,因而赋予对象以动作。(因为这个方法是比较主流的编程思想具体不过多阐述)
表示算法的方式(了解):
- 自然语言
- 流程图
- 盒图(NS流程)
-
PAD图(问题分析图)
-
伪代码:是用介于自然语言和计算机语言之间的文字和符号来描述算法的一种工具,它不用图形符号,因此书写方便格式紧凑,易于理解,便于计算机程序设计语言实现。(重点内容)简单理解就是不能直接运行的代码,但是可以看的懂
计算机求解问题的步骤:
- 分析问题
- 建立数学模型(重点)
- 算法设计与选择
- 算法表示
- 算法分析
- 算法实现
- 程序测试和调试
- 结果整理和文档编制