算法是解决问题的手段和步骤。
针对一个算法,需要知道两件事情:
1.它能否解决特定的问题?
2.它能否有效地使用资源?
如果你写代码不能解决某个问题,或者它能解决问题,但是对资源的利用并不是高效的(比如执行所花的时间太长或者消耗了太多的内存)。那么写的代码并没有真正起到帮助的作用。
这就是为什么我们需要去学习算法。我们想要知道我们的代码是基于可以解决问题并且对资源的使用是高效的点子上。并且我们想要知道我们的解决方案针对所有可能的场景是正确和高效的。或者至少我们知道我们的算法在哪种比较少见的情况下会失败。
即使你可能更倾向于调用API中的函数而不是自己设计算法,你应该知道在实现这些API中所使用的算法和数据结构。针对每一个场景,没有哪一个数据结构是最好的选择。因此我们需要知道每种数据结构的优势和弱点。
编程本来就是跟数据结构和算法有关的事情。数据结构是用来保存数据,算法是用来使用这些数据解决问题的。如果你写程序了,你本身就在使用这两个东西。
你为什么要学习它们呢?因为你要使用它们更好并且有效率。没有学习过算法,当试图解决手头上的问题时,你将面临麻烦。你必须用你自己的方式去解决,这样可能会不是非常高效。没有学习数据结构,你面临的问题是不知道如何去选择哪一种数据结构。是应该去选择链表还是不可变的数组呢?
如果你已经知道数据结构和算法,在你写一行代码之前你就会明白这个问题。难道你不想让自己的代码高效吗?
最后,针对这个问题曾听说过这样的比喻,就好像“有一个这样的应用程序,依靠今天的天气状况将正确地预测明天的天气状况,唯一的问题是,应用程序需要两天的时间进行计算。”