地球人口越来越多,终于达到了100亿了。还好,发现了一颗适合人类居住的星球。现在,需要派遣八十万个人先期进驻。如何选出这八十万的人呢?
算法描述:
1、有六个数 0 1 2 3 4 5,随机数为 4 2 2 1 0 0。
2、第一次从六个数里取随机数,为4,则将第4个数取出,变为0123*5,取出的数为 4
3、而后,将第5个数交换到第4个数的位置上,即数字变为 01235
4、第二次从五个数里取随机数,为2,则将第2个数取出,变为01*35,取出的数为 2
5、而后,将第4个数交换到第2个数的位置上,即数字变为 0153
6、第三次从四个数里取随机数,为2,则将第2个数取出,变为01*3,取出的数为 5
7、而后,将第3个数交换到第2个数的位置上,即数字变为 013
8、第四次从三个数里取随机数,为1,则将第1个数取出,变为0*3,取出的数为 1
9、而后,将第2个数交换到第1个数的位置上,即数字变为 03
10、第五次从两个数里取随机数,为0,则将第0个数取出,变为*3,取出的数为 0
11、而后,将第1个数交换到第0个数的位置上,即数字变为 3
12、第六次随机数为0,则将第0个数取出,变为*,取出的数为 3
即,取到的数为 425103。
另外,代码有错误,已更改。
package test;
import java.util.Hashtable;
import java.util.Random;
import java.util.Vector;
public class DaLuan {
/**
* 长度为 s 的序列,从中随机抽取 n 个数据。
* 算法:
* 1、先在 0-s 里随机取一数 [R];
* 2、将 [R] = [0], [0]将不再使用
* 3、先在 1-s 里随机取一数 [R1];
* ...
* @param s
* @param n
* @return
*/
private static int[] getRandom(int s, int n)
{
if(s<=0 || n<=0)
{
throw new RuntimeException("必须:s>0 且 n>0 ");
}
if(s<n)
{
throw new RuntimeException("必须:s>=n ");
}
int[] data = new int[n];
int[] temp = new int[s];
for(int i=0; i<s; i++)
{
temp[i] = i;
}
Random random = new Random();
random.setSeed(System.currentTimeMillis());
for(int i=0; i<n; i++)
{
int idx = random.nextInt(s-i)+i;
data[i] = temp[idx];
temp[idx] = temp[i];
}
return data;
}
private static void print(int[] data)
{
for(int i=0; i<data.length; i++)
{
System.out.println(data[i]);
}
}
/**
* 长度为 s 的序列,从中随机抽取 n 个数据。
* 算法:
* 1、先在 0-s 里随机取一数 [R];
* 2、将 [R] = [0], [0]将不再使用
* 3、先在 1-s 里随机取一数 [R1];
* ...
*
* 并列出随机数取了三次以上的数据
* @param s
* @param n
* @return
*/
private static int[] getRandom02(int s, int n)
{
if(s<=0 || n<=0)
{
throw new RuntimeException("必须:s>0 且 n>0 ");
}
if(s<n)
{
throw new RuntimeException("必须:s>=n ");
}
int[] data = new int[n];
int[] temp = new int[s];
int[] selectCount = new int[s];
for(int i=0; i<s; i++)
{
temp[i] = i;
selectCount[i] = 0;
}
Random random = new Random();
random.setSeed(System.currentTimeMillis());
for(int i=0; i<n; i++)
{
int idx = random.nextInt(s-i)+i;
data[i] = temp[idx];
selectCount[idx]++;
if(selectCount[idx]>1) //并列出随机数取了三次以上的数据
{
System.out.println(selectCount[idx] + ":" + idx);
}
temp[idx] = temp[i];
}
return data;
}
/**
* 这个版本针对的是从百亿级数据里取数据的。
*
* 长度为 s 的序列,从中随机抽取 n 个数据。
* 算法:
* 1、先在 0-s 里随机取一数 [R];
* 2、将 [R] = [0], [0]将不再使用
* 3、先在 1-s 里随机取一数 [R1];
* ...
* @param s
* @param n
* @return
*/
private static long[] getRandom03(long s, int n)
{
if(s<=0 || n<=0)
{
throw new RuntimeException("必须:s>0 且 n>0 ");
}
if(s<n)
{
throw new RuntimeException("必须:s>=n ");
}
long[] data = new long[n];
Hashtable<Long, Long> ht = new Hashtable<Long, Long>();
Random random = new Random();
random.setSeed(System.currentTimeMillis());
for(int i=0; i<n; i++)
{
long l = random.nextLong();
if(l<0)
{
l= Math.abs(l);
}
long idx = l % (s-i);
if(ht.get(idx)==null)
{
data[i] = idx;
}
else
{
data[i] = ht.get(idx);
}
if(ht.get(s-i-1)==null)
{
ht.put(idx, s-i-1);
}
else
{
ht.put(idx, ht.get(s-i-1));
}
}
return data;
}
public static void main(String[] args)
{
System.out.println(Runtime.getRuntime().maxMemory());
//Collections.shuffle(null);
//print(getRandom02(3000000, 2500));
//getRandom03(10000000000L, 1000000);
getRandom03(10000000000L, 800000);
//getRandom03(10000000000L, 1000000); //需要设置vm参数 -Xms64M -Xmx256M
}
}
分享到:
相关推荐
世界各国/实体的世界人口数据。 它共包含235条记录,11列包含2020年前总人口、年变化、净变化、密度、土地面积、移民、生育率、中年人、城市人口和世界人口份额的数据。
骋天水库移民GIS应用系统是以地理信息系统(GIS)和数据库为开发平台的可视化动态信息管理系统,通过互联网为广大公众提供移民信息的动态查询功能,为各级水利移民工作者提供可视化的网络业务处理平台。 骋天通过该...
胡润研究院与汇加移民发布《中国投资移民白皮书》.pdf
该文件包含了美国各州的移民数据,由若干行移民数据记录组成。其中,第 1 行说明了构成移民数据记录的 9 个分项名称(列名),从第 2 行开始是具体 的移民数据记录。 "State_Code_Origin" 移出州的代码 "State_Code_...
依人口数移民的下临界独立同分布环境两性G-W分枝过程的极限行为,陈虹仿,,González .M与Molina.M等作者在2000年建立了带移民的两性G-W分枝过程模型,2007年 Yong-sheng Xing和Shi-xia Ma又在此基础上建立了伴有依...
包括2010-2017年美国移民数据,在数学建模,美国人口调查方面应用广泛
初中语文文摘历史十英镑移民女总理
农村移民安置规划设计主要为安置农村移民的规划设计工作提供辅助设计功能。
一、移民及安置的现状与分析1984年以来,我县共修建大型水库4座,中小型山塘水库5 3座,水库储水总量达2.3亿立方米,水面覆盖约1.5万公顷。水库主要分布在海拔800米以 上高坡地带,用途为灌溉农田。由于水库水面覆盖...
在本文中,我们试图确定移民对接收移民的国家的资本市场可能产生的影响。 为此,我们使用计量经济学的方法,即采用线性回归来研究移民流量之间的关系,该关系由移民人数和感兴趣的资本市场变量来衡量。 它们是市值...
横断面研究包括对150名移民妇女和150名非移民妇女的面对面采访。 访谈包括两次非连续的24小时回忆,以及关于人体测量,适应,饮食变化和生活方式的数据。 多元回归分析表明,即使在调整了其他与生活方式和饮食相关...
云南省移民开发局关于进一步规范全省大中型水利水电工程建设征地补偿和移民安置相关工作的意见.doc
明朝河北移民的来源
本文的创新之处在于提出一条新的影响路径,即通过吸引移民人口,基本公共服务可以极大地刺激国民经济增长。 本文基于“成本收益”理论,将基本的公共服务纳入人口迁移决策模型,然后利用人口迁移作为人力资本的增长...
创业计划书-关于美国移民和留学_-_美国移民官方局介绍
移民果园引水工程施工招标竞争性比选文件.pdf
基于移民算子遗传BP神经网络的模拟,对神经网络有很好的讲解
在采动区建设抗变形建筑解决移民搬迁问题在陕北地区尚属首次。针对小纪汗煤矿移民搬迁中存在的用地指标紧缺、搬迁费用高、村民不愿搬离故土等突出的人地矛盾问题,本矿区决策者提出了在采煤工作面上方地表就地重建抗...
水库移民安置绩效评估指标体系构建初探,党希,,本文从移民安置的目标出发,通过收集资料,建立预选指标集,分析移民安置中各要素的关系,研究、设计出反映移民社会、经济、环境
该数据集涵盖了大量与人口相关的详细信息,包括年度变化、密度、净移民、城市人口等。 数据集 3:按年份划分的世界人口(1950-2023): 揭示 1950 年至 2023 年世界人口的演变(每个国家的年度粒度)。该数据集可...