WeChat の赤い封筒のランダム アルゴリズムはどのように実装されていますか?

WeChat の赤い封筒のランダム アルゴリズムはどのように実装されていますか?

Zhihu で質問を見ました: WeChat の赤い封筒のランダム アルゴリズムはどのように実装されていますか?

[[218949]]

テンセントはこれを大まかに次のように達成したと言う人もいます。

  1. パブリック静的ダブルgetRandomMoney(LeftMoneyPackage _leftMoneyPackage) {
  2. // remainSize 残りの赤いパケットの数
  3. //remainMoney 残金
  4. _leftMoneyPackage.remainSize == 1の場合{
  5. _leftMoneyPackage.remainSize--;
  6. 戻り値(double) Math.round(_leftMoneyPackage.remainMoney * 100) / 100;
  7. }
  8. ランダム r = new Random();
  9. ダブル最小値 = 0.01; //
  10. ダブル最大値 = _leftMoneyPackage.remainMoney / _leftMoneyPackage.remainSize * 2;
  11. ダブルマネー = r.nextDouble() * max;
  12. お金 = お金 <= 最小 ? 0.01: お金;
  13. お金 = Math.floor(お金 * 100) / 100;
  14. _leftMoneyPackage.remainSize--;
  15. _leftMoneyPackage.remainMoney -= お金;
  16. お金を返す;
  17. }

正規分布や分散分析、回帰分析、統計シミュレーションなどもやっている人がいますが、画像が長すぎるので載せません。

しかし

  • すべての答えは「取られるときにランダム」、つまり「赤い封筒のプール」を設計し、それから抽選時に数字をランダムに取るというコンセプトです。
  • すべての回答は「ランダムな金額」、つまりランダムな金額で返されます。

考え方を変えてみましょう。今度は、すべてのお金を 1 セント硬貨に替え、赤い封筒を瓶として想像し、硬貨を散らします。

  1. /**
  2. * @param count赤いパケットの数
  3. * @param お金の合計金額
  4. * @戻る 
  5. */
  6. 公共 静的 整数[]ranRedPac(整数 カウント整数金額){
  7. Integer [] 結果 = 新しいInteger [];
  8. ( int i = 1; i <= お金; i++) {
  9. int n = new Random().nextInt( count );
  10. 結果[n] = 結果[n] == null ? 1 : 結果[n] + 1;
  11. }
  12. 結果を返します
  13. }
  14.  
  15. //テスト
  16. 公共 静的void main(String[] args) {
  17. Arrays.asList(ranRedPac(10, 5000000)).forEach(i -> System.out.println (i));
  18. システム.out .println( "合計: " + Arrays.asList(ranRedPac(10, 50)).stream().mapToInt(i -> i) .sum ());
  19. }

1 ペニーごとに赤い封筒がランダムに選択されます。

回帰分析や統計シミュレーションに関しては、まったく役に立ちません。

この例では、「抽選」や「ランダムな金額」などの従来の概念を放棄し、お金に選択の感覚を持たせ、「ランダム」な動作を実行させます。当然、赤い封筒にはランダムな金額という属性があります。

考え方を変えて、単純な問題を複雑にしないでください。

コードを設計するときは通常、現実世界のロジックを考慮し、オブジェクトをクラスに、動作をメソッドに抽象化します。しかし、時には考え方を逆転させることも検討すべきです。

もちろん、私のコードにはいくつかの欠点があります。

考えることが最も大切なことです。

<<:  人工知能は怖いものではありません。怖いのは、使い方がわからず淘汰されてしまうことです。

>>:  face_recognitionに基づく顔認識の実装

ブログ    
ブログ    

推薦する

AI | 人工知能プロジェクトを成功させるための 8 つの重要な役割

企業が AI プロジェクトをさらに展開するにつれて、特定の役割がビジネスの成功に不可欠であることがわ...

デジタル経済時代の識別技術の新たな展開

青果市場では、小銭を気にせず、携帯電話をスワイプするだけで支払いができます。駅では、切符を買うために...

...

JVM 世代別ガベージコレクションのプロセスとアルゴリズムの選択の図解説明

この記事は、JVM の世代別ガベージ コレクション プロセスを紹介し、さまざまなガベージ コレクショ...

企業はアルゴリズムやデータを通じて、どのようにより深い堀を築くのでしょうか?

[51CTO.com からのオリジナル記事] データは今最もホットなものです。当時は「紙は洛陽と同...

...

ディープラーニングによって変革された5つのコンピュータービジョン技術

概要: この記事では、主にコンピューター ビジョンにおける 5 つの主要テクノロジ、つまり画像分類、...

この記事では人工知能とは何かを徹底的に解説します!

人工知能 (AI) は、自然科学のさまざまな分野を網羅しており、主に特定の種類の知的な人間の活動をモ...

自動運転車の4つの重要な要素:2040年までに市場価値500億ドル

自動運転車は自動車業界にとって非常に破壊的な技術です。現在、多くのメーカーが物流、自動運転タクシー、...

...

ディープラーニングのためのヘテロジニアス アクセラレーション テクノロジー (パート 2): カタツムリの殻の中に道場を構築する

1. 概要記事「ディープラーニング向けヘテロジニアスアクセラレーションテクノロジー(パート1)」で説...

従来の不正検出ソリューションは機能していません。中小企業はどのようにして不正を防止できるでしょうか?

[51CTO.com からのオリジナル記事] モバイル インターネットの発展の初期から現在に至るま...