声明:该文章是博主阅读《算法》的读书笔记。由于博主能力有限,中间有过错之处希望大家给予批评指正,一起学习交流。
当我们编写计算机程序时,通常是在实现一种先前设计好的、用来解决某问题的方法。这种方法通常与所使用的计算机无关(可能对多种计算机和多种计算机程序同样适用)。计算机科学中的算法(algorithm)用来描述适合用计算机程序来实现的问题。
大部分算法的重点在于计算中涉及的数据的组织方法。按这种方式创建的对象被称为数据结构(data structure)。因此,算法与数据结构相互配合发挥作用。
用计算机来辅助结局问题时,可能面临不同途径。对于小型问题,只要正确解决问题就行;对于大型问题(或者庞大数量的小型问题),不得不设计出尽可能有效利用空间和时间的方法。
学习算法设计的主要原因是,设计原理赋予我们节省巨大开销的潜力,甚至让我们完成那些本来不可能完成的任务。
当开发一个庞大或复杂的计算机程序时,必须花大力气来理解和定义将要解决的问题,管理其复杂性,并将它分解成可以轻松实现的较小的子任务(subtask)。
计算机程序通常是过于优化。也许并不值得我们花大力气来保证某个特殊算法的实现是最有效的,除非该算法被应用于大量任务中,或者多次被使用。否则,一个完善、相对简单的实现就足够了。
特定任务的最佳算法的选择可能是一个复杂的过程,也许包括复杂的数学分析。包含研究此类问题的计算机科学分支被称为算法分析。