算法是什么(十大经典算法)
常用的算法有:1。分而治之;2.贪婪算法,一种解决某些优化问题的更简单、更快速的设计技术;3.动态规划算法;4.回溯,一种最优搜索方法;5.分支定界法。
最常用的五种算法是:分治算法、贪心算法、动态规划算法、回溯法和分枝定界法。
什么是算法?
算法是指对解的准确完整的描述,是解决问题的一系列清晰的指令。该算法代表了用系统方法解决问题的策略机制。
可以理解为算法是用来解决具体问题的一系列步骤;该算法必须具有以下三个重要特征:
1.穷。在有限数量的步骤之后,必须中止该算法。
2.准确性。算法的每一步都必须精确定义。
3.可行性。特定的算法必须能够在特定的时间内解决特定的问题。
五种最常用的算法
分而治之
分治法是把一个复杂的问题分成两个或两个以上相同或相似的子问题,再把子问题分成更小的子问题……直到子问题可以简单直接地解决,原问题的解就是子问题解的组合。
分而治之方法可以解决的问题一般有以下特点:
1)这个问题的规模缩小到一定程度就很容易解决;
2)问题可以分解成几个更小的相同问题,即问题具有最优子结构性质;
3)该问题分解的子问题的解可以组合成该问题的解;
4)这个问题分解出来的子问题是相互独立的,即子问题之间没有共同的子问题。
贪婪算法
贪婪算法是一种解决一些优化问题的更简单、更快速的设计技术。
贪心法的设计算法具有循序渐进的特点,往往是基于现状,按照一定的优化措施做出最优选择,而不考虑所有可能的全局情况。它节省了为了找到最佳解决方案而必须花费的大量时间。它采用自上而下的迭代方法进行连续的贪婪选择。每一个贪婪的选择都把问题简化成一个更小的子问题。通过每一个贪婪的选择,可以得到问题的最优解。虽然每一步都必须得到局部最优解,但得到的全局解有时不一定是最优的,所以贪婪算法不应该回溯。
动态规划算法
动态规划是数学和计算机科学中用于解决包括重叠子问题在内的优化问题的方法。基本思想是将原问题分解成相似的子问题,通过求解过程中子问题的求解得到原问题的解。动态规划的思想是许多算法的基础,在计算机科学和工程领域得到了广泛的应用。
动态规划方法通常用于解决优化问题,它可以有许多可行解,每个可行解都有一个值。找到具有最优值的解叫做问题的最优解,而不是最优解,可能有多个解达到最优值。
设计动态规划算法的步骤:
1)描述最优解的结构特征
2)递归地定义最优解的值
3)计算最优解的值,通常采用自下而上的方法
4)使用计算的信息来构造最优解
动态规划类似于分治法,结合子问题的解来解决原问题。动态规划和分治法的区别在于,分治法的子问题是相互独立存在的,而动态规划适用于子问题重叠的情况。
追踪
回溯法(exploration and background method)是一种最优搜索方法,根据最优条件向前搜索以达到目的。但是当探索到某一步,发现原来的选择并不优秀或者达不到目标,我们就退一步重新选择。这种先退后走的技术叫做回溯法,满足回溯条件的某个状态的点叫做“回溯点”。
基本思想是在包含问题所有解的解空间树中,按照深度优先搜索策略,从根节点开始探索解空间树。在探索一个节点时,首先要判断该节点是否包含问题的解。如果是,我们将继续从节点探索。如果节点不包含问题的解决方案,我们将一层一层追溯到它的祖先节点。
分枝定界法
分支定界法是一种广泛使用的算法,它非常巧妙,对不同类型的问题有不同的解决方案。
分枝定界法的基本思想是搜索带约束优化问题的所有可行解(有限个)空间。算法实现时,将所有可行解空间连续划分为越来越小的子集(称为分支),并为每个子集中解的值计算一个下界或上界(称为定界)。在每个分支之后,对于那些边界超过已知可行解值的子集,不再进行进一步的分支,从而可以忽略解的许多子集(即,搜索树上的许多节点),从而缩小搜索范围。这个过程一直持续到找到可行解,可行解的值不大于任何子集的极限。所以这个算法一般能得到最优解。