上QQ阅读APP看书,第一时间看更新
1.6 实际应用
本章介绍的各种技术(递归、记忆化、压缩和位级操作)在现代软件开发中已经非常普及,以至于我们无法想象没有它们的世界会是什么样子。虽然没有它们也可以解决问题,但用这些技术解决问题通常逻辑性更强,效率也更高。
尤其是递归,它不仅是许多算法的核心,还是整个编程语言的核心。在一些函数式编程语言(如Scheme和Haskell)中,递归取代了命令式语言中使用的循环。不过,使用递归技术可以实现的任何事情也可以通过迭代技术实现,这一点值得牢记。
记忆化已经成功应用于解析器(解释语言的程序)的加速工作。它适用于所有可能再次请求最近计算结果的问题。记忆化的另一个应用是在程序语言运行时(runtime)。某些程序语言的运行时(例如Prolog的多个版本)会把函数调用结果自动保存下来(自动记忆),这样在下一次进行相同的调用时就不需要执行该函数了。
压缩技术使得饱受带宽限制的互联网世界变得更加流畅。对于现实世界中取值范围有限的简单数据类型,多一个字节都是浪费,于是1.2节中介绍的位串技术就十分有用了。然而,大多数压缩算法都是通过在数据集中寻找模式或结构来消除重复信息的。它们比1.2节中所涉及的内容要复杂得多。
一次性密码本对于普通的加密而言是不大实用的。它要求加密器和解密器都拥有要重建的原始数据的其中一个密钥(示例中为假数据),这很麻烦并且违背了大多数加密方案的目标(保持密钥的秘密性)。有趣的是,“一次性密码本”这一名称来源于间谍在冷战期间使用带有假数据的真实密码纸来创建加密通信的事件。
以上这些技术是编程的基本构件,是其他算法的基础。在后续的章节中,它们会被广泛应用。