【算法总结】#1 算法概述

算法

  算法(algorithm)在Thomas H. Cormen书中的定义是求解良说明的计算问题的工具。这里提到的良说明就是完全符合ISO标准而不存在任何歧义的说明。

一般来说,问题陈述说明了期望的输入和输出。算法则是描述一个特定的过程来实现该输入\输出的关系。

  进入例子:算法好比是菜谱,我们的输入是食材,输出则是菜肴。而这个烹饪的过程即是算法。同菜谱一样,算法就像是一种做菜的方法,不存在实体。菜谱可以有很多种,但是好吃不好吃又是另一说了。算法也是如此,好的算法,有着精简效率的特性,而差的算法有着一塌糊涂的复杂度。算法复杂度即是我们在算法领域中要讨论的重要课题。

  算法解决的问题通常有如下的特性:

  1、存在许多候选解,但大多数候选解都没有解决手头的问题。寻找一个真正的解或者一个最好的解可能是一个很大的挑战。(如同做出一道好菜一般)

  2、存在实际运用。如求解最短路径,在实际中,找到最短路径对于一些物流和货运公司可能是很好的消息。

  难题:

  在学习过程中大部分时间我们讨论有效算法。我们关于效率的一般量度是速度,即一个算法花多长时间产生结果。然而一些问题,目前还不知道有效的算法。比如后续我们要讨论的NP完全问题。

  为什么NP完全问题有趣呢?

  第一,当前对于NP完全问题,是否存在有效算法是未知的。

  第二,NP完全问题集具有一个非凡的性质,如果某个NP完全问题存在有效算法,那么所有的NP完全算法都存在有效算法。

  第三,有几个NP完全问题类似于一些有着有效算法的问题。

  一个具体的例子:一个具有仓库的快递公司。每天在仓库为每辆车辆装货发出去,将货物送到不同的几个地址。每天结束时,每辆货车必须回到仓库,以便第二天的装货。为了减少成本,公司希望选择投递站的一个序,按此序产生每辆货车行驶的最短距离。这个就是著名的“旅行商问题”,并且它是NP完全的。它没有已知的有效算法。

  效率:

  做一个例子,存在一个计算机A和B,他们共同研究问题1,A耗时0.10s,B耗时0.11,就得到了你想要的结果。当然在这个例子中,你觉得不同的算法可能没有啥区别,只是不到眨眼的功夫。但现在出现了问题2,A耗时20分钟,但是B却需要23天。这时你可能就觉得不太对劲了。这便是算法存在的意义之一。当然更加夸张的例子也是存在的。也许A耗时几十分钟就能解决,而B却需要4*10^20年。

  上面的例子表明我们应该像计算机硬件一样把算法看成是一种技术。整个系统的性能不但依赖于选择快速的硬件而且还依赖于选择有效的算法。正如其他计算机技术正在快速推进一样,算法也在快速的发展。

  是否具有算法知识和技术的坚实基础是区分真正熟练的程序员与初学者的一个特征。有一个好的算法背景你能做的事情会更多。

猜你喜欢

转载自www.cnblogs.com/tanee/p/12369828.html