
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
掌握不同的算法能够让Java开发程序员在编程的时候能够适应更多的开发场景,而本文我们就通过案例分析来简单了解一下,常见的Java编程算法都有哪些类型。
1、贪心算法
理论
贪心算法是一种在每一步选择当中都采取当前状态下好或优(即有利)的选择,从而希望导致结果是好或优的算法。
贪心算法在有优子结构的问题中尤为有效,简单地说,就是问题能够分解成子问题来解决,子问题的优解就能递推到终问题的优解。
细节
创建数学模型来描述问题;
把问题分成若干个子问题;
对每一子问题求解,得到子问题的局部优解;
把子问题的局部优解合并成原来问题的一个解。
2、分治算法
理论
分治算法字面上的解释是“分而治之”,就是把一个复杂的问题拆分成两个或多个相同或相似的子问题,再把子问题拆分成更小的子问题......直到后子问题可以简单地求解,原问题的解即子问题的解的合并。
在广义的定义下,所有递归或循环的算法均被视为“分治算法”,也有只将具有少两个子问题的算法作为“分治算法”。
细节
在每一层递归上都有三个步骤:
分解:将原问题分解成若干个规模较小,相对独立,与原问题形式相同的子问题;
解决:若子问题规模较小且易于解决时,则直接解。否则,递归地解决各子问题;
合并:将各子问题的解合并为原问题的解。
3、回溯算法
理论
回溯算法是一种择优选择的算法思想,又称为试探法,按择优条件向前搜索,以达到目标。
将回溯算法映射到一个现实的例子就是:在迷宫当中,通过选择不同的岔路口寻找出口,一个岔路口一个岔路口地去尝试找到出口,如果在中途走错了路,则返回到岔路口的另一条路,直到找到出口。
细节
用回溯算法解决问题的一般步骤:
针对所给问题,定义问题的解空间,它至少包含问题的一个(优)解;
确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间;
以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。
4、动态规划
理论
动态规划的思想是,若要解决一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。
在各种场景中,动态规划在对重复子问题求优解时非常有效。其使用的方法是,在求解的过程中将子问题的结果存储下来重复利用,从简单的问题直到整个问题都被解决。
细节
使用动态规划优化算法,基本上遵循一个固定的流程:
递归的暴力破解:将一个问题拆解成子问题,使用递归的思路解决问题;
带备忘录的递归解法:在递归的过程中,将子问题的结果存储下来重复利用,减少时间耗费;
非递归的动态规划解法:遵循自底向上的推算思路,将递归转换成非递归的循环解法。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。