贪心算法(greedy algorithm)
贪心算法通过做出一系列的选择来求出问题的最优解。 在每个决策点,它做出在当时看来是最佳的选择。贪心算法可以说是动态规划问题的一种特例,在学习贪心算法之前,必须先得了解动态规划算法。贪心算法总是做出局部最优的选择,并不能总能保证找到全局最优解,那我们怎么才能保证一个贪心算法能够求解一个最优化问题呢?
贪心算法通过做出一系列的选择来求出问题的最优解。 在每个决策点,它做出在当时看来是最佳的选择。贪心算法可以说是动态规划问题的一种特例,在学习贪心算法之前,必须先得了解动态规划算法。贪心算法总是做出局部最优的选择,并不能总能保证找到全局最优解,那我们怎么才能保证一个贪心算法能够求解一个最优化问题呢?
动态规划与分治方法相似,都是通过组合子问题的接来求解原问题,分治方法是将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。动态规划与之相反,应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治算法会反复的求解这些公共子问题,而动态规划对每个子问题只求解一次并保存结果,从而无需重复求解。
无信息图搜索一般需要产生大量的节点,因而效率较低。为提高效率,可以使用一些问题相关的信息,以减小搜索量,这些信息就称为启发式信息。使用启发式信息指导的搜索过程称为启发式搜索,所以启发式图搜索与无信息图搜索之间的区别就是启发式图搜索在OPEN表的排序过程中使用了与问题有关的知识。
之前所说的回溯搜索策略是只保留了从初始状态到当前状态的一条路径,优点是节省存储空间,缺点是被回溯掉的已经搜索过的部分不能再使用。 与之相对应的是,将所有搜索过的状态都记录下来的搜索方法称为“图搜索”。
回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况: