当前位置:编程学习 > JAVA >>

随机数生成概率

请问下,我现在要随机生成一个无向图邻接矩阵,我如何控制两个顶点有边的概率等于0.6?不知道我有没有表达清我的意思,各位大神帮我看下,谢谢。
int vertexNum = 20;
int a[][] = new int[vertexNum][vertexNum];


// 随机生成邻接矩阵
Random r = new Random();
for (int i = 0; i < vertexNum; i++)
for (int j = vertexNum - 1; j >= i; j--)
{
if (i == j)
a[i][j] = 0;
else
{
a[i][j] = r.nextInt(2);
a[j][i] = a[i][j];
}
}
--------------------编程问答-------------------- 不太懂,支持下 --------------------编程问答--------------------

a[i][j] = r.nextInt(10)<=6?1:0; //这里1就表示有线,0表示无线
--------------------编程问答--------------------
引用 2 楼 jinfengyiye 的回复:

a[i][j] = r.nextInt(10)<=6?1:0; //这里1就表示有线,0表示无线

应该是nextInt(11)吧. --------------------编程问答--------------------

if (r.nextDouble()>0.6){
a[i][j] = 1;
a[j][i] = 1;
}else{
a[i][j] = 0;
a[j][i] = 0;
}



是想表达这个意思么? --------------------编程问答-------------------- LZ可以这么做:搞一个Map<Integer,Integer> map,然后如下:
map.put(0,1);
map.put(1,1);
map.put(2,1);
map.put(3,1);
map.put(4,1);
map.put(5,1);
map.put(6,0);
map.put(7,0);
map.put(8,0);
map.put(9,0);

然后 Integer value=map.get(r.nextInt(10));
这样,value有10分之6的概率为1,LZ可以根据这个value来决定是否有边。

当然,如果需要更高的精度,map的规模可以扩展,0、1值也可以错开。 --------------------编程问答-------------------- 这个 0.6 概率如果需要比较精确的话,可以这样:

假定所有边数量为 n,那么随机选择点并生成边的数量控制为 0.6n 即可。 --------------------编程问答-------------------- 雖然看不懂,但是還是先看看思路為日後打基礎 --------------------编程问答-------------------- 这是数学LZ,只要有均匀分布的随机数发生器,通过变换可以得到任意分布的随机数。

jvm 默认给的是伪随机数,分布特征可能不完全是均匀分布,当然有待考证。
LZ当然也可以自己实现随机数生成器。

需要真随机数的话,JVM需要在某处设置一下,具体我忘了,可以google下。
真随机数,就是指收集机器物理噪音产生的随机数,Linux下有个命令的,具体拼法我也给忘了。
年纪大了,记性不行了。唉。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,