算法
流雪扶风
明其原理,知其本质。
展开
-
等额本金&等额本息推导
P:贷款本金R:月利率N:还款期数X:当月归回金额T:当前期数(仅对等额本金生效,注意首期是最大的)附:月利率 = 年利率/12等额本息:每个月交的钱完全一样,预先计算总数,然后平摊到每一期优点:每期的钱都一样,计算和规划方便缺点:利息占比较高,总金额较高计算公式: 推导:第一个月A(1+β)-X第二个月(A(1+β)-X)(1+β)-X=A(1+...原创 2019-10-12 14:56:00 · 2528 阅读 · 1 评论 -
Java 树的构造算法
连通的定义:从A定点出发能到达B定点,则称A-B连通连通的基本性质:自反性:A一定连通A(ps:自己可以和自己PY交易) 对称性:如果A和B连通,则B和A也连通(无向的情况下) 传递性:如果A连通B,B连通C,则A连通C 树:大小(size):树的节点数量 深度(depth):某个节点到根节点的链接路径的数量 高度(height):树所有节点中深度最大的值森林的构造(目标...原创 2019-05-11 17:08:58 · 706 阅读 · 0 评论 -
Java 数据类型内存分析
基本数据类型:由上向下,可以自动转型,注意:整形可以转换成浮点型,但会有精度损失,浮点型内部是科学计数法储存的byte (1 byte = 8 bit ) short ( 2 byte ) char ( 2 byte ) int ( 4 byte ) long ( 8 byte ) float ( 4 byte ) double (8 byte)引用数据类型: 注意...原创 2019-05-07 17:41:57 · 265 阅读 · 0 评论 -
算法运行时间分析
时间复杂度:O(n)注意O(n)是用估计的方式,涉及极限的定义,假设摸个程序的语句执行次数为,则其时间复杂度为中较大的影响最大的增量函数例如:其时间复杂度 O(n) = 常见的时间复杂度及对应典型算法 描述 增长量级 典型代码 说明 举例 常数级别 1 a = b + c ; 普通语句 两数相加 ...原创 2019-05-07 15:15:43 · 1346 阅读 · 0 评论 -
Java 环形缓冲器(Ring Buffer)
环形缓冲器(Ring Buffer):环形队列,这里使用数组实现,但并未用上环形功能,因为设置了队满直接出队清空队列,如果只读取部分数据,又或者想要覆盖冲写,则可以用上环形功能package chapter1_3;/** * @author : jeasion * @name * @comment * @return */public class practice39 {...原创 2019-05-06 20:44:22 · 2278 阅读 · 0 评论 -
Java 约瑟夫环(循环链表解决)
问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。解题思路:因为是围成一圈,所以用循环链表是最符合相关思维的(不是最优解),对于第M个人进行出队,然后前后节点连接起来继续形成闭环(新约瑟夫环)代码(Java版)import java.util.Scanner;/** *...原创 2019-05-06 19:42:40 · 2237 阅读 · 0 评论 -
前序表达式 中序表达式 后序表达式
中序表达式:中序表达式就是我们日常使用的表达式,由左往右阅读,结构清晰,但需要括号改变优先级,对计算机不友好eg: (1+4)*3+10/5前序表达式(波兰表示法Polish notation,或波兰记法):一种逻辑、算术和代数表示方法,其特点是操作符置于操作数的前面,如果操作符的元数(arity)是固定的,则语法上不需要括号仍然能被无歧义地解析,不需要括号来改变优先级,未推广使用...原创 2019-04-19 19:29:50 · 7966 阅读 · 1 评论 -
运行时间判定
次方级典型:for循环 for(int i = 0 ; i < N ;i++ ) 语句循环次数嵌套for循环, for(int i =0 ;i < N; i++) for(int j = i + 1 ; i <N ;j++) 循环次数 ...原创 2019-04-24 10:55:41 · 198 阅读 · 0 评论 -
运算表示式求值算法
表达式由 运算符 ,括号 ,数字 组成E.W.Dijkstra算法将操作数压入操作数栈 将运算符压入运算符栈 忽略左括号 如果遇到右括号,则弹出一个操作符,并弹出操作符所需的操作数,并将结果继续压入操作数栈eg.(1+((2+3)*(4*5))) = 1 + 5 * 20 = 1011. 操作数栈:1 2 3 运算符栈: + +2. 遇到右括号 ...原创 2019-04-17 19:43:03 · 169 阅读 · 0 评论 -
回环变位
《算法 4edit》1.2.6Q:如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位.A:将s2进行自我拼接,如果s1的长度等于s2的,并且拼接后的s2包含s1,则是回环变位...原创 2019-04-16 20:12:57 · 191 阅读 · 0 评论 -
水仙花数
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。目前技术有限只想到了爆破,指定位数后从0~10...原创 2019-04-12 19:46:43 · 540 阅读 · 0 评论 -
Java 统计字母个数
原理:将字符串转换成char字符数组 然后使用另一个数组存储 代码如下public class CalChar {public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String string = scanner.next(); char[] ch =...原创 2019-04-08 19:45:54 · 3396 阅读 · 1 评论 -
吸血鬼数的查找算法
《Thinking in JAVA》第四章第十题原题: 吸血鬼数字是指位数为偶数的数字,可以由一堆数字想乘而得到。而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列的数字都是“吸血鬼”数字: 1260=21*60 1827=21*87 2187=27*81 写出一个程序,找出...转载 2019-04-04 15:58:13 · 318 阅读 · 0 评论 -
查找算法
二分查找原理:针对有序的数组,判断其中间值和key值的大小之差,然后进行二分适用范围:有序的数组复杂度:时间复杂度 O(log2n)核心代码:int middle = (top - tail) / 2+tail;if (key < nums[middle]) { top = middle - 1;}if (key > nums[middle]) { t...原创 2019-04-11 15:39:32 · 93 阅读 · 0 评论 -
最大公约数
欧几里德算法非负整p,q的最大公约数满足下列条件:如果q为0,则最大公约数是p 否则p,q的最大公约同时也是p%q=r和q的最大公约数English despcription:Compute the greatest common divisor of two nonnegative integers p and q as follows:If q is 0, the a...原创 2019-04-10 20:24:04 · 146 阅读 · 0 评论 -
递归
tips方法的第一条总是包含一个return的条件语句 递归调用总是尝试去解决一个规模更小的子问题,这样递归才能收敛到最简单的情况 递归调用的父问题和尝试解决的子问题之间不应该由交集一个有意思的递归,来自《算法》1.1.16 & 1.1.17//代码package chapter1;import java.util.Scanner;public class pr...原创 2019-04-12 21:21:59 · 178 阅读 · 1 评论 -
平方根的计算
二分法原理:对于一个数n,可以定义一个函数,我们很容易知道当时, 所以可以在[0,n]之间或[n,1]之间进行二分逼近代码:public static double sqrt(double n) {/* * 注意需要判断一下N是否大于1 当N>=1时,其二分区间是[0,N] 但当N<1时,其二分区间是[N,1]*/ if (n &l...原创 2019-04-10 22:28:51 · 730 阅读 · 0 评论 -
素数查找的两种算法
通过寻找公约数来判断,最经典的算法boolean flag = true;for (int i = 2; i <= n; i++) { for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { flag = false; //如果i%j==0说明这个数是合数,则让bool=false ...原创 2019-04-03 20:57:31 · 2525 阅读 · 0 评论