算法导论 学习笔记 第一章 算法在计算中的作用

非形式地说,算法是任何良定义(指无歧义的、不会导致矛盾的、符合其应满足的所有要求的定义)的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出。算法就是把输入转换成输出的计算步骤的一个序列。

我们也可以把算法看成是用于求解良说明的计算问题的工具,问题陈述说明了期望的输入/输出关系,算法则描述一个特定的计算过程来实现该输入/输出关系。

关于排序问题的定义:
输入:n个数的一个序列<a1, a2, … , an>。
输出:输入序列的一个排列<a1’, a2’, …, an’>,满足a1’<=a2’<=…<=an’。

例如给定输入序列<31, 41, 59, 26, 41, 58>,排序算法将返回序列<26, 31, 41, 41, 58, 59>作为输出。这样的输入序列称为排序问题的一个实例,问题实例由计算该问题解所必需的(满足问题陈述中强加的各种约束的)输入组成。

对于排序算法,哪个更好依赖于以下因素:将被排序的项数,这些项已被稍微排序的程度,关于项值的可能限制,计算机的体系结构,使用的存储设备种类(主存、磁盘、磁带)。

若对每个输入实例,算法都以正确的输出停机,则称该算法是正确的,并称正确的算法解决了给定的计算问题。不正确的算法对于某些输入实例可能根本不停机,也可能以不正确的回答停机,不正确的方法只要其错误率可控有时可能是有用的。

算法可以用英语说明,也可以说明成计算机程序甚至说明成硬件设计,唯一的要求是这个说明必须精确描述所要遵循的计算过程。

阶乘函数比指数函数增长还快。

n个元素的集合有2n个子集(包括空集和它自己),因为对于每个元素,它只有在和不在集合中两种情况。

数据结构是一种存储和组织数据的方式,旨在便于访问和修改。没有单一的数据结构对所有用途均有效,重要的是知道几种数据结构的优势和局限。

为从多核计算机获得最佳性能,设计算法时必须考虑并行性。

为求解相同问题设计的不同算法在效率方面常有显著差异,这些差异可能比由于硬件和软件造成的差别要重要得多。如两种排序算法:第一个是插入排序,为排序n项,该算法所花时间大致等于c1n2,其中c1是一个不依赖于n的常数;第二个是归并排序,为排序n个项,该算法所花时间大致等于c2nlgn,其中lgn代表以2为底n的对数且c2是一个不依赖于n的常数。与归并排序相比,插入排序通常具有一个较小的常数因子(c1<c2),就运行时间来说,常数因子可能远没有对输入规模n的依赖性重要,因此当n比较小时,插入排序通常比归并排序快,但一旦输入规模n变大,归并排序lgn对n的优点将足以补偿常数因子的差别,不管c1比c2小多少,总会存在一个交叉点,超出这个点,归并排序更快。

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

猜你喜欢

转载自blog.csdn.net/tus00000/article/details/114440980