随机抽取算法实现的疑问

晓亮 发布于 2012/03/28 15:32
阅读 982
收藏 0

废话不说,描述问题先:

     有一组数据,假设是从1-1000吧,首先我要从这1000个数据中取出若干个(假设是300个,这300个不需要随机抽取出来,是按照一定条件),然后在取出的300个数据里面抽取10个(假设是10个);这个算法很容易实现。但是麻烦的地方在于,这1000个数据在一年内会多次抽取,每个数据在每月内抽取不超过三次,每年抽取不超过九次,也不能出现连续三次被抽到,这个算法如何实现,主要是要达到随机的一个目的。查了很多资料,也尝试去实现过,但是重复的概率还是比较高!求大神们给点意见。

加载中
0
Yisen
Yisen

恩。。福利彩票的吗?

先取出10个,然后跟本月已抽取的以及本年已抽取的做比对,不符合就随机再取一个出来比较,直到符合为止,这样可行否?

或者,如果本月超过三次/每年超过九次的/已经连续二次出现,把这些数剔除掉,再在里面随机抽

Andre.Z
Andre.Z
没看到最后一句,我废话了,删除了我发的。是本月等于3,本年等于9,因为不可能超过撒
0
中山野鬼
中山野鬼

哈哈。我也废话不说。给楼主点意见。

第一,绝对的随机事件是没有的。(当然这个是个哲学话题,是否认可任何是否存在因果,只是因果关系是否被发现)

第二,所谓随机是只在一定范围(我要谈多维空间可能太数学了)内,两信号之间没有任何关联。

由于你的目标是从每个月或每年进行随机抽取,我相信可能是个随机采样做统计分析的目标,不太可能你是将一个实时采样(例如每秒K级别的)为了说明清楚扩散到年。

也即你的采样尺度最小分辨率应该是日历日。假设你可能会固定某月某日抽取,例如每年7月份的第一周的第一个工作日。此时则不方便采用日期作为随机数的因子,反之则可以。

如果日期是随机数因子k,一个简单的方法,你可以采用HASH的方法。将日期无论是数值化还是字符串的,进行迭代求HASH值。但比如MD5之类出来的是64个字符。这个大了。可能你只要 1%到 100%之间的随机数分辨率。但此时你可以做一个归一化算法。做分辨率的调整。只不过所有除法统一到最后一步,防止精度损失。

如果日期不是随机因子k,例如你固定死每年的某一天进行采样。我觉得这个事情可以通过另一种方法求得。因为前面已经我假设你的最小尺度是日历日。则你可以读取电脑的CPU计数器。就是CPU目前从开机到现在运行了多少频率(有个简单的汇编语句可以读取到这个值),以前我们是用来在微软的平台上做性能初步分析的(毕竟微软提供的都是毫秒级的,我们希望做到微秒一下的性能观测)

你读取的这个值就是随机因子再做HASH。则一样可以实现。

 

晓亮
晓亮
恩,谢谢你的建议,我这边尝试一下,看看能否做到。
晓亮
晓亮
是啊,是有点麻烦 。。。
返回顶部
顶部