ホームページ  >  記事  >  バックエンド開発  >  PHP宝くじプログラムとランダム広告実装アルゴリズム

PHP宝くじプログラムとランダム広告実装アルゴリズム

WBOY
WBOYオリジナル
2016-07-25 08:53:341388ブラウズ
  1. /**
  2. * 全確率の計算
  3. *
  4. * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4)
  5. * @return string のキーを返します。上の配列
  6. */
  7. function random($ps){
  8. static $arr = array();
  9. $key = md5(serialize($ps));
  10. if (!isset($arr[$key])) {
  11. $max = array_sum($ps);
  12. foreach ($ps as $k=>$v) {
  13. $v = $v / $max * 10000;
  14. for ($i=0; $i<$v; $i++) $arr[$key][] = $k;
  15. }
  16. }
  17. return $arr[$key][mt_rand(0,count($arr) [$key])-1)];
  18. }
コードをコピー

例 2、PHP 宝くじプログラム アルゴリズム 2

  1. function get_rand($proArr) {
  2. $result = '';
  3. //確率配列の合計確率精度
  4. $proSum = array_sum($proArr);
  5. //確率配列ループ
  6. foreach ($proArr as $key => $proCur) {
  7. $randNum = mt_rand(1, $proSum);
  8. if ($randNum $result = $key; } else {
  9. $proSum -= $proCur;
  10. }
  11. }
  12. unset ($proArr);
  13. return $result;
  14. }
コードをコピー
上記のコードは、古典的な確率アルゴリズムです。プリセット配列。配列が配列 (100、200、300、400) であると仮定すると、最初の数値が 1,1000 の確率範囲からスクリーニングされ、その出現確率範囲内にあるかどうかが確認されます。そうでない場合は、確率が減少します。つまり、確率空間は k の値から先ほどの数値を引いたもので、この場合はマイナス 100 になります。つまり、2 番目の数値は 1,900 の範囲内でフィルターされます。このようにして、最後まで要件を満たす数が必ず存在します。それは、箱の中の何かに触れるようなものです。最初のものがそこになく、2 つ目も存在せず、3 つ目も存在しない場合は、最後のものが存在するはずです。

このアルゴリズムはシンプルで非常に効率的です。重要なのは、このアルゴリズムが以前のプロジェクト、特に大量のデータを含むプロジェクトで適用されているということです。

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