随笔分类 - 算法
前序表达式 中序表达式 后序表达式
摘要:中序表达式:中序表达式就是我们日常使用的表达式,由左往右阅读,结构清晰,但需要括号改变优先级,对计算机不友好eg: (1+4)*3+10/5前序表达式(波兰表示法Polish notation,或波兰记法):一种逻辑、算术和代数表示方法,其特点是操作符置于操作数的前面...
阅读全文
运算表示式求值算法
摘要:表达式由 运算符 ,括号 ,数字 组成E.W.Dijkstra算法将操作数压入操作数栈 将运算符压入运算符栈 忽略左括号 如果遇到右括号,则弹出一个操作符,并弹出操作符所需的操作数,并将结果继续压入操作数栈eg.(1+((2+3)*(4*5))) = 1 + 5 * ...
阅读全文
回环变位
摘要:《算法 4edit》1.2.6Q:如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字...
阅读全文
递归
摘要:tips方法的第一条总是包含一个return的条件语句 递归调用总是尝试去解决一个规模更小的子问题,这样递归才能收敛到最简单的情况 递归调用的父问题和尝试解决的子问题之间不应该由交集一个有意思的递归,来自《算法》1.1.16 & 1.1.17//代码package c...
阅读全文
水仙花数
摘要:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上...
阅读全文
查找算法
摘要:二分查找原理:针对有序的数组,判断其中间值和key值的大小之差,然后进行二分适用范围:有序的数组复杂度:时间复杂度 O(log2n)核心代码:int middle = (top - tail) / 2+tail;if (key nums[middle]) { tai...
阅读全文
平方根的计算
摘要:二分法原理:对于一个数n,可以定义一个函数,我们很容易知道当时, 所以可以在[0,n]之间或[n,1]之间进行二分逼近代码:public static double sqrt(double n) {/* * 注意需要判断一下N是否大于1 当N>=1...
阅读全文
最大公约数
摘要:欧几里德算法非负整p,q的最大公约数满足下列条件:如果q为0,则最大公约数是p 否则p,q的最大公约同时也是p%q=r和q的最大公约数 English despcription:Compute the greatest common divisor of two no...
阅读全文
Java 统计字母个数
摘要:原理:将字符串转换成char字符数组 然后使用另一个数组存储 代码如下public class CalChar {public static void main(String[] args) { Scanner scanner = new Scanner(Syste...
阅读全文
吸血鬼数的查找算法
摘要:《Thinking in JAVA》第四章第十题原题: 吸血鬼数字是指位数为偶数的数字,可以由一堆数字想乘而得到。而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列的数字都是“吸血鬼”数字: ...
阅读全文
素数查找的两种算法
摘要:通过寻找公约数来判断,最经典的算法boolean flag = true;for (int i = 2; i <= n; i++) { for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { ...
阅读全文