不重复的随机整数续篇。

hayai 2003-07-17 07:08:26
刚才有一帖子迎来一些争议,我认为,完全是搂主的表达能力有问题。
什么叫“怎样产生一个不重复的随机整数”?
首先,如果产生一个整数,讨论什么重复不重复?
其次,如果产生n个整数,那么整数范围又是多少呢,搂主不懂得把它表明。取random integer [0,100) 300个,如果不可以重复,搞收取给我看看。你说是不是他表达能力有问题?
下面说一个算法,去random integer[0,m)n个,n <= m;保证不重复。
int[] aryAll = new int[m];
for (int i = 0; i < m; i++)
aryAll[i] = i;
for (int i = 0; i < m; i++)
{
int ind = (int)(Math.random()*m);
int temp = aryAll[i];
aryAll[i] = aryAll[ind];
aryAll[ind] = temp;
}
Now, the aryAll has been randomized. 别的不用讲了吧。
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hayai 2003-07-20
  • 打赏
  • 举报
回复
今天晚上结贴,分数准备结给keybook(keybook) 人家分数少嘛。
public class Shuffler
{ // condition: selecting n int from 0-m when n is close to m.
private static int m_intTotal = 0;
private static int m_intPoint = 0;

public static void initialize(int total)
{
initialize(total, 0);
}
public static void initialize(int total, int min)
{
m_intTotal = total;
if (m_intTotal > 0)
{
m_intPoint = 0;
m_aryValue = new int[m_intTotal];
for (int i = 0; i < m_intTotal; i++)
m_aryValue[i] = i + min;
}
}

public static int random()
throws RuntimeException
{
if (m_aryValue == null)
throw new RuntimeException("Shuffler is not initialized");
if (m_intPoint == 0)
randomize();
int value = m_aryValue[m_intPoint];
m_intPoint = (m_intPoint + 1) % m_intTotal;
return value;
}

///////////////////////////////////////////////////////////////////////////

private static int[] m_aryValue;
private static void randomize()
{
for (int i = 0; i < m_intTotal; i++)
{
int ind = (int)(Math.random() * m_intTotal);
swap(i, ind);
}
}
private static void swap(int a, int b)
{
int temp = m_aryValue[a];
m_aryValue[a] = m_aryValue[b];
m_aryValue[b] = temp;
}
}
hayai 2003-07-18
  • 打赏
  • 举报
回复
我那个algorithm事实上是程序模拟洗牌的算法,拿来这里正好用得上。
selecting n number in integers [0, m).
if n > m,肯定要有重复,所以不讨论。if n <= m,就像在一副牌里拿n张,一定不会重复的。
To:star821116,我实在是认为用set太慢。每一次都要判断,然后如果set里已经有了,就要在random一次。如果,n = m; 那么,当你取n个数字时,死定了。有没有听过bogo sort(random sort)?可能,你“永远”都取不到这最后一个数字。当然啦,永远是不可能的。不防你写个程序试试。n = m = 100 好了。
To:keybook,不想回答你的问题,对牛弹琴。
star821116 2003-07-18
  • 打赏
  • 举报
回复
用HashSet,或者生成随机数的时候加一个判断
star821116 2003-07-18
  • 打赏
  • 举报
回复
用HashSet,或者生成随机数的时候加一个判断
keybook 2003-07-18
  • 打赏
  • 举报
回复
hayai 你怎么知道你的程序不会重复?我觉得你的程序一定会出现重复的整数阿,aryAll[i] = aryAll[ind];如果ind=0,i=0,aryAll[0]=0,temp=0,如果ind=4,i=0,aryAll[4]=4,temp=0??自己都不知道说些什么了,反正你的步骤不能让人服气(如不出说明的话),所以请你写一份证明材料给大伙看看,让我们大家服气才好啊,行动要快哦~~~~
hayai 2003-07-18
  • 打赏
  • 举报
回复
很想知道一个更好的算法。。。。。
star821116 2003-07-18
  • 打赏
  • 举报
回复
要实现不重复随机数的方法其实太多了!
XKP 2003-07-17
  • 打赏
  • 举报
回复
hehe
不错不错
学习

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧