本书讨论用计算机解决问题的方法。这里所说的“方法”并不是指一种程序设计风格或者一种程序设计语言,而是用于解决问题的方法或方法学。例如,假设Barney Beagle希望在电话簿中找到名字“Collie, Colleen”。一种方法是从第一个名字开始,依次查看每个名字,直到找出“Collie, Col... 查看全部[ 1.1 算法 ]
前面曾经提到,无论计算机变得多么快速,内存变得多么廉价,效率永远都是重要的考虑因素。接下来,我们通过对比同一问题的两种算法来说明其原因。 1.2.1 顺序查找与二分查找的对比 前面曾经提到,在电话簿中查找姓名的方法是一种经过修改的二分查找,它通常要远快于顺序查找。下面将对比这两种方法的算... 查看全部[ 1.2 开发高效算法的重要性 ]
为了判断一种算法在解决某种问题时的效率如何,需要分析算法。在前一节比较算法时,引入了算法的效率分析。但这些分析过程相当随意,不够正式。我们现在讨论算法分析中使用的术语以及标准的分析方法。在本书后续部分将遵循这些标准。 1.3.1 复杂度分析 在分析一种算法的时间效率时,并没有计算出实际C... 查看全部[ 1.3 算法分析 ]
前面刚刚阐明,对于时间复杂度分别为n和n²的两种算法,无论两种算法需要多长时间来处理基本运算,当n值足够大时,第一种算法的效率总是高于第二种。现在假定同一问题有两种算法,而且第一种算法的所有情况时间复杂度为100n,第二种算法为0.01n²。根据上面刚刚给出的论述,可以证明,第一种算法的效率最终会高... 查看全部[ 1.4 阶 ]
我们现在已经为复杂算法的设计与分析做好了准备。本书大部分内容都是根据技术而非应用领域进行组织的。前面已经提到,这种组织方式的目的是为了建立一个方法库,在遇到新问题时,可从其中选择可能的解决方法。第2章讨论“分而治之”方法。第3章介绍动态规划,第4章讨论“贪婪方法”。第5章介绍回溯技术。第6章讨论一种... 查看全部[ 1.5 本书概要 ]
1.1节 1. 编写一个算法,在一个包含n个数字的列表(数组)中找出最大数。 2. 编写一个算法,在一个包含n个数字的列表中找出最小数。 3. 有一个包含n个元素的集合,其元素存储在一个列表中。编写一个算法,以该列表为输入,输出该集合的所有三元素子集。 4. 编写一个“插入排... 查看全部[ 1.6 习题 ]