算法
m0_48774275
这个作者很懒,什么都没留下…
展开
-
递归算法的优缺点
算法的优点相对于迭代算法而言,结构更清晰、更简洁、更容易让人从宏观上理解程序的整体结构。容易使用数学归纳法证明算法的正确性。算法的缺点在递归调用的过程中会反复消耗系统开销以维护工作栈。这里提一点,在编写递归算法程序的过程中,如果程序消耗的栈空间超出限制,通常会出现一个栈溢出的异常。StackOverflowException...原创 2021-03-31 20:29:40 · 3166 阅读 · 0 评论 -
递归算法之汉诺塔问题
问题叙述故事背景:法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。移动规则问题要求:将A原创 2021-03-29 10:04:54 · 234 阅读 · 0 评论 -
递归算法之整数划分问题
问题描述将正整数n表示成一系列正整数之和,n = n1 + n2 + n3 +…+nk (其中ni为正整数,1<=ni<=n)举例说明,n = 4的情况下,共有5种划分情况4 = 44 = 3 + 14 = 2 + 24 = 2 + 1 + 14 = 1 + 1 + 1 + 1注意:这里的1 + 3 和3 + 1被认为是同一种划分情况。问题分析首先引入一个表示方式q(n,m)它的含义是,在正整数n的划分中,将最大加数不大于m的划分数表示为q(n,m)。这里根据m的不原创 2021-03-28 10:06:59 · 1132 阅读 · 0 评论 -
递归算法之全排列问题
全排列问题描述全排列问题,也就是说对于一个包含有限个数元素的集合,对它进行一个全排列,通俗点讲就是把这个集合中所有元素进行排列的所有可能情况。全排列问题的常规解题思路这里我们能以一个例子来进行描述,如下有这么一个集合 R = {r1,r2,r3,r4}那么这个集合的全排列共有哪些情况呢?首先,第一个位置放元素r1 剩下的就是元素{r2,r3,r4}的一个全排列 ;R1 = {r2,r3,r4}的全排列 这里又把r2放在第一个位置,剩下元素R2 = {r3,r4},这时要求R2的全排列,将r原创 2021-03-27 09:44:12 · 1546 阅读 · 0 评论 -
递归算法之斐波纳茨数列
斐波纳茨数列的简介费波纳茨数列是由一个从1,2开始,之后每个数字都等于前两个数字相加之和,以此类推从而产生无限多个数字系列。表达式形式F(n) = 1 n=1;F(n) = 2 n=2;F(n) = F(n-1) + F(n-2) n>2;迭代实现void fib_iteration(int n,long[] arr){ arr[0] = 1L; arr[1] = 2L; for(int i=2; i<n;i++){ arr[i] =原创 2021-03-26 09:58:35 · 426 阅读 · 0 评论 -
递归算法之阶乘问题
阶乘问题描述简单描述就是求n!= ?n! = n*(n-1)(n-2)(n-3)*…*1。迭代求阶乘long fac_iteration(int n){ long value = 1; for(int i=1;i<=n;i++){ value *= i; } return value;}空间复杂度O(1),时间复杂度O(n);递归求阶乘首先明确递归需要满足的两个条件。递归头是什么?n!=1 n=0。递归体是什么?n!=n*(n-1)! n>0。这里左原创 2021-03-25 18:23:10 · 383 阅读 · 0 评论 -
递归算法之概述
递归是什么?递归,通俗一点理解就是在我们常听说的俄罗斯套娃,从最外面的大娃娃一直跑到最里面的最小小的娃娃,然后又一层层的将娃娃套回去,然后得到最终的结果。编程中的递归算法书上的定义是这样说的:直接或间接调用自身的算法称为递归算法。递归算法需要满足的条件有两个:一个是必须要为递归设置一个递归的出口,也就是说套娃一定有一个是最最小的娃娃,不然递归是没有办法结束的。另一个是子问题必须与原问题本质相同并且更为简单。可以理解为,大娃娃和小娃娃是一模一样的,但是大娃娃要比小娃娃更大,做成小娃娃需要的材料要更原创 2021-03-25 18:02:52 · 379 阅读 · 0 评论 -
java实现LRU
java实现LRU什么是LRULRU就是计算机操作系统中常见的内存管理算法,中文名也叫最近最少使用页面置换算法。也就是在缺页的情况下,寻找最近最少被使用的页面,然后将它置换出内存,把新的页面置换到内存。实现思路数据结构:使用一个双向链表和一个HashMap<Integer,Node>。关键流程双向链表用来记录同一个级别的页面的先后访问顺序。map用来表示所有的级别的情况。如果页面在低级别的页面中命中,就将页面放到高级别的队列中的队头,满了就将队尾元素放到低一级别队列的队头。原创 2021-03-22 15:02:38 · 85 阅读 · 0 评论