常见算法
文章平均质量分 73
andycpp
做一名合格地java教师
展开
-
产生不等概率随机数的简单方法
在编写程序的时候,经常要用到随机数。JAVA自带了一个产生随机数的方法,该方法能够较好的等概率的产生某个区间之内的随机数。但是有些时候,我们需要在一个区间内产生不等概率的随机数。比如一个数组,我想随机的取出一个元素,如果元素靠前则取出的概率大些,如果元素靠后则取出的概率小些,这里就要用到不等概率随机数来作为数组的下标来从数组中取出数字。下面我们就来探讨一个简单的算法。 我们先把问题原创 2006-09-18 22:58:00 · 5422 阅读 · 0 评论 -
对一个整数用加法进行分解
比如输对于整数5,分解的结果为:5 = 4 + 15 = 3 + 25 = 3 + 1 + 15 = 2 + 2 + 15 = 2 + 1 + 1 + 15 = 1 + 1 + 1 + 1 + 1 private static void splitInteger(int n) { if(n10) { System.out.p原创 2012-01-11 10:42:32 · 4336 阅读 · 0 评论 -
堆排序算法
终于整明白啥是堆排序了,原来堆只是个幻象,是个虚拟模型,不必要真的弄一棵树出来,直接操作的对象仍然是数组。若要升序排序,则构造大顶堆,每次将堆顶元素删除后放置到堆尾的后一个位置,堆不断缩小。直接上代码 /** * 堆排序演示程序 */ public static void main(String[] args) { int[] a = createArray(20); System.out.println(Arrays.toString(a)); heapSort(a);原创 2011-05-23 12:01:00 · 2952 阅读 · 0 评论 -
找出符合条件的组合
将0~9共10个数字填入下面的表达式,使得该表达式成立。找出所有可能的情况。【 】【 】【 】 + 【 】【 】【 】 = 【 】【 】【 】【 】public class MainTest { public static void main(String[] args) { showAllResult(10); } private static void showAllResult(int num) { int[] nums = new int[num]; findAl原创 2010-09-29 14:29:00 · 2736 阅读 · 0 评论 -
一副扑克52张牌(没有大小王),模拟洗牌
纸牌类,代表一张纸牌:public class Card { public CardSuit suit; //花色 public int value; //点数,1代表A,11代表J public Card(CardSuit suit, int value) { this.suit = suit; this.value = value; } @原创 2009-08-21 19:23:00 · 6806 阅读 · 1 评论 -
初学遗传算法,一个练手的小程序
最近研究了一下遗传算法,挺有意思的,在一个老外的网站上看到了这个小例子,比较有趣,自己用java实现了一下(老外是用c++实现的)。 问题:有10张纸牌,编号分别是1到10,现在要将这10张纸牌分为2堆,其中一堆求和为36,另一堆求积为360,问应该怎么分?(也就是说,最终的结果应该是:一堆为2+7+8+9+10=36,另一堆为1*3*4*5*6=360。当然,如果修改题目中的参数,原创 2008-10-03 20:32:00 · 2060 阅读 · 3 评论 -
绘制数字缠绕矩阵
什么是数字缠绕矩阵呢? 呵呵,这个名字是我起的,好玩而已,举个例子大家就明白了:01 02 03 04 05 16 17 18 19 06 15 24 25 20 07 14 23 22 21 08 13 12 11 10 09 01 20 19 18 17 16 02 21 32 31 30 15 03 22 33 36 29 14 04 23 34 35 28 13 05 24原创 2007-09-23 12:21:00 · 1840 阅读 · 1 评论 -
在n个数字中,找出所有和为SUM的组合
题目具体是这样的,给定n个数字,比如{2,6,1,7,4,9},并给定一个SUM,比如SUM=20,在上述这6个数字中,挑出一些,使得他们的和等于SUM,把所有的组合都找出来。我们这个例子的结果就是:1 + 2 + 4 + 6 + 7 = 201 + 4 + 6 + 9 = 204 + 7 + 9 = 20具体代码如下:import java.util.ArrayList;原创 2007-09-23 10:58:00 · 5088 阅读 · 0 评论 -
将一个单向链表反向链接
其实是一个很简单的题目,不过我用递归实现了一下,个人感觉写的挺漂亮的,于是就决定贴出来秀一下,呵呵,代码如下: //这是个公共函数,也就是你需要的接口public void reverse() ...{ Link temp = first; reverselink(temp).next = null;}//这是个私有函数,为上面的公共函数服务private Li原创 2007-08-14 00:53:00 · 4805 阅读 · 0 评论 -
在n张扑克牌中找出顺子
这是今天在论坛看到的一个题目,挺有意思的,我做了一下,得了28分。呵呵,很有成就感,干脆写到博客里面算了。 题目是这样的:有n张扑克牌,每张牌的取值范围是:2,3,4,5,6,7,8,9,10,J,Q,K,A。在这n张牌中找出顺子(5张及5张以上的连续的牌),并将这些顺子打印出来。 思路:我的思路其实很简单,首先就是要去掉重复的牌,因为同样的顺子之原创 2007-08-13 23:51:00 · 7874 阅读 · 0 评论 -
1~N中求出1的个数
今天在论坛看到了这个题目,挺有意思的,并且算法也很多样啊,下面就来介绍一下。 首先是我做的,中规中矩,从1到n,对每个数字都数一下里面有多少个1,累加起来得到最终的结果。好大一个循环啊,循环里面还要再套循环,感觉挺垃圾的一个程序: // 第0个元素表示当前数字的长度,第1个元素表示个位,第2个表示十位…… int[] num = ..原创 2007-07-19 17:32:00 · 1702 阅读 · 1 评论 -
素数环问题的非递归实现
关于素数环问题,我在早先的一个帖子里已经做了详细的说明。那时候我用的是递归的方式来实现的。今天我又使用非递归的方式把这个问题做了一遍,有兴趣的网友可以一起探讨!package andycpp;public class Main ...{ public static void main(String[] args) ...{ primering(20);原创 2007-06-29 23:34:00 · 2732 阅读 · 1 评论 -
素数环问题
问题描述: 将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。20以内的素数环:1 2 3 4 1 4 3 2 5 6 1 2 3 8 5 6 7 41 2 3 4 7 6 5 8 9 10 1 2 3 4 7 6 5 12 11 8 9 10 1 2 3原创 2007-02-02 15:26:00 · 6922 阅读 · 2 评论 -
Java实现希尔排序
希尔排序步长的选择很重要,不同的选择方式性能差异很大。为了做实验,生成一个长度为 0x400000(该数字为16进制)随机的整形数组,存放于硬盘上的文本文件内。每次排序均将此数组读入内存后,再排序,再将排序结果写入硬盘文件。只对排序操作计时,读文件和写文件不计时。步长选择方式为最基本的1,2,4,8,16,32,64...size/2在我的测试中,排序耗时7150毫秒 priv原创 2013-02-17 23:00:15 · 4518 阅读 · 0 评论