一、前置疑问
- Q1、为什么要学习算法
- Q2、满足什么条件才能说这是一个好算法
- Q3、如何分析算法
二、学习内容
1、什么是算法
- 算法不一定是程序,只有当用计算机程序是设计语言描述时,才是程序。
- 解决一类问题的一种方法,方法可能很多。
- 严格的说法为:一个算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
- 举例:比如计算Fibonacci数列,可以用递归、迭代这种方法,在此方法上用一些思想比如动态规划,提高算法的时间复杂度。在设计该算法的过程中,自然而然的引出算法的5个特征和算法复杂度的概念。
2、算法的5个特征
- 输入:算法可以有零个输入或多个输入。
- 输出:设计的一算法至少满足一个输出。
- 确定性:这里是指写程序的过程中,每条指令都是有确切的定义,不会产生二义性。
- 能行性:在保证确定性后,确保每条指令都是可以通过有限次来完成的。举个例子1 / 3 实际上用代码写出来是0.33333,但是这不是算法中能行性的解释。该特征是想说在计算1/3时,实际上是0.33333……有无穷个三,是不能通过有限次来完成的。
- 有穷性:算法在经过有限步骤后能会终止。程序不一定就会终止,比如设计操作系统是一个大程序,只要计算机一直开机,就会一直运行下去。但是算法必须要终止,必须具备有穷性。
3、为什么学习算法呢(A1,answer 1)
- 如果想写出优秀的代码,必须具备良好的算法计基础。算法是计算机科学的基础,是程序的基石。只要在计算机领域中,内功就是数学和算法,无论时代如果演变,内功不会被淘汰的。
- 美国计算机科学家克努特(D.E. Kn