
304
第
11
章
新兴算法
前面章节讲述的都是用于解决常见问题的算法。显然,在你的编程生涯中,你会遇到一
些不在常见类别范畴之内的特殊问题。本章将介绍四种不同的
算法
来解决这些问题。
另一个不同在于本章将会着重关注随机性和概率两方面的内容。在前面的内容中,我们
使用随机和概率方法来分析算法在平均情况下的表现,这里的随机性则是本章算法中非
常重要的部分。实际上我们可以看到,相比确定性算法,概率算法将会是一个更有趣的
选择。在使用概率算法时,对于同样的输入同样的实现,运行两次的结果可能不一样。
而且有时我们会容忍错误的发生,即便算法“声称”无解。
11.1 特定情形下的衍生算法
本书之前提到的所有算法都是运行在一台确定的有限状态自动机上,因此这些算法能够
给出确定的答案。让我们来考虑一下放松一些限制将会产生的算法:
近似算法
与其寻找一个准确的答案,我们也可以接受一个并不完美的解。
并行算法
与其仅限在一台机器上串行执行算法,我们可以在多台机器上同时计算子问题。
概率算法
对于一个问题实例,与其每次都得到相同的结果,我们可以结合随机和近似思想来
计算结果,这样经过多次计算后,这些结果就能趋向于正确结果。
11.2 近似算法
近似算法在算法的正确性和计算效率之间做出了取舍:牺牲结果的准确性,换取更短的