
Java算法
文章平均质量分 69
大帅_Sun
投石问路,人自知,
展开
-
递归与迭代
递归和迭代的解释可以搜到很多,不论是程序举例还是比喻举例等等,解释的方法也是五花八门,但每个人都应该有一个自己的例子(哪怕是借用别人的变成自己的),这样才能记得住。举个栗子:现在给定一个烧水的方法:从0度烧到100度,再给三个盛满水的水壶,水壶里水的温度分别是0度、50度和80度。要求:分别用递归和迭代的思维方式烧开三壶水。递归:实际上,递归就是先给定一个函数(方法)F,然后在F的函数原创 2017-03-27 20:18:04 · 385 阅读 · 0 评论 -
贪心算法
基本思想子问题:同动态规划一样,也是问题能拆成子问题。贪心:即只关注当前这一步,从所有选项里选取使当前最优的那个,不关注整体。自顶向下:该算法是根据当前贪心做出的选择,迭代的来简化,得到规模小的问题。重要性质贪心选择:贪心就是上面的解释,但我们的目的还是能得到整体的最优。所以重点是:证明通过每一步的贪心选择能产生整体的最优解,只有这样才有使用贪心算法的必要。(除了不需要最优解情...原创 2018-08-03 14:48:53 · 951 阅读 · 0 评论 -
备忘录方法
算法定位该法是动态规划的变形,或者可以理解为动态规划的优化,优化在增强理解和书写简单方面。直接递归如果一个问题可以不断拆分成子问题,然后再由小问题的解,一层层归约回大问题。那么,这种问题可以直接采用递归法求解。以上一篇中的矩阵连乘问题为例,可以得到如下的递归求解套路:public static int recurMatrixChain(int i,int j) { /** ...原创 2018-08-03 10:56:08 · 3266 阅读 · 2 评论 -
动态规划算法
基本思想子问题:动态规划同样是把大问题拆分为小问题,小问题继续拆,直到没得拆(极其容易获得结果)。但这些拆开的小问题之间不是互相独立的,也就是同一层次的子问题之间存在结果的传递利用。同一层次:即由同一个大问题拆分得到的多个小问题; 互相独立:排序如[2,1,4,3,6,5]拆分为A:[2,1,4]和B:[3,6,5],子问题A和B的排序互不影响,各排各的; 结果传递:如0-1背包,容量...原创 2018-08-02 22:55:43 · 551 阅读 · 0 评论 -
2019阿里校招测评——光明小学接力赛(Java)
合理宣泄下:太久没做题了,脑子锈了~然后拿到题,莫名大脑空白了10分钟,再接着看懂了题目,但就是不晓得怎么下手。所以就计划边写边想(至少把输入,主函数什么的敲进去),但是!!!不晓得是按错了Tab键还是什么,竟然交卷了,心塞的不行~~题目:*光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? *光明小学可以抽象...原创 2018-08-06 20:44:45 · 2104 阅读 · 0 评论 -
分支限界法
基本思想解空间树:该法和回溯法一样,需要把问题的解空间构造成树结构。搜索方式:该法对树的搜索方式采用广度优先。限界:为了提高搜索效率,在每个节点处进行判断,选择满足要求的最优结点来推进,以求快速达到最优解。辅助“工具”分支限界法的遍历过程,需要把满足要求的活结点(当前结点所连接的所有儿子结点)存储起来,组成活结点表,并且按照一定顺序从表中取出结点。常用队列结构存储活结点表,根据...原创 2018-08-09 18:05:30 · 1593 阅读 · 0 评论 -
回溯法
基本思想定义:以深度优先方式系统(全面)搜索问题的算法。解空间表示:目的在于直观地看到所有解(包含最优解),把问题的所有可能解通过树或者图的方式列出,这样容易理解,且方便针对性的确定搜索方法。回溯:以树为例,从一个结点出发深度遍历(根左右),每到一个结点就判断是否符合题目要求,若符合就继续,当遍历到叶子节点时就对比并记录下当前最优结果;若不符合,就直接返回上一结点遍历另一分支。剪枝...原创 2018-08-05 11:21:06 · 1855 阅读 · 0 评论 -
分治法
分治是求解问题时的一种解题思想,即把一个难以直接解决的规模为n的大问题,分割成k个规模较小的子问题,以便各个击破,分而治之,这些子问题互相独立且与原问题相同。分治设计出的算法一般都是递归算法,分治是思想,那么递归就是求解最终答案的手段,递归的解这些子问题,然后将各子问题的解合并得到原问题的解,所以说分治与递归像一对孪生兄弟。出于一种平衡子问题的思想,在用分治法设计算法时,最好使子问题的规模原创 2017-05-23 10:45:55 · 439 阅读 · 0 评论 -
递归算法(补)
Java数据结构中有一章来讲递归算法~作为补充。算法存在自调用的情况一般有两种(1)问题的定义是递推的,比如阶乘。(2)问题的解法存在自调用,比如折半查找。递归算法用把问题分解为形式更加简单的子问题的方法来求解问题,它既是一种有效的分析问题的方法,也是一种有效的算法设计方法。适宜用递归算法求解的问题的充分必要条件是(1)问题具有某种可借用的类同自身的子问题描述的性质。(2)某一有限步的子问原创 2017-04-18 10:04:43 · 531 阅读 · 0 评论 -
递归之整数划分问题和排列问题
整数划分问题:将正整数n表示成一系列正整数之和;将最大加数n1不大于m的划分个数记作q(n,m) 递归式如下:q(n,m) = 1 n=1,m=1 = q(n,n) n = 1+q(n,n-1) n=m = q(n,m-1)+q(n-m,m) n>m>1 举例: 6 5+1; 4+2;4+1+1; 3+3;3+2+1;3+1+1+1原创 2017-03-31 14:59:45 · 742 阅读 · 0 评论 -
递归之Ackerman函数
并非一切的递归函数都能用非递归方式定义。Ackerman函数是一个双递归函数,当一个函数以及它的一个变量是由函数自身定义时,称为双递归函数。Ackerman是一个双递归函数A(N,M)函数定义如下:A(1,0)=2; A(0,m)=1; m>=0A(n,0)=n+2; n>=2A(n,m)=A(A(n-1,m),m-1);n,m>=1推理可得:A(n,0)定原创 2017-03-31 14:34:18 · 2515 阅读 · 0 评论 -
袋鼠过河问题(Java)
从牛客网上看到的这道题;题目如下:一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,...原创 2018-08-08 11:00:09 · 1612 阅读 · 1 评论