问个随机数的问题。记录的概率与权 ( 积分: 100 )

  • 主题发起人 主题发起人 墨剑
  • 开始时间 开始时间

墨剑

Unregistered / Unconfirmed
GUEST, unregistred user!
有张数据表有100条记录,要求每次随机从里面找出一条,这怎么找啊? 对了,有看官说了,每条记录编个号,1到100,用random先生成数,再查询表。 嗯,这办法行。 但是另外又有了一个新的要求,如果需要控制每条记录的概率呢? 那就要再加一个字段“权值”了。可是权值怎么设?又怎么按权值随机去查询出一条记录?
望大家赐教。
 
概率不外乎就是0.0-1.0之间的数;你要控制某一个记录的概率,就可以设置成0.5(意思就是这条记录不能超过一半)或者0.6(意思就是说这条记录不能超过60%)后者0.7(......)等等。。。
我的理解是这个样子!
 
也不是了,我想应该是要所有记录的权加起来=1。 但怎么根据权随机?
 
权H: array[0..99] of Integer; //0..10000间的整数,平均数100,总和为10000;
理解为1的概率被分成10000份,每条记录的份数不同。
tmpV := Random(9999) + 1;
for i := 0 to 99 do
begin
if tmpV <= H then
begin
RecNo := i;
Break;
end
else Dec(tmpV, H);
end;

理解为把所有权值做连续分布,概率按分布取。
 
好办法,这样容易使用代码实现。某一个范围代表一个数 ,权重范围就大,如果随机数在这个范围,就取这个数 。
 
是的,对于数组是可以这样做,但是对于数据库中的记录呢?这些记录不一定有编号。即使有编号,这些编号不一定连续。所以还是不行。那是不是先把记录全读出来做比较?
 
后退
顶部