机器学习|程序员都应该精通的六种算法,你会了吗?( 二 )


典型例子包括鸡钱问题 , 有公鸡5 , 母鸡3 , 三小鸡1 , 求m钱n鸡的所有可能解 。 可以采用一个三重循环将所有情况枚举出来 。 代码如下:

五、回溯算法
回溯算法是一个类似枚举的搜索尝试过程 , 主要是在搜索尝试过程中寻找问题的解 , 当发现已不满足求解条件时 , 就“回溯”返回 , 尝试别的路径 。
许多复杂的 , 规模较大的问题都可以使用回溯法 , 有“通用解题方法”的美称 。
【机器学习|程序员都应该精通的六种算法,你会了吗?】典型例子是8皇后算法 。 在8×8格的国际象棋上摆放八个皇后 , 使其不能互相攻击 , 即任意两个皇后都不能处于同一行、同一列或同一斜线上 , 问一共有多少种摆法 。
回溯法是求解皇后问题最经典的方法 。 算法的思想在于如果一个皇后选定了位置 , 那么下一个皇后的位置便被限制住了 , 下一个皇后需要一直找直到找到安全位置 , 如果没有找到 , 那么便要回溯到上一个皇后 , 那么上一个皇后的位置就要改变 , 这样一直递归直到所有的情况都被举出 。
六、动态规划算法
动态规划过程是:每次决策依赖于当前状态 , 又随即引起状态的转移 。 一个决策序列就是在变化的状态中产生出来的 , 所以 , 这种多阶段最优化决策解决问题的过程就称为动态规划 。
动态规划算法适用于当某阶段状态给定以后 , 在这阶段以后的过程的发展不受这段以前各段状态的影响 , 即无后效性的问题 。
典型例子比如说背包问题 , 给定背包容量及物品重量和价值 , 要求背包装的物品价值最大 。
以上就是程序员经常使用的六种经典算法 , 读者们还了解哪些常用的优秀算法吗?欢迎留言哦 。