基于概率选择2项中1项的算法

时间:2010-10-21 07:06:32

标签: php algorithm programming-languages

我正在编写一个生成两个包含数据的数组的项目。一个数组包含特定国家/地区的数据,另一个数组包含所有国家/地区的数据。

例如,如果来自美国的用户发出请求,我们将生成两个包含数据的数组。一个数据仅针对美国,另一个针对全球数据,包括美国。如果访客来自美国,我想让美国阵容有60%的机会被选中。这意味着另一个阵列有40%的机会被选中。

如何对此进行编码?

2 个答案:

答案 0 :(得分:7)

if(rand(1, 100) <= $probability_for_first_array)
{
    use_the($first_array);
}
else
{
    use_the($second_array);
}

我发现这是一个简单易懂的解决方案

答案 1 :(得分:3)

<?php

$us_data = "us";
$worldwide_data = "worldwide";

$probabilities = array($us_data => 0.60, $worldwide_data => 0.40);

/* Code courtesy of Jesse Farmer
 * For more details see http://goo.gl/fzq5
 */
function get_data($prob)
{
 $random = mt_rand(0, 1000);
 $offset = 0;
 foreach ($prob as $key => $probability)
 {
  $offset += $probability * 1000;
  if ($random <= $offset)
  {
   return $key;
  }
 }
}

?>

Gabi的示例适用于两组,但如果您有更多数据集可供选择,则if-else结构不合适。