铁路车站信号
2023-02-02
更新时间:2023-02-03 02:21:07作者:百科
[拼音]:suanfasheji yu fenxi
[外文]:design and analysis of algorithms
设计出高质量的算法,并研究算法所耗费的计算资源与问题规模之间的函数关系。算法设计与算法分析是不可分割的一个整体。算法分析的对象是被设计出的算法,而每一个被设计出的算法只有经过算法分析,才能评价其质量之优劣。
计算效率是一个古老的研究课题。科学技术的发展使得计算日趋复杂,计算量越来越大,许多理论上可计算的问题,常常由于其计算量巨大布变成了现实不可计算的问题,这就产生了理论可计算而现实不可计算的矛盾。20世纪60年代以来,随着各个领域算法研究工作的发展,产生了一个崭新的研究领域,这就是算法的设计与分析。在这一方面已取巨大的进展,它的研究成果对于计算机在各个领域的应用起着重要的作用。
按照算法所处理的对象进行分类,算法设计与分析主要有数值算法和非数值算法两大领域。数值算法主要包括多项式计算、矩阵计算、有限域计算、数论计算等有关数值计算的算法问题。非数值算法主要包括整序搜索、几何问题的计算、离散结构的计算、模式匹配等有关非数值计算的算法问题。
按照计算方式进行分类,则可分为串行算法和并行算法,还可以分为确定型算法、非确定型算法、交错型算法、随机型算法等(见计算复杂性理论)。
另外,还有关于近似算法的研究。对于已经证明不存在快速算法,或者至今还未找到快速算法的问题,例如NP完全问题(见NP完全性), 与其花费大量的时间去寻找精确解,不如花费少量的时间去寻找近似解。
设计算法与分析算法的复杂度,都与计算模型有关,大多属于随机存取机器模型,这是一种确定型的串行计算模型。
随机存取机器是一种理想的计算机,由一个累加器、一个存储器和一个程序组成。存储器具有无限多个寄存器,每个寄存器可以存放任意大的一个自然数。程序是由一些最基本的指令所组成的序列,这些指令通常是指包括直接寻址与间接寻址在内的加、减、乘、除、取数、存数、条件转移和停机。所有的运算和逻辑判断都在累加器中进行。
问题的大小,也称问题的规模,通常用一个自然数作为随机存取机器输入数据量多少的度量。
时间复杂度和空间复杂度分别表示对于规模为 n的输入问题、随机存取机器所耗费的时间与空间,它们都是 n的函数。常用的时间和空间的度量方式是均匀耗费标准:执行一条指令算作耗费一个单位的空间,使用一个寄存器算作耗费一个单位的空间;另一种度量方式是对数耗费标准(见随机存取机器模型)。复杂度函数的计算方式又有两种:规模为n的所有问题的复杂度的最大值称为最环情况复杂度;规模为n的所有问题的复杂度的平均值称为平均情况复杂度。当规模n增加时,复杂度的量级即极限属性称为渐近复杂度。由于理论计算机与现实计算机之间的差异,以及不同的现实计算机之是的差异,也由于算法设计与分析主要关心规模 n比较大的情况,通常讨论的是渐近复杂度。
算法设计的任务是对各类具体的问题设计高质量的算法,以及研究设计算法的一般规律和方法。常用的算法设计方法主要有分治法、动态规划、贪婪法和回溯法等。
把一个大规模问题划分成几个子问题,对每一个子问题采用同样的处理方法,求出各子问题的解答,再把这些子问题的解答组合成整个问题的解答。
当整个问题的解答无法由少数几个子问题的解答组合得出,而依赖于大量子问题的解答,并且子问题的解答又需要反复利用多次时,系统地列表记录各个子问题的解答,据此求出整个问题的解答。
在算法的每一步骤,都采取当前看来可行的或最优的策略。这是一种最直接的方法,只有在一些特殊情况下,贪婪法才能求出问题的解答。对于录求最优解的问题、贪婪法通常只能求出近似解。
为了寻求问题的解答,有时需要在所有的可能性(称为候选对象)中进行系统的搜索,例如在寻求最优解的问题中,就常碰到这种情况。这时,须把各种候选对象组织成一棵树,每个树叶对应着一个候选对象,于是每个内部顶点就表示若干个候选对象(即在此顶点下面的树叶)。回溯法是从树根开始按深度优先搜索的原则向下搜索,即沿着一个方向尽量向下搜索,直到发现此方向上不可能存在解答时,就退到上一个顶点,沿另一个方向进行同样的工作。分叉截断法也是从树根开始向下搜索,不同的是,分叉截断法常常利用一个适当选取的评估函数,来决定应该从哪一点开始下一步搜索(分叉),以及哪一点下方不可能存在解答,从而这点的下方不必进行搜索(截断)。评估函数选得好,就会很快地找到解答,选得不好,就可能找不到解答或者找到的不是最优解(有时它可以作为最优解的一个近似解)。
对于设计出的每一个具体的算法,利用数字作为工具讨论它的各种复杂度,就是算法分析的主要任务。复杂度分析的结果可以作为评价算法质量的标准之一,有时也可以为改进算法的方向提供参考。分析算法的复杂度需要较强的数学技巧,针对不同的算法,采用不同的分析方法。
讨论某些问题类在一定的计算模型中的任意算法的复杂度至少是多大,也是算法分析的一个内容,这就是下界问题。
通常认为,多项式复杂度的算法是现实可行的,而指数复杂度的算法是现实不可行的。