"가중치 랜덤 구하기"의 두 판 사이의 차이

(새 문서: ==PHP== <source lang='php'> function weighted_random($weights) { $r = rand(1, array_sum($weights)); for($i=0; $i<count($weights); $i++) { $r -= $weights[$i]; if($r < 1) return...)
 
잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(다른 사용자 한 명의 중간 판 16개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==PHP==
;PHP 가중치 랜덤 계산
<source lang='php'>
;weighted random
function weighted_random($weights)
 
{
==함수==
<syntaxhighlight lang='php'>
function weighted_random($weights) {
   $r = rand(1, array_sum($weights));
   $r = rand(1, array_sum($weights));
   for($i=0; $i<count($weights); $i++) {
   for($i=0; $i<count($weights); $i++) {
  $r -= $weights[$i];
    $r -= $weights[$i];
  if($r < 1) return $i;
    if($r < 1) return $i;
   }
   }
   return false;
   return false;
}
}
</syntaxhighlight>
==실행 예시==
위 함수를 이용하여 a, b, c 중 하나를 랜덤으로 선택하되, 그 확률이 10:20:70이 되도록 해보자.
<syntaxhighlight lang='php'>
$values = ['a','b','c'];
$weights = [10,20,70];
$index = weighted_random($weights);
$result = $values[$index];
echo $result;
</syntaxhighlight>
==반복 실행 예시==
실제 비율이 그 정도로 나오는지 알아보기 위해 1000번 정도 반복 실행해보자.
<syntaxhighlight lang='php'>
$values = ['a','b','c'];
$weights = [10,20,70];


$values = array('a','b','c');
for($i=0;$i<1000;$i++) {
$weights = array(10,20,70);
for($i=0;$i<1000;$i++)
{
   $index = weighted_random($weights);
   $index = weighted_random($weights);
   echo "<br/>".$values[$index];
  $result = $values[$index];
   echo "$result<br/>";
}
}
</source>
</syntaxhighlight>
 
==같이 보기==
*[[Array balanced interlace]]
*[[함수 rand_between()]]
 
[[분류:랜덤]]
[[분류:PHP]]

2020년 11월 2일 (월) 02:36 기준 최신판

PHP 가중치 랜덤 계산
weighted random

1 함수[ | ]

function weighted_random($weights) {
  $r = rand(1, array_sum($weights));
  for($i=0; $i<count($weights); $i++) {
    $r -= $weights[$i];
    if($r < 1) return $i;
  }
  return false;
}

2 실행 예시[ | ]

위 함수를 이용하여 a, b, c 중 하나를 랜덤으로 선택하되, 그 확률이 10:20:70이 되도록 해보자.

$values = ['a','b','c'];
$weights = [10,20,70];

$index = weighted_random($weights);
$result = $values[$index];
echo $result;

3 반복 실행 예시[ | ]

실제 비율이 그 정도로 나오는지 알아보기 위해 1000번 정도 반복 실행해보자.

$values = ['a','b','c'];
$weights = [10,20,70];

for($i=0;$i<1000;$i++) {
  $index = weighted_random($weights);
  $result = $values[$index];
  echo "$result<br/>";
}

4 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}