美文网首页
第一章 算法基础——基础算法分析类型

第一章 算法基础——基础算法分析类型

作者: 文颜 | 来源:发表于2019-10-12 20:34 被阅读0次

    1.1基础算法分析类型

    1.1.1 分治法

    核心思想:分而治之

    原理:先将一个复杂的问题拆解为两个或多个相同的子问题,然后将子问题依然进行分治法处理,直到子问题已经可以直接求解,最终按照问题的拆解顺序,从子问题开始逐步将问题合并为一个大问题,层层向上,最后得到改实际问题的解。在算法领域通常是越是规模小的问题越容易求解,分治法也是充分利用此优势发挥其价值。

    可解决问题的类型:

    (1)待求解的问题是可以拆分为若干相同或相似的子问题,子问题之间相互独立。

    (2)该问题可以在小规模情况下成立,并得到解。

    (3)问题被拆分后的子问题的解之间可以进行合并。

    解决问题的步骤:

    一、分解问题;

    二、解决子问题;

    三、合并解,得到原始问题的解。

    分治法常采用递归的方式进行求解,原因是递归可以有效地将问题拆解为相似且更小的子问题,并且子问题之间相互独立,互不干扰。例如:二分查找、归并排序等。

    缺点:利用分治法时,子问题之间存在重复子问题,则可能影响分治法的计算效率,这是因为相同的问题在不同的子问题中均被求解。此时,可考虑利用动态规划的方式对问题进行求解。

    1.1.2 动态规划法

    动态规划是一种将原问题拆解为若干相对简单子问题的求解方法,常常用于重叠子问题最优子结构性能的问题。通过动态规划的方法,计算量则远远小于一般的解法。原因在于对于重叠子问题,一般情况下会被重复计算,而动态规划则是将重复计算简化问计算一次据放入到结果表中,在下一次计算时则从结果表中查询,从而直接获得结果,因此使性能得到提升。

    动态规划的方法是一个从初始状态开始计算结果,后续的计算都依赖于前一个计算结果的状态,最终获得解的过程。

    主要步骤:

    (1)划分问题;

    (2)确定状态和状态变量;

    (3)确定状态转移过程;

    (4)寻找终止条件。

    1.1.3 回溯法

    回溯法是一种不断尝试获得问题解的方法,尝试的过程是一种不断枚举的过程。

    回溯法在所有的解空间中,按照深度优先尝试的原则,从初始状态不断深入到各个解空间中,解决过程如下:

    (1)对需要解决的问题,确定问题的解空间,确保在解空间的范围内存在最优解。

    (2)确定回溯法的尝试规则及寻找的方式,以减少不必要的计算。

    1.1.4 分支限界法

    分支限界法是通过广度优先或者最小代价优先的方式尝试性解决问题。其搜索策略是先通过在路径选择处,生成其所有的下一步分支,计算每一个分支的某个条件限定值,这些条件限定值即为分支的界限,然后从这些分支中选择某个的分支作为下一个节点,使问题的搜索路径向着最优解的分支进行,此处选择分支的方式主要有两种:

    (1)FIFO(First In First Out):先进先出;

    (2)最小代价。

    分支界限法的核心思想:需要确定某个分支的上下界,一遍搜索一边移除某些不满足条件的分支,以提升问题解决得效率。

    1.1.5 贪心法

    ”贪心“是指当前求解的过程在当前的条件下是最好的选择,并未从整体上触发考虑,属于局部最优解。改方法没有一定固定的解题框架,重点在于贪心法的贪心策略。

    贪心算法并不是一定会使所有问题得到全局最优的解,因此贪心算法适用于通过局部最优解可以获得全局最优解的问题。

    基本思路:

    (1)通过数学模型描述问题;

    (2)将原始问题拆解为若干子问题,并对每个问题求解,获得每个子问题的局部最优解;

    (3)将每个子问题的局部最优解进行合并,获得对整个问题的全局最优解。

    对若干个子问题的局部最优合并后的解是否是全局最优解的问题,需要通过实际问题进行分析,如果子问题之间相互独立,不相互影响,则通过合并基本上都属于全局最优解。

    相关文章

      网友评论

          本文标题:第一章 算法基础——基础算法分析类型

          本文链接:https://www.haomeiwen.com/subject/kkjcmctx.html