이 글은 주로 PHP에서 구현된 Random Red Envelope 알고리즘을 소개하며, PHP Random Red Envelope 알고리즘의 원리, 구현 방법 및 관련 주의사항을 예제 형식으로 분석하여 도움이 되길 바랍니다. 모든 사람.
1. 전체 디자인
알고리즘에는 여러 종류가 있으며 직접 선택할 수 있습니다. 주요 "아키텍처"는 다음과 같습니다. redis decr() 명령을 사용하여 흐름을 제한하고 mysql을 사용하여 다양한 필수 데이터를 기록합니다
2. 빨간 봉투 알고리즘
간단히 설명하기 위해 빨간 봉투의 양은 정수로 표시됩니다. (남은 양/남은 숫자) 빨간 봉투)*2, 처음에는 한 사람당 한 개의 콩을 미리 할당해야 합니다
function randBean($total_bean, $total_packet) { $min_bean = 1; $max_bean = 5000; $range = 2; $total_bean = $total_bean - $total_packet * $min_bean; //每个人预留一个最小值 $list = []; $min = 1; while(count($list) < $total_packet){ $max = floor($total_bean / $total_packet) * $range; $bean = rand($min, $max); if ($bean <= $max_bean - 1) { $list[] = $bean; $total_bean -= $bean; } } $list[] = $total_bean;//剩余的金豆作为最后一个红包 //合并 foreach ($list as $k => $v) { $list[$k] += $min_bean; } return $list; }다중 통계
두 번째는 간단히 확장하여 각 빨간색의 최대 수량 봉투는 (남은 수량/남은 빨간 봉투 수)*3이지만 매번 최소 2개의 빨간 봉투를 보내야 합니다
세 번째 방법, 선 분할 방법은 여러 개의 숫자를 무작위로 생성하고 직선을 나눕니다. 여러 개의 Segment로 나누어 각 Segment의 길이(이것은 크게 변동하고 평균이 아닙니다. 각 빨간 봉투의 크기가 제한되어 있으면 더 번거로울 것입니다)
function abc ($total_bean, $total_packet) { $min = 1; $max = $total_bean -1; $list = []; $maxLength = $total_packet - 1; while(count($list) < $maxLength) { $rand = mt_rand($min, $max); empty($list[$rand]) && ($list[$rand] = $rand); } $list[0] = 0; //第一个 $list[$total_bean] = $total_bean; //最后一个 sort($list); //不再保留索引 $beans = []; for ($j=1; $j<=$total_packet; $j++) { $beans[] = $list[$j] - $list[$j-1]; } // return $beans; echo '<pre class="brush:php;toolbar:false">'; print_r($beans); echo array_sum($beans); } abc(100000, 3);
네 번째 것
:
왜냐하면 각 사람은 최소 1개의 콩을 가지고 있으며, 콩이 무작위로 생성될 때마다 남은 콩 수 * 1개의 콩을 예약해야 합니다. 필요한 남은 콩 수를 제거한 후 남은 콩 수의 평균을 사용합니다. 이번에는 빈 수를 무작위로 생성하기 위한 최대값으로 beans
관련 권장 사항:
php가 고정 빨간색 봉투 및 무작위 빨간색 봉투 알고리즘을 구현하는 방법에 대한 자세한 설명(그림)
위 내용은 PHP에서 임의의 빨간 봉투 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!