求随机的一个位置(要求性能特别好) 你现在能随机取这个数中的任意一位么?你先判断这里面有没有1,如果没有返回-1,如果有就用while循环做,对每次的随机值判断,如果是0则继续循环取随机,如果是1则跳出循环。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得先写个算法把一个数2进制表示中是1的位的整数位置取出来,存到一个数组中,你的例子中:int pos[] = new int[5]pos[0]=0;pos[1]=5;pos[2]=7;pos[3]=9;pos[4]=10;然后产生个5以内的随机数,取pos数组的一个值,然后再取出这个位置的值 想问楼主,你要求高速,是不是要重复调用很多次?那么每次嗲用的bitmap里的值是不是一样? 我觉得先写个算法把一个数2进制表示中是1的位的整数位置取出来,存到一个数组中,你的例子中:int pos[] = new int[5]pos[0]=0;pos[1]=5;pos[2]=7;pos[3]=9;pos[4]=10;然后产生个5以内的随机数,取pos数组的一个值,然后再取出这个位置的值应该是这样的吧 我有个大概的思路,不知道可不可行把这个数看作一个java的bitset,通过移动位置或者和某个bitset进行XOR得到某个恰好是1的随机位置大家看看具体如何处理才好,最好一个运算就可到结果 整数也可以用bitset来替代,我是实现一个对象重复使用的服务程序碰到这个问题的具体的说,由于是一个数学上的Monte Carlo模拟,模拟过程具有天文数的对象产生和死亡,这个是通过Poisson分布来决定的我使用的是工厂来控制对象的活动和非活动状态,所有的对象都保存在一个数组中,同时通过一个bitset来描述所有对象的状态,比如工厂数组中有10个对象,一个bitset对应有10位,10位分别是0,1,1,1,0,0,1,0,0,0表示位于位置1,2,3,6的对象活动状态,其他位置的对象是非活动的,当工厂收到一个请求,就通过(正态分布)随机选择一个bitset位置上正好是0的相对的对象输出,同时bitset这个位置上置1,同时在模拟过程中工厂会收到一个信息,让所有活动对象中的任意一个对象状态成为非活动的,需要通过随机的选择一个活动对象,设置对应的bitset上的位是0这是一个简单的例子,实际上我的对象大大多于10个,其它的解决方案也考虑过,但是存在大量的对象的移动,开销太大,所以考虑使用bitmap来记录和修改对象的状态请大家继续发言 是不是只要选择的bitset位置上为0即可?那只需要随机定位之后向前或向后或前后一起搜索位置为0的就行了,不必用正太分布的吧?比如0,1,1,1,0,0,1,0,0,0,我随机抽取到第3位,则向前或向后搜索都可以得到为0的位置。这是居于你的bitset是随机分布的较好方法,如果bitset有可能是某种特定分布的话,需要做相应优化。这也是我上面提到的算法思想。 >是不是只要选择的bitset位置上为0即可要求可以随机选0而且可以随机选1,这个具体不好讲,关于生灭过程的(生:1灭:0)这个算法不太理想的原因是假如bitmap有1000位(1000对象),但是仅仅有比如2个位上是1,我现在选择随机的一个1,有可能会找998次才找到我是0.625 msec就要产生一个生灭事件,也就是需要随机找到一个0或者1(实际上还有其他4种随机事件需要处理,这里我简化简单的生灭事件),对于对应的对象来处理,模拟过程是24小时现在抛开我的思路,各位给点建议如何实现才好 我认为:把这个数与1111111这样的数相与,这位数为1的结果肯定也是1 了。得到的新数,用indexOf("1")判断初始位置即可,如果为-1则证明没有1这样的数了。而这样的结果是每次得到第1个的数! yangjuanli(珂儿): 但是他的bitmap是1000位的,而且需要将这种储存格式转化成字符串不是太好,另外indexOf的机制也是从0位开始搜索,效率不见得有多快.... Eclipse中调试无故中止! 这是什么问题? JMF摄像头求解 概念性问题~~ 急急急 日期格式化问题——菜鸟来挑战,老鸟别进来 一个关于Socket套接字的问题 关于CDMA MODEM短信编码问题 (超级终端 smslib) 我写了一个java文件,遇到这样的编译错误: 获取字节码的方式 httpConnection的问题,大虾救命 java 文件读取的问题 急急急急急急急!!
你的例子中:int pos[] = new int[5]
pos[0]=0;
pos[1]=5;
pos[2]=7;
pos[3]=9;
pos[4]=10;然后产生个5以内的随机数,取pos数组的一个值,然后再取出这个位置的值
那么每次嗲用的bitmap里的值是不是一样?
你的例子中:int pos[] = new int[5]
pos[0]=0;
pos[1]=5;
pos[2]=7;
pos[3]=9;
pos[4]=10;然后产生个5以内的随机数,取pos数组的一个值,然后再取出这个位置的值
应该是这样的吧
把这个数看作一个java的bitset,通过移动位置或者和某个bitset进行XOR得到某个恰好是1的随机位置
大家看看具体如何处理才好,最好一个运算就可到结果
具体的说,由于是一个数学上的Monte Carlo模拟,模拟过程具有天文数的对象产生和死亡,这个是通过Poisson分布来决定的
我使用的是工厂来控制对象的活动和非活动状态,所有的对象都保存在一个数组中,同时通过一个bitset来描述所有对象的状态,比如工厂数组中有10个对象,一个bitset对应有10位,10位分别是0,1,1,1,0,0,1,0,0,0表示位于位置1,2,3,6的对象活动状态,其他位置的对象是非活动的,当工厂收到一个请求,就通过(正态分布)随机选择一个bitset位置上正好是0的相对的对象输出,同时bitset这个位置上置1,同时在模拟过程中工厂会收到一个信息,让所有活动对象中的任意一个对象状态成为非活动的,需要通过随机的选择一个活动对象,设置对应的bitset上的位是0
这是一个简单的例子,实际上我的对象大大多于10个,其它的解决方案也考虑过,但是存在大量的对象的移动,开销太大,所以考虑使用bitmap来记录和修改对象的状态
请大家继续发言
这个算法不太理想的原因是假如bitmap有1000位(1000对象),但是仅仅有比如2个位上是1,我现在选择随机的一个1,有可能会找998次才找到
我是0.625 msec就要产生一个生灭事件,也就是需要随机找到一个0或者1(实际上还有其他4种随机事件需要处理,这里我简化简单的生灭事件),对于对应的对象来处理,模拟过程是24小时
现在抛开我的思路,各位给点建议如何实现才好
但是他的bitmap是1000位的,而且需要将这种储存格式转化成字符串不是太好,另外indexOf的机制也是从0位开始搜索,效率不见得有多快....