ホームページ >バックエンド開発 >PHPチュートリアル >PHPランダムレッドエンベロープアルゴリズムの詳細説明

PHPランダムレッドエンベロープアルゴリズムの詳細説明

墨辰丷
墨辰丷オリジナル
2018-05-18 14:49:041746ブラウズ

この記事では、主にPHPで実装されたランダムな赤いエンベロープアルゴリズムを紹介し、PHPのランダムな赤いエンベロープアルゴリズムの原理、実装方法、および関連する注意事項をサンプルの形で分析します。必要な友人はそれを参照できます

詳細は次のとおりです。

1. 全体的なデザイン

多くのアルゴリズムがあり、自分で選択できます。主な「アーキテクチャ」は次のようなもので、redis decr() コマンドを使用してフローを制限し、mysql を使用します。さまざまな必要なデータを記録します

2. 赤い封筒のアルゴリズム

簡単のため、赤い封筒の量は整数で表されます。各赤い封筒には残りの赤い封筒の数が含まれていると仮定します)*。 2、最初に各人に1つのBeanを事前に割り当てる必要があります

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;
}


複数回カウント


2番目の種類は、単純に展開し、それぞれの赤い封筒の最大量は: (残量/残りの赤い封筒の数)*3; ただし、毎回少なくとも 2 つの赤い封筒を送る必要があります

3 番目の方法 は、ランダムにいくつかの数値を生成し、直線をいくつかに分割しますセグメント、それぞれ セグメントの長さ (これは大きく変動し、あまり平均的ではありません。各赤い封筒のサイズが制限されている場合、さらに面倒になります)

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 &#39;<pre class="brush:php;toolbar:false">&#39;; print_r($beans); echo array_sum($beans);
}
abc(100000, 3);


4番目の
:

各人は少なくとも 1 つの Bean を持っているため、Bean の数がランダムに生成されるたびに、残りの Bean 数 * 1 Bean を予約する必要があります。これらの必要な残りの Bean 数を削除した後、残りの数の平均を使用します。今回は Bean の数をランダムに生成するための最大値として Bean を使用します

関連する推奨事項:

php で実装された

ランダムな赤い封筒

アルゴリズム

php 固定の赤い封筒と
ランダムな赤い封筒の実装方法

アルゴリズムの詳細説明(画像)

phpは
ランダムな赤い封筒を生成する

アルゴリズム


以上がPHPランダムレッドエンベロープアルゴリズムの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。