数据库中有两个字段 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 要求考虑性能及扩展性。写出概率分布相关代码。
调试欢乐多
要是我就这么做$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);
}
个人理解题目意思:
假设sorce=5 那么sorce更新为6的概率是25%,更新为7的概率为25% 那么剩下的50%是不是不变?
是不是想当与从{5,5,6,7}(取到6、7的概率都为25%)中随机取一个更新sorce的值?
以此类推……
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;
}
关于效率,这种有随机数,又需要大量update的。想不出有什么特别的好办法