算法差异
(一)分治法和动态规划法的区别
共同点:二者都要求原问题具有最优子结构性质,都将原问题分成若干个子问题,然后将子问题的解合并,形成原问题的解。
不同点:动态规划法是将待求解问题分解成若干个相互重叠的子问题,即不同的子问题具有公共的子子问题,而分治法是分解成若干个互不相交的子问题。利用分治法求解,这些子问题的重叠部分被重复计算多次。而动态规划法将每个子问题只求解一次并将其保存在一个数组中,当需要再次求解此子问题时,从数组中获得该子问题的解,从而避免了大量的重复计算。
(二)动态规划法和贪心法的区别
共同点:贪心算法和动态规划算法都要求问题具有最优子结构性质。
不同点:动态规划法用到之前的最优解,贪心则不是,贪心无法解决动态规划的问题,但是动态规划能解决贪心的问题。虽然能够应用贪心算法一定能够应用动态规划法,但是一般来说,贪心算法的效率高于动态规划法,因而还是应用贪心算法。动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每做一次贪心选择 就将所求问题简化为规模更小的子问题。
(三)回溯法和分支限界法的区别
共同点:一种在问题的解空间树上搜索问题解的算法。
不同点:求解目标不同,回溯法的目标是找出解空间树满足约束条件的所有解,而分支限界法的求解目标是尽快地找出满足约束条件的一个解;搜索方法不同,回溯法采用深度优先方法搜索解空间,而分支限界法一般采用广度优先或以最小消耗优先的方式搜索解空间树;对扩展结点的扩展方式不同,回溯法中,如果当前的扩展结点不能够再向纵深方向移动,则当前扩展结点就成为死结点,此时应回溯到最近一个活结点处,并使此活结点成为扩展结点。分支限界法中,每一次活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点;存储空间的要求不同,分支限界法的存储空间比回溯法大得多,当内存容量有限时,回溯法成功的可能性更大。
三、适用情况
(一)分治法
适用特征:该问题的规模缩小到一定的程度就可以容易地解决;可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;利用该问题分解出的子问题的解可以合并为该问题的解;所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
典型代表:二分搜索、棋盘覆盖、合并排序、最接近点对问题、循环赛日程表、汉诺塔…
(二)动态规划法
适用特征:该问题问题的最优解所包含的子问题的解也是最优的,即满足最优化原理;某状态以后的过程不会影响以前的状态,只与当前状态有关;子问题之间是不独立的,当前子问题的解将由上一次子问题的解推算出。
典型代表:最长公共子序列、最优二叉查找树、近似串匹配问题、背包问题、…
(三)贪心法
适用特征:该问题局部最优策略能导致产生全局最优解(贪心算法适用的情况很少)。
典型代表:TSP问题(最近邻点)、TSP问题(最短链接)、图着色、多极度调度问题…
(四)回溯法
适用特征:该问题是求解组合数量较大;需要找出该问题的解集(全部解)或者要求回答什么解是满足某些约束条件的最优解。
典型代表:哈密顿回路问题、八皇后问题、批处理作业调度…
(五)分支限界法
适用特征:求解最优化问题。
典型代表:单源最短路径问题、批处理作业调度问题、电路布线问题
算法差异适用情况
最新推荐文章于 2024-03-22 23:14:27 发布