Algorithms
文章平均质量分 73
uniquepine
这个作者很懒,什么都没留下…
展开
-
全排列算法
递归实现,取数字(字符串)中第i个位置的字符,然后将他和剩余的字符拼接,剩余的字符串当成有一个全排列的输入,这样递归下去,只剩一个字符时全排列就是本身。程序中使用set去除了重复的数据,如果需要保留,将set换为list接口即可。 import java.util.HashSet; import java.util.Iterator; import java.util.Set;原创 2012-02-23 16:39:41 · 397 阅读 · 0 评论 -
平衡二叉树及其应用场景
平衡二叉树简称平衡树,是由Adelson-Velskii和Landis于1962年首先提出的,所以又称为AVL树。他的定义很简单,就是若一棵二叉树的每个左右节点的高度差最多相差1,此二叉树即是平衡二叉树。把二叉树的每个节点的左子树减去右子树定义为该节点的平衡因子。二叉平衡树的平衡因子只能是1、0或者-1。 平衡二叉树是对二叉搜索树(又称为二叉排序树)的一种改进。二叉搜索树有一个缺点就是,树的转载 2014-09-23 11:21:08 · 2153 阅读 · 0 评论 -
最大公约数 和最小公倍数。(max Common Divisor min common multiple)
假设有两个数a,b,所谓的公约数就是能把a,b整除的最大整数。 明白了要求我们就来解决问题,一拿到问题我们都应该都能想到一个方法,就是使用穷举法,从2开始一个个找,到一个两个都能除的就记录起来,一直找到小于min(a,b)结束, 记录到的值就是他们的最大公约数代码由下: public static int getMaxDivide_ab(int a, int b) { int valu转载 2013-12-26 14:29:49 · 1832 阅读 · 0 评论 -
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析: 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n System.out.print( "请键入一个正整数: "); > int> System.o转载 2013-12-25 17:01:38 · 1427 阅读 · 0 评论 -
java判断一个数是否为质数的方法
1:因为质数是除去能除1和本身以外的没有因式的数,所以我们从2开始整除一直到要判断的数的平方根,只要能整除以上数,那么它就不是质数. public void isSingle(int str){ int tmp = str; if(tmp System.out.print("该数不是质数!"); }转载 2013-12-23 23:05:11 · 2291 阅读 · 0 评论 -
兔子算法
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 程序设计: public class exp2{ public static void main(String args[]){转载 2013-12-23 21:45:47 · 1197 阅读 · 0 评论 -
快速排序 java
一直想复习下算法,先把经典的快排复习下,好好理解下分治思想: 先介绍快速排序的算法过程: [1].记录第一个数位置和最后一个数位置; int i = low; int j = high; [2].找到主元位置,可以是第一个数,也可以是最后一个,或者随机的一个位置,一般可以以数组中第一个位置的数, int povit = a[low],主元选择好了就记录不改变它的值; [3].如果转载 2012-04-19 17:34:24 · 507 阅读 · 0 评论 -
String 转化成double(不用Double.parseDouble(str))
private static double stringTOdouble(String str) { /** * noBeforeDot : 小数点前面的数值 * noAfterDot = : 小数点后面的数值 * noAfterE : 指数E后面的数值 * noGtZeroFlag :标识是否大于0 * eNoGtZer原创 2012-04-11 21:45:23 · 5177 阅读 · 0 评论 -
排序算法小结
import java.io.*; public class Paixu { // 冒泡排序法 基本思想:两两比较待比较元素需要交换位置时,交换位置. public void Maopao(int a[]) { for (int i = 1; i for (int j = 0; j原创 2012-03-09 18:00:30 · 342 阅读 · 0 评论 -
二叉树的遍历算法(递回与非递回)
/** 二叉树节点 */ class BTNode { private char key; private BTNode left, right; public BTNode(char key) { this(key, null, null); } public BTNode(char key, BTNode left,转载 2012-02-27 18:05:56 · 592 阅读 · 0 评论 -
LCS 算法
LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置。下面是字符串21232523311324和字符串312123223445的匹配矩阵,前者为X方向的,后者为Y方向的。不难找到,红色部分是最长的匹配子串。通过查找位置我们得到最长的匹配子串为:21原创 2012-02-28 17:56:44 · 438 阅读 · 0 评论 -
解析Hash 表算法
第一部分:Top K 算法详解 问题描述 百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1转载 2012-02-28 11:18:59 · 415 阅读 · 0 评论 -
海量数据处理
海量数据处理 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个转载 2012-02-28 13:52:01 · 452 阅读 · 0 评论 -
红黑树
介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和Robert Sedgewick改成一个比较摩登的名字:红黑树。 红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,转载 2014-09-23 11:21:09 · 815 阅读 · 0 评论