10 算法代码
文章平均质量分 63
kindTerry
这个作者很懒,什么都没留下…
展开
-
Java实例1 - 朴素字符匹配 Brute Force
/** * 朴素字符串算法通过两层循环来寻找子串, * 好像是一个包含模式的“模板”沿待查文本滑动。 * 算法的思想是:从主串S的第pos个字符起与模式串进行比较, * 匹配不成功时,从主串S的第pos+1个字符重新与模式串进行比较。 * 如果主串S的长度是n,模式串长度是 m,那么Brute-Force的时间复杂度是o(m*n)。 * 最坏情况出现在模式串的子串频繁出现原创 2011-07-03 07:50:46 · 923 阅读 · 0 评论 -
Java实例8 - 插入排序 Insertion Sort
/** * 选择排序的思想: * 每次循环前,数组左边都是部分有序的序列, * 然后选择右边待排元素,将其值保存下来 * 依次和左边已经排好的元素比较 * 如果小于左边的元素,就将左边的元素右移一位 * 直到和最左边的比较完成,或者待排元素不比左边元素小 */package al;public class InsertionSort {原创 2011-07-03 08:04:46 · 2010 阅读 · 0 评论 -
Java实例10 - 最小-最大规范化 Min-MaxNormalization
/** 最小最大规范化也叫离差标准化 * 可以对原始数据进行线性变换, * 假定Min和Max是最小值和最大值, * v是该区间中的一个值,将其映射到新的区间[newMin, newMax]中为v * 则有: * v = (v-Min)/(Max-Min)*(newMax-newMin)+newMin * 这种方法有一个缺陷就是当有新数据加入时,可能导致Max和Min的原创 2011-07-03 08:07:24 · 7829 阅读 · 0 评论 -
Java实例12 - 圆周率π的随机数算法
/** * π的随机数算法 * 描述: * 在单位正方形中,随机往里面扔点,如果落在单位圆里面就计数 * 多次重复这一过程进行统计,由于四分之一圆面积为π/4约等于计数值/总数 * 得到π=4*sum/N * 重复的次数越多,算出来的π值越精确 */package al;import static java.lang.Math.*;public class原创 2011-07-03 08:10:02 · 2070 阅读 · 0 评论 -
Java实例13 - 用哨兵查找特定值
/** * 超找的目的,是在查找指定的资料,直接运用循环,顺序查找看是否能找到 * 一般情况我们都会循环判断是否结束,然后比较期望值。 * 其实可以利用哨兵减少一次比较 * */package al;public class LoopSearch { public static void main(String[] args) { int [] num原创 2011-07-03 08:11:08 · 2265 阅读 · 0 评论 -
Java实例14 - 二分查找
/** * 二分查找法 * 对有序序列中的元素进行查找 * 从序列中间开始查找 * 如果该值大于期望值,缩小查找区间至左边 * 如果该值小于期望值,缩小查找区间至右边 */package al;public class BinSearch { public static void main(String[] args) { int[] number =原创 2011-07-03 08:12:19 · 729 阅读 · 0 评论 -
Java实例15 - 求最大公约数 gcd 辗转相除 欧几里德算法
/** * 辗转相除法求最大公约数又叫欧几里德算法 * 它的依据是公理gcd(n,m) = (m, n%m) */package al;public class Gcd { public static void main(String[] args) { Gcd g = new Gcd(); int gcd = g.getGcd(42823, 6409);原创 2011-07-03 08:17:10 · 5730 阅读 · 0 评论 -
Java实例18 - 0-1背包放水果
/** * 0-1背包问题 * 用贪婪法求解 * 问题:有一组水果,他们的重量和价格如下所示,另有一背包可承受总重为14 * 要求:只能全选或者不选某种水果将其放入背包,背包不能超重 * 求解:找到使得该包中水果价值最高的放法 */package al;public class Fruit { public final String name; publi原创 2011-07-03 08:24:15 · 949 阅读 · 0 评论 -
Java实例20 - 素数测试
package ma;public class Primal { /** * @param args */ public static void main(String[] args) { Primal p = new Primal(); int[] primals = {49919, 49921, 49927, 49937, 49939, 49943原创 2011-07-03 08:26:16 · 911 阅读 · 0 评论 -
Java实例22 - 无重复排列
/** * 有1,2,3,4四个数字,能组成多少个互不相同且无重复的三位数? */public class PaiLie { public static void main(String[] args) { int N = 4; int i=0; int j=0; int k=0; int count=0; for(i=1; i<=N原创 2011-07-03 08:27:46 · 599 阅读 · 0 评论 -
Java实例23 - 打印杨辉三角形
/** * 打印杨辉三角形1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 */package ma;public class YangHui { public static void m原创 2011-07-03 08:28:39 · 1810 阅读 · 0 评论 -
Java实例7 - 选择排序 Selection Sort
/** * 选择排序的思想: * 每次从待排序列中找到最小的元素, * 然后将其放到待排的序列的最左边,直到所有元素有序 * * 选择排序改进了冒泡排序,将交换次数从O(N^2)减少到O(N) * 不过比较次数还是O(N) */package al;public class SelectSort { public static void原创 2011-07-03 08:03:48 · 775 阅读 · 0 评论 -
Java实例6 - 汉诺塔问题 Hanoi
/** * 汉诺塔大学的时候就学过,但是根本没搞明白,唯一知道的就是要用递归的方法来求解。 * 问题描述: * 有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。 * 要求按下列规则将所有圆盘移至C杆: * 1.每次只能移动一个圆盘; * 2.大盘不能叠在小盘上面。 * 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,原创 2011-07-03 08:00:55 · 1304 阅读 · 0 评论 -
Java实例9 - 汉明距离 Hamming Distance
/**在信息理论中,两个等长字符串之间的汉明距离 * 是两个字符串对应位置上不同字符的个数, * 换句话说,汉明距离就是将一个字符串替换成另外一个字符串所需要替换的字符长度。 *例如,1011101和1001001之间的汉明距离是2, *toned和roses之间的汉明距离是3. *汉明重量是字符串相对于同样长度的零字符串的汉明距离, *也就是说,它是字符串中非零的元素个数原创 2011-07-03 08:05:52 · 8105 阅读 · 0 评论 -
Java实例11 - 归一化/标准化 Normalization
/** * 归一化,标准化可以 把数变为(0,1)之间的小数 * 主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理 */package re;public class Normalization { public static void main(String[] args) { double[] p1 = {0, 0}; double[] p2原创 2011-07-03 08:08:40 · 18556 阅读 · 0 评论 -
Java实例16 - 乱序洗牌
/** * 乱序洗扑克牌 * 思想: * 先把54张牌放到一个数组中 * 然后遍历该数组,每一步都随机生成一个介于1-54之间的整数 * 然后将当前牌与该整数号牌互换 * 遍历完成后即生成乱序的扑克牌 */package al;public class ShuffleCard { public static void main(String[] ar原创 2011-07-03 08:18:12 · 1320 阅读 · 0 评论 -
Java实例17 - 快速排序 quick sort
/** * 快速排序是分治方法的一种 * 基本思想就是先将序列分为左边小于右边的两部分 * 然后对两边分别再进行同样的排序工作 * 用的是递归的方法 */package al;public class QuickSort { public static void main(String[] args) { //舒适化数组 int[] array = {原创 2011-07-03 08:22:24 · 1103 阅读 · 0 评论 -
Java实例19 - 分解质因数
/** * 分解质因数 */package ma;public class PrimeFactor { public void PrintPrimeFactors(int N) { for (int i=2; i<=N; i++) { while(N % i == 0) { System.out.println(i); N = N/i;原创 2011-07-03 08:25:23 · 3454 阅读 · 1 评论 -
Java实例21 - 水仙花数
/** * 水仙花数是指一个 n 位数 ( n≥3 ), * 它的每个位上的数字的 n 次幂之和等于它本身。 * (例如:1^3 + 5^3 + 3^3 = 153) */package ma;public class ShuiXian { public static void main(String[] args) { for(int i=100;原创 2011-07-03 08:26:59 · 981 阅读 · 0 评论 -
Java实例3 - 三角数字
/** * 三角数字: * 比达哥斯拉领导下的古希腊数学家发现了一个有趣的数字序列1, 3, 6, 10, 15, 21,... * 你能看出他们有什么规律么? * 对了它的规律就是f(x) = x+ f(x-1) * 想想是不是很像小时候打算盘从1一直加到100啊 */package al;public class Triangle { public stat原创 2011-07-03 07:54:34 · 953 阅读 · 0 评论 -
Java实例2 - 冒泡排序 Bubble Sort
/** * 冒泡排序估计是每本算法书籍都会提到的排序方法。 * 它的基本思路是对长度为N的序列,用N趟来将其排成有序序列。 * 第1趟将最大的元素排在序列尾部,第2趟将第2大的元素排在倒数第二的位置, * 即每次把未排好的最大元素冒泡到序列最后端。 * 该排序方法实际上分为两重循环,外层循环:待排元素从数组的第1个元素开始。 * 内层循环:待排元素从数组的第1个元素开原创 2011-07-03 07:52:24 · 651 阅读 · 0 评论 -
Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
/** * 快速计算二进制数中1的个数(Fast Bit Counting) * 该算法的思想如下: * 每次将该数与该数减一后的数值相与,从而将最右边的一位1消掉 * 直到该数为0 * 中间循环的次数即为其中1的个数 * 例如给定"10100“,减一后为”10011",相与为"10000",这样就消掉最右边的1 * Sparse Ones and Dense One原创 2011-07-03 07:56:50 · 3186 阅读 · 0 评论 -
Java实例5 - 考拉兹猜想 Collatz Conjecture
/** * 考拉兹猜想:Collatz Conjecture * 又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想, * 是指对于每一个正整数,如果它是奇数,则对它乘3再加1, * 如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 */package al;public class CollatzConjecture { privat原创 2011-07-03 07:59:49 · 1887 阅读 · 0 评论 -
数据结构001 - Trie树(Trie tree)
Trie树,又叫前缀树,是一种排序树数据结构,用来存储关联数组,其中的key通常是字符串。不像二叉搜索树(BST)的节点上不存储相关的key,Trie树上的节点位置用来表示与它相关的key。所有的后继结点都拥有相同的前缀,而根节点关联的是空字符串。通常节点不关联值,只有其上的叶子节点和中间节点表示你感兴趣的key。 下面是Trie树相对于二叉搜索树(BST)的优点:1. 查找key更快原创 2010-04-12 21:34:00 · 1673 阅读 · 0 评论