算法思想
Posted hqx-curiosity
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法思想相关的知识,希望对你有一定的参考价值。
算法复杂性:
算法运行时所需要的计算机资源的量。
<1>时间复杂性,<2>空间复杂性
穷举法的基本思想:
对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试为止。
分治法的基本思想:
将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同;对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题的规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上求出原来问题的解。
二路归并排序算法的基本思想:
将待排序元素分成大小大致相同的两个子集,按照这种方法一直进行下去,直到每个子集中只有一个元素,然后自底向上逐步合并排序,最终合并成有序集合。
贪心法的基本思想:
在对问题求解时总是做出在当前来看是最好的选择,即不从整体最优加以考虑,仅是在某种意义上的局部最优。
贪心法求解问题具有的性质:
<1>贪心选择性质:所求问题的整体最优解可以通过一系列局部最优解的选择来达到。
<2>最优子结构性质:一个问题的最优解包含其子问题的最优解。
贪心法求解问题的基本过程:
<1>建立数学模型来描述问题
<2>把求解的问题分成若干个子问题。
<3>对每一个子问题进行求解,得到子问题的局部最优解。
<4>把子问题的局部最优解合成原问题的一个解。
动态规划的基本思想:
动态规划和分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分治法不同的是,动态规划法中分解得到的子问题不是互相独立的。
动态规划设计的步骤:
<1>划分阶段
<2>确定状态和状态变量
<3>确定决策并写出状态转移方程
<4>寻找边界条件
动态规划求解问题具有的性质:
<1>最优化原理
<2>无后效性:某阶段状态一旦确定,就不受以后决策的影响。
<3>有重叠子问题:子问题之间不是相互独立的,一个子问题在下一阶段决策中可能被多次使用到。
分治法和动态规划的相同点和不同点:
相同点:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
不同点:适合动态规划求解的问题,经分解得到的子问题往往不是相互独立的;
用分治法求解的问题,经分解得到的子问题往往是相互独立的。
回溯法的基本思想:
在问题的解空间树中,按照深度优先搜索策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该节点是否包含问题的解。如果肯定不包含,则跳过对该节点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先搜索策略搜索。
用回溯法求解问题的步骤:
<1>针对所有问题,确定问题的解空间树,问题的解空间树应至少包含问题的一个最优解。
<2>确定结点的扩展搜索规则。
<3>用深度优先方式搜索解空间树,并在搜索过程中可以采用剪枝函数来避免无效搜索。
分支限界法的基本思想:
在问题的解空间树上以广度优先或最小耗费(最大效益)优先方式搜索问题的满足约束条件的一个解或最优解。
用分支限界法设计算法的步骤:
<1>针对所给问题,定义问题的解空间(对解进行编码)
<2>确定易于搜索的解空间结构(按树或图组织解)
<3>以广度优先或最小耗费(最大效益)优先方式搜索问题的满足约束条件的一个解或最优解。
分支限界法的两种主要实现方法
<1>队列式FIFO分支限界法:
按照队列先进先出FIFO原则选取下一个结点为扩展结点。
<2>优先队列式分支限界法:
按照优先队列中规定的优先级选取优先级最高的结点成为当前的扩展结点。
回溯法与分支限界法的相同点和不同点:
相同点:<1>两者在进行问题求解前,都需要完成解空间的定义和组织。
<2>都是在解空间树上搜索来寻找问题的解。
不同点:<1>求解目标不同。
<2>搜索方法不同。
<3>对扩展结点的扩展方式不同。
<4>存储空间的要求不同。
以上是关于算法思想的主要内容,如果未能解决你的问题,请参考以下文章