算法基础理论介绍

算法基础理论介绍

最近一段时间阅读了清华大学出版社的“算法设计与分析基础(第二版)”,读完之后,感觉自己对算法有了一个新的认识,在这与大家分享。
该书以分组的方式对部分算法进行了介绍,让读者可以对算法有一个十分清晰的逻辑认识。

第一章主要是对算法概念、日常生活中常见的问题类型、以及基本的数据结构这三方面的介绍。

算法概念

算法是一系列解决问题的清晰指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得所要求的输出。

问题分类

日常生活中,我们可以将常见的问题分为以下几类:排序、查找、字符串处理、图问题、组合问题、几何问题、数值问题等。
排序问题就是按照一定的要求对给定列表中的键(为进行排序选定的关键信息)进行排序。
查找问题就是在给定的集合(包括多重集,即允许多个元素具有相同的值)中寻找一个给定的值,该值也叫查找键。
字符串是字母表中的符号所构成的序列,字符串处理问题主要是指字符串的匹配问题。
图问题是最为古老也最有趣的领域。我们可以将图看作是由一些称为顶点的点构成的集合,其中某些顶点由一些称为边的线段相连。
组合问题是计算领域中组难的问题。主要是出于以下几个原因:
1、随着问题规模的增大,组合对象的数量增长极快,即使是中等规模的实例,其组合规模也会达到不可思议的数量级;
2、还没有一种已知的算法能够在规定时间内,精确地解决绝大多数的此类问题。
几何问题主要是处理类似于点、线、多面体这样的几何对象。比较经典的两个计算几何问题是最近对问题和凸包问题。
数值问题是另一个广阔的具体应用领域,涉及具有连续性的数学问题:像解方程和方程组、计算定积分以及求函数的值等。

数据结构

基本的数据结构主要包括:线性数据结构(数组和链表)、树、集合与字典(可以实现在集合中可以实现查找一个给定元素、增加新元素和删除一个元素这三个操作的数据结构称为字典)

第二章主要是是对算法分析框架的介绍。

分析框架

为了对算法进行度量,该书介绍了一个分析算法效率的一般性框架。在此之前,我们必须了解这两种算法效率:时间效率和空间效率(时间效率指出正在运行的算法运行得有多快;空间效率关心算法所需的额外空间)。
关于输入规模的度量,要根据不同算法所讨论的不同对象来进行考虑。如果算法对于输入的每一个独立字符都要做检查,我们应该使用字符的数量来度量输入规模,如果它的操作是以词为单位的,我们应该统计词的数量。
关于算法运行时间的度量,我们通常不会选择算法程序的运行时间来进行度量(该时间依赖于特定计算机的执行速度、算法程序的实现质量以及编译器的使用种类),而是选择对算法基本操作(算法中最重要的操作)的执行次数进行统计,来进行效率度量。
注意,对于大规模的输入,我们的算法分析框架通常会忽略乘法常量,而仅关注执行次数的增长次数及其常数倍数。

渐进符号

为了对增长次数进行进行比较与归类,计算机科学家使用了三种符号:Ο、Ω、Θ,具体应用如下:
算法基础理论介绍_第1张图片
算法的渐进效率类型如下:
算法基础理论介绍_第2张图片

之后的章节主要就是对各种算法的介绍了,包括:蛮力法、分治法、减治法、变治法、是空权衡、动态规划、贪婪技术、迭代改进、算法能力的极限、超越算法能力的极限。大家有兴趣可以去读一读。

你可能感兴趣的:(概念)