算法总结
li1376417539
这个作者很懒,什么都没留下…
展开
-
分治算法小结(Java版)
分治算法(divide and conquer)算法设计思想:分(divide):递归解决较小的问题(基本情况除外)。治(conquer):从子问题的解构建原问题的解。适合用分治法的问题:当求解一个输入规模非常大的问题时,用暴力法效率一般得不到保证,如果问题能满足以下几个条件,就可以采用分治法提高解决效率:能将这n个数据分解成k个不同的子集合,且得到k个子集合是可以独立求解的子集问题...原创 2019-03-05 19:51:51 · 1354 阅读 · 0 评论 -
贪婪算法小结(Java版)
贪婪算法:在每一个阶段,可以认为所做出的的决定是最好的,而不考虑将来的后果。通常,这意味着选择的是某个局部最优。当算法终止时,我们希望局部最优等于全局最优,如果是这样的话,这个算法就是正确的,否则我们将得到一个次最优解。若我们得到的局部最优等于全局最优,则称这个问题是可绝对贪婪问题,否则它是一个近似贪婪问题,在不要求最优解时,我们可以使用此算法得到次最优解。贪心法的设计思路:1.创建数学模...原创 2019-03-02 20:26:24 · 1366 阅读 · 0 评论 -
动态规划小结(Java)
动态规划(Dynamic programming)动态规划主要针对最优化问题,他的决策不是线性的而是全面考虑各种不同的情况,分别进行决策,最后通过多阶段决策逐步找出问题的最终解。当各个阶段采取决策后,会不断决策出新的数据,直到找到最优解。每次决策依赖于当前的状态,又随机引起状态的转移。所以,这种多阶段最优化决策问题的过程称为动态规划。一、适用动态规划策略问题的特征:1)最优子结构性质:一...原创 2019-03-07 13:34:02 · 285 阅读 · 0 评论 -
迭代法(Java)
迭代法(iteration),是一种不断用变量的旧值递推出新值的解决问题的方法。迭代又分为递推(正推)和倒推法。1.递推法:从小规模的问题推解出大规模问题的一种方法,也称其为正推。例题:Fibonacci数列;求两个整数的最大公约数。2.倒推法:对某些特殊问题所采用的的违反通常习惯的,从后向前推解问题的方法。例题:猴子吃桃问题。一只猴子摘了若干桃子,每天吃现有桃子的一半多一个,知道第...原创 2019-03-07 18:44:04 · 4388 阅读 · 0 评论 -
蛮力法(Java)
暴力算法理论上十分容易理解,就是将问题可能出现的所有答案都列举出来,然后与条件对比,符合条件的解即为正解。下面我们列举几道例题。1-1 数谜问题ABCAB * A = DDDDDD,求解ABCD分别为多少。public class NumPuz { public static boolean isTrue(int num) { if(num / 100000 <= 0)...原创 2019-03-07 19:51:44 · 1266 阅读 · 0 评论