他の人たちが赤い封筒を掴んでいる間、プログラマーたちは赤い封筒のアルゴリズムを研究している

他の人たちが赤い封筒を掴んでいる間、プログラマーたちは赤い封筒のアルゴリズムを研究している

羊年春節期間中のWeChat紅包の人気は明らかで、広告主は現金紅包に5億円を投入し、CCTVの羊年春節祝賀会との独占協力はイベントの宣伝に大きな役割を果たした。これは強壮剤のようなもので、短期間でWeChatに大きな注目とトラフィックをもたらしました。大晦日にWeChatユーザーが送った紅包の総数は10.1億回に達し、シェイクインタラクションの回数は110億回に達し、紅包の送信回数のピークは1分間に8.1億回に達した。

WeChat紅包の市場価値はさておき、紅包自体のアルゴリズムも白熱した議論を巻き起こしています。公式が明確な声明を出していないため、さまざまな意見があります。編集者も以下にいくつかの分析をお届けします。

まずはデータ分析の帝王を見てみましょう

ほとんどの人は独自の推測を行いますが、これは内部のランダム化アルゴリズムがわからない場合の唯一の選択肢ですが、ほとんどの人は独自の調査結果を提供しません。ここに 100 サンプルの調査サンプルデータがありますので、ご自身で推測してみてください。

1. ウォレット内の金額は、切り捨て正規乱数分布を満たします。大まかに言えば、切り捨て正規分布から乱数を取り出し、その合計を合計値で割って補正係数を取得し、次に補正係数をすべての乱数に掛けて赤い封筒の値を取得します。

この分布は、平均より低い赤い封筒は多いが、平均からそれほど離れていないこと、平均より高い赤い封筒は少ないが、平均よりもはるかに高い赤い封筒が多いことを意味しています。

図1. ウォレット値とその頻度分布ヒストグラムと正規分布

しかし、分布ヒストグラムを見ると、正規分布に準拠しているとは言えませんが、プログラムの単純さと乱数の合理性を考慮すると、これが最も合理的な推測です。

ウォレットが新しいほど、価値が高くなります。

図2. ウォレットのシーケンス番号とその値の関係を示す曲線

図 2 の線形フィッティングの赤い線から、ウォレット値の全体的な傾向はゆっくりと増加しており、その変化の範囲は緑の点線の上限と下限によって描かれた「チャネル」とほぼ一致していることがわかります。 (曲線がこのような従来の「チャネル」で囲まれるという事実は、ルール1の合理性を側面から反映しており、均一に分布した乱数ではないことを示しています)

このパターンは、平均値の別のグラフからも確認できます。

図3. シーケンス数に応じて変化する平均値の曲線

サンプルでは、​​価値が 1,000 のウォレットが平均 10 の 100 個の部分に分割されます。しかし、図 3 を見ると、最後のウォレットの前では平均値が常に 10 未満であったことがわかります。これは、最初のウォレットの価値が低く、より価値の高い後のウォレットの価値によって常に引き上げられたことを意味します。

3. もちろん、平均グラフは別のパターンも明らかにします。つまり、最も多くの抽選回数を獲得した人は幸運で、より多くの抽選を行うことが多いということです。最初の人は財布に残っているものをすべて取り、前の人全員の平均は 10 未満なので、少なくとも最初の人は平均を上回ることが保証されます。このサンプルでは、​​ウォレット 98 は 35 を引き、最後のウォレットは 46 を引きました。

要約すると、サンプルの推測に基づくと次のようになります。

1. ほとんどの場合、引き出す金額は他の人と同じですが、一度増えると、簡単にはるかに多くなる可能性があります。

2. 財布の後ろの方から引き出すほど、より多くのお金を取り出しやすくなります。

3. ***人にとって幸運を得るのは簡単なことであることが多い。

コメント: これは明らかに非常に実用的で、違いがあります。いつ手に取っても、数セントしかかかりません。

2人目の学生は簡単なPythonコードを書いた

赤い封筒の配布は、以下の点を満たしていることが確認されています。

1. お金に困る人はいない

2. 事前に配布されません

3. お金は大きく変動する

配布計画は、赤い封筒が最初に作成されたときに決定されます。赤い封筒をつかむと、封筒が一つずつ飛び出てきます。

したがって、Python コードは次のようになります。

  1. def weixin_divide_hongbao(お金, n):
  2. 分割表 = [random.randint( 1 , 10000 )xの範囲xrange( 0 , n)]
  3. sum_ = sum(divide_table)
  4. [ divide_table内のxに対してx*money/sum_を返す]

ただし、上記のアルゴリズムには 2 つの小さな問題があります。

1. 浮動小数点精度の問題

2. 境界値処理

3人目の学生は、インターネットで流通しているPythonバージョンに基づいてJavaバージョンを作成しました。

  1. 整数j = 1 ;
  2. 一方(j< 1000
  3. {
  4. 整数= 10 ;
  5. 浮動小数点合計 = 100 ;
  6. お金を浮かせる;
  7. ダブル最小値 = 0.01 ;
  8. ダブルマックス;
  9. 整数i = 1 ;
  10.  
  11. リストmath = new ArrayList();
  12. (i<数値)の場合
  13. {
  14.  
  15. 最大 = 合計- 最小*(数値- i);
  16. int k = ( int )((数値-i)/ 2 );
  17. if (数値 -i <= 2 )
  18. {k = 数値 -i;}
  19. 最大値 = 最大値/k;
  20. お金=( int )(min* 100 +Math.random()*(max* 100 -min* 100 + 1 ));
  21. お金=( float )お金/ 100 ;
  22. total=合計金額;
  23. math.add(お金);
  24. System.out.println( "その" +i+ "人が" +お金+ "残り" +合計を取得します);
  25. 私は++;
  26. if (i==数値)
  27. {
  28. math.add(合計);
  29. System.out.println( "その" +i+ "人は" +total+ "0 残り" );
  30. }
  31. }
  32.  
  33. System.out.println( "このラウンドで配布された赤い封筒の数" +(math.indexOf(Collections.max(math))+ 1 )+ "個人的な運***" );
  34. j++;
  35. }

4番目の学生が提案したアルゴリズムは非常に科学的であるように思われます。

彼はこう信じている。

1. 誰もが紅包を受け取れるようにする。

2. 各人が受け取った紅包の金額の合計 = 合計金額

3. 各人が受け取る紅包の数は異なりますが、あまりに違うとつまらないものになります。

4. アルゴリズムは単純でなければなりません。そうでなければ、Tencent の評判に応えられません。

正式なコーディングの前に、ルールを分析するための漸進的なモデルを構築する

合計金額を10元に設定すると、N人がランダムに受け取ります。

1 です

すると、紅包の金額はX元になります。

2倍

2番目の赤い封筒が正常に発送されるように、最初の赤い封筒の金額 = 0.01〜9.99の間の乱数

2 番目の赤いパケット = 10 - 最初の赤いパケットの金額;

3 倍

レッドパケット1 = 0.01から0.98の間の乱数

赤い封筒 2 = 0.01 から (10 - 赤い封筒 1 - 0.01) までの乱数

赤い封筒 3 = 10 - 赤い封筒 1 - 赤い封筒 2

  1. header("Content-Type: text/html; charset = utf -8"); // 出力は文字化けしていません。
  2. $ total = 10 ; //赤い封筒の合計金額
  3. $ num = 8 ; // 8つの赤い封筒に分け、8人がランダムに受け取れるようにする
  4. $ min = 0.01 ; // 一人当たり最低0.01元を受け取ることができます
  5.  
  6. ($ i = 1 ;$ i < $num;$ i++)の場合
  7. {
  8. $ safe_total =$total-($num-$i)*$min; //ランダムな安全上限
  9. $お金= mt_rand ($min*100,$safe_total*100)/100;
  10. $合計= $合計 - $お金;
  11. echo ''.$i.'番目の赤い封筒: '.$money.'元、残高: '.$total.'元< br /> ';
  12. }
  13. echo ''.$num.'番目の赤いパケット: '.$total.'元、残高: 0元';

入力してみると、変動が大きすぎてデータがつまらない!

最初の赤い封筒:7.48元、残り:2.52元

2つ目の赤い封筒:1.9元、残高:0.62元

3つ目の赤い封筒:0.49元、残高:0.13元

4番目の赤い封筒:0.04元、残高:0.09元

5番目の赤い封筒:0.03元、残高:0.06元

6番目の赤い封筒:0.03元、残高:0.03元

7番目の赤い封筒:0.01元、残高:0.02元

8番目の赤い封筒:0.02元、残高:0元

平均値をランダムな安全上限として使用してボラティリティを制御することで改善する

  1. header( "Content-Type: text/html; charset=utf-8" ); // 出力は文字化けしていません。  
  2. $total= 10 ; //赤い封筒の合計金額 
  3. $num= 8 ; // 8つの赤いパケットに分割し、8人がランダムに受け取ることをサポートします 
  4. $min= 0.01 ; // 誰もが少なくとも0.01元を受け取ることができます 
  5.  
  6. ($i= 1 ;$i<$num;$i++)の場合
  7. {
  8. $safe_total=($total-($num-$i)*$min)/($num-$i); //ランダムな安全上限 
  9. $money=mt_rand($min* 100 ,$safe_total* 100 )/ 100 ;
  10. $total=$total-$money;
  11. echo '' .$i. '番目の赤い封筒: ' .$money. '元、残高: ' .$total. '元 <br/>' ;
  12. }
  13. echo '' .$num. ' の赤いパケット: ' .$total. ' 元、残高: 0 元' ;

出力結果は下の図のようになります。

最初の赤い封筒:0.06元、残高:9.94元

2つ目の赤い封筒:1.55元、残高:8.39元

3つ目の赤い封筒:0.25元、残高:8.14元

4番目の赤い封筒:0.98元、残高:7.16元

5番目の赤い封筒:1.88元、残高:5.28元

6番目の赤い封筒:1.92元、残高:3.36元

7番目の赤い封筒:2.98元、残高:0.38元

8番目の赤い封筒:0.38元、残高:0元

まとめ:

編集者は、これは赤い封筒によって引き起こされた殺人として完全に理解できると考えています。編集者はほんの一部を挙げただけです。一部の工学部の学生は、数学モデル、離散関数などを直接投げ出しましたが、アルゴリズムが単純であろうと複雑であろうと、楽しむには十分です。

<<:  プログラマーが知っておくべき10の基本的な実用的なアルゴリズムとその説明

>>:  Jenkins 独自のユーザー データベース暗号化アルゴリズムの簡単な分析

ブログ    
ブログ    

推薦する

Rosetta はプライバシー コンピューティングと AI をどのように結び付けるのでしょうか?

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

カリフォルニア工科大学、プロペラアームを使って滑空する二足歩行ロボットを開発

LEONARDO は、カリフォルニア工科大学の航空宇宙ロボット工学および制御研究所の言語の天才たちの...

AIプロジェクト開発における10の最も一般的な間違い

人工知能 (AI) モデルのトレーニングは単純に思えるかもしれませんが、そうではありません。 AI ...

失礼ながら、モデルはプロンプトが何を言っているのか理解できない可能性があります。

GPT-3などの超大規模モデルの登場により、コンテキスト内学習も普及してきました。インコンテキスト...

「スカイアイ」が駐車問題を解決し、人工知能が都市統治を強化

新華網、北京、3月4日、タイトル:「スカイアイ」が駐車の難しさを解決し、人工知能が都市統治を強化新華...

30% のトークンで SOTA パフォーマンスを達成、Huawei Noah 軽量ターゲット検出器 Focus-DETR が効率を 2 倍に

現在、DETR モデルはターゲット検出の主流のパラダイムとなっています。しかし、DETRアルゴリズム...

安全性は小さな問題ではありません。これがAI時代に彼らが選択することです

AI時代においては、セキュリティを早急に再定義する必要があります。人工知能やモノのインターネットなど...

AI を活用して災害による損失を評価し、救助活動を支援する

地震、ハリケーン、洪水などの自然災害は、広大な地域と何百万人もの人々に影響を及ぼし、物流上の大きな課...

確かな情報です! AIテクノロジーアーキテクチャソリューションの実現可能性を判断するのに役立つ3つの重要な要素

近年、人工知能は急速に発展しており、コンピュータービジョンや自然言語処理の分野で画期的な変化をもたら...

GPT-4 が「Who is the Undercover」ボードゲームに大混乱を引き起こします。会話はリアルだが、人間らしさにはまだ改善の余地がある

生成 AI 研究が新たな活力を得ています。韓国チームは、GPT に「Spyfall」と呼ばれるギャン...

...

...

...