[TOC]
# 什么是算法
**算法就是计算或解决问题的步骤**,有以下特点:
* 输入项:有一个或多个输入(无输入时,算法本身定义了初始条件)
* 确切性:每一步都有明确定义
* 可行性:每一步都可以在有限时间内完成
* 有穷性:在有限步后终止
* 输出项:有一个或多个输出,没有输出的算法是毫无意义的
这就类比做菜,我们需要遵循食谱的步骤才能做出特定的料理。食材配料是输入,食谱里的翻炒加料是【步】,炒熟后即终止,最终可以吃的菜就是输出。
# 算法和程序的区别
算法是以人类能够理解的方式来描述的,不可以直接在计算机上运行;程序是以计算机能够解释的编程语言编写而成的,可以在计算机上运行。
算法需要用程序来表达给计算机。
# 运行时间的计算和表示
求得运行时间最直接的方法就是在计算机上运行一下程序,记录下其花费的时间。但是,就算是同样的算法,由于编程语言和计算机的不同,花费的时间也会产生偏差。
### 如何计算
我们**使用『步骤』来描述运行时间,『1步』就是基本单位**。这样我们就可以**用『计算从开始到结束总共执行了多少步』来计算算法的运行时间**。
### 如何表示
如果某算法的步数为n,则运行时间的表示方法为:
O(n)
举例,把大象装进冰箱里:①打开冰箱门 ②将大象推进去 ③关上冰箱门
在这个例子里,我们的算法运行需要3步,则该算法的运行时间为:
O(3)
# 如何选择算法
计算机只能高速执行一些基本命令如『做加法』或『在指定内存地址上保存数据』等,将一个复杂问题转化成基本命令的组合可以是多种多样的,从而解决某一个问题的算法不止一个。
在算法的选择上,我们的考量标准也会各有不同:
* 对于内存小的计算机,更偏向于在运行过程中不需要耗费太多空间资源的简单算法
* 一般来说,不考虑机器性能,我们最为重视的是算法的运行时间
# 代码库地址
[https://github.com/liuzhen153/play-algorithm-python](https://github.com/liuzhen153/play-algorithm-python)