算法(Algorithm)是指一个解决问题的准确而完整的过程,包含一系列解决问题的清晰指令。
例如把大象放进冰箱需要几步,答案是3步:
- 打开冰箱门;
- 把大象塞进去;
- 关上冰箱门。
这三步准确并且完整的描述了解决这个问题的指令,所以从大的角度看,我们的日常生活中充满了算法,如何做一顿饭、如何冲一杯咖啡等等。但是这样去讨论算法就有点广泛了,很多现实问题是拥有近乎无穷变量的混沌系统,我们很难给出一个解决问题的方案。
扯远了,我准备讲的是计算机中算法。
在计算机中,算法就是解决一个问题的计算过程,该过程通过输入,然后通过算法获取一个正确的输出。按照这个思路,算法就是把输入转换为输出的计算步骤。
例如对一个数组进行排序
上述只是无穷无尽的问题中的微不足道的一部分,但已经向我们展示出了算法的应用。同样,对于一个复杂问题,寻找一个真正的解或一个最优解是一个很大的挑战。
如果计算机的计算速度无限快、储存空间无限大且免费,那么研究算法毫无意义,我们只需要关注如何才能正确获得问题的结果就行了。
可惜计算机计算速度很快,但是不是无限快;存储空间是廉价的,但不免费。
所以对于一个算法,时间和空间都是有限的资源,我们需要合理运用这两种资源来解决问题。
因此对于算法的评价引入了时间复杂度和空间复杂度。
算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模 n 的函数 f(n) ,算法的时间复杂度也因此记做:
T ( n ) = O ( f ( n ) ) T(n) = O(f(n)) T(n)=O(f(n))
从想当然的角度和理论的角度看,算法规模越大,所需要的时间就越久,增长的速率则与 f(n) 正相关。
当然时间复杂度还分好几种,如最坏情况下、最好情况下、平均情况下这几种,这些都需要根据具体问题进行具体分析。
算法的空间复杂度的衡量就简单的多,是指算法需要消耗的内存空间。
除了时间和空间复杂度外,还有几项评价算法的指标。
毫无疑问,这是废话!
算法是人设计和使用的,所以得关照一下使用者ㄟ( ▔, ▔ )ㄏ,或者防止过段时间连自己都看不懂。
这个词是英文单词 robustness 英译过来的, 用中文来理解的话大概是稳定性的意思吧,指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。
以上就是关于算法的基本介绍、下一节开始将从排序算法开始进入算法的世界。