数据库中有两个字段 id, sorce.假设sorce的取值范围是 5-10.   按照以下概率实现sorce数据的更新。   5(25%) => 6 5(25%) => 7   6(20%) => 7   7(25%) => 8 7(25%) => 6   8(10%) => 6 8(25%) => 9   9(15%) => 8 9(20%) => 10   10(25%) => 9   要求考虑性能及扩展性。写出概率分布相关代码。 

解决方案 »

  1.   

    概率不熟
    要是我就这么做$updateArray = array('5.25'=>'6','5.25'=>'7');foreach($updateArray as $k=>$v){
       $ks = explode('.',$k,2);
       $sql = "update table set field='{$v}' where field={$ks[0]} and round(rand(),2) <={$ks[1]}";
       $db->query($sql);
    }
      

  2.   

    我感觉性能会很低下。。因为使用了rand()和round()
      

  3.   

    array('5.25'=>'6','5.25'=>'7');没这样的数组。
      

  4.   

    关注一下
    个人理解题目意思:
    假设sorce=5 那么sorce更新为6的概率是25%,更新为7的概率为25% 那么剩下的50%是不是不变?
    是不是想当与从{5,5,6,7}(取到6、7的概率都为25%)中随机取一个更新sorce的值?
    以此类推……
      

  5.   

    楼主挺有意思,你自己的需求吧,你这是模拟商品评分波动吧function getChangeNum($oldNum){
    if($oldNum<5 || $oldNum>10){
    return false;
    }
    $randArr = array(
    5=>array(25=>6, 50=>7),6=>array(20=>7),
    7=>array(25=>8,50=>6),8=>array(10=>7,35=>9),
    9=>array(15=>8,35=>10),10=>array(25=>9),
    );
    $arr = $randArr[$oldNum];
    $random = rand(1,100);
    foreach ($arr as $k=>$v ){
    if( $random<$k ){
    return $v;
    }
    }
    return false;
    }
      

  6.   

    2楼的做法是可以的,除了数组的写法不对。 
    关于效率,这种有随机数,又需要大量update的。想不出有什么特别的好办法