现急求一个实现 抽签的算法 ;  功能:从数据库中 m 条记录中抽取 n 条 (m>n) 
 
 要求:尽最大可能公平 请大家提供 好的算法 或者 思路  谢谢!!!

解决方案 »

  1.   

    随机数出现概率
    1、区间法 
    定义一个最大区间,如1000,新建一个区间数组,如[10,50,200,400,600,1000],然后出0~1000的随机数,在哪个区间就是哪个。 2、洗牌法 
    定义一个大数组,如a[1000],按照概率往里填充目标值,如[1,1,1,   ……   2,2,……   ,5,……],然后打乱(随你怎么打乱都行),再出0~999的随机数n,取a[n]即可。 当然,如果你有历史出现记录,还可以在取到出现值后再判断一次,超出概率范围就重出。
      

  2.   


    select top n * from orders order by newid()
      

  3.   

    从1-m中随即产生一个数字,然后在剩下的m-1个数字中随机产生一个数字,知道产生了n个为止,这样不会重复,要想公平的话,就需要每条记录多一个公平值的字段,记录这条记录被抽取的以往概率,抽取的时候结合这个概率来处理,决定是否抽取或者重新,可以平衡
      

  4.   

    select top  n  * from tableName a order by newid()
      

  5.   

    一般就按照 wackyboy 的