現在、セール中の商品を表示する機能に関するプロジェクトに取り組んでいます。 。たとえば、当社の Web サイトに大量のトラフィックがあり、数秒以内に何千人ものユーザーが同時に商品をクリックした場合、確かに「購入を急ぐ人が多すぎて、システムがビジー状態になっている」ように見えます。 「
しかし、ほとんどのウェブサイトはそれほど素晴らしいものではありません。ユーザーにその製品が非常に人気があることを感じさせ、常に「システムがビジー状態」の効果が表示されるようにするには、「ビジー状態を装う」プログラムを作成する必要があります。 (タオバオを除いて、他のウェブサイトが本当に忙しいとは思わないでください。それは、わざと手に取らないと購入できないように感じさせているだけです。ご理解ください)
この記事はルールを設定しており、私のアイデアに従って拡張することができます。
1. 誰でも製品購入リンクをクリックできます。
2. ユーザーに 70% の確率で「順番待ちの混雑した商品」を提供したいと考えています
この記事はphpコードを使用して実装されています。他の言語と同様に変更してください。
まずは小学校で習った知識を使って考えてみましょう
1. ボールが 10 個ある場合、3 つは赤いボール、7 つはバスケットボールです。バッグに入れてください。ランダムに混ぜて手を入れて触らせてみると、バスケットボールに触れる確率はどれくらいでしょうか?明らかに70%です
私は以前この要件を友人に見せました。彼が出した答えは次のとおりです。
$arr=array("赤","赤","赤","青","青","青","青","青","青","青");
をエコーします。
このアプローチは実際には非常に賢明です。しかし、この小さな友達は非常に重要な点を無視しました
2. 2人目に触れたらどうしますか? ここで注意すべき点の 1 つは、2 番目の人がタッチしてきた場合、これら 10 個のボールを埋める必要があるということです (まだ赤いボール 3 個とバスケットボール 7 個です)
そして一番大切なのは「ランダムに、さりげなく」混ぜ続けること。この方法では、2 人目がバスケットボールに触れる確率は依然として 70% です。
上記の手順では明らかに無視されています。「ランダムかつカジュアルに」混合し続けることです。 全員が最初の 3 つの赤と最後の 7 つの青を押してボールに触れるとします。その場合、PHP の rand 関数はバスケットボールが 70% であることを保証できません。
これに関して言えば、多くのマスターは、ベイジアン、行列などのさまざまな高度なアルゴリズムを考え出したいと考えています。このような電子商取引機能にこれほど複雑な計算が必要な場合、あなたの上司は、この機能を完了するために多大な時間を費やすことに同意しないでしょう。
次に、シンプルですが正確なアルゴリズムを公開します。私たちの目標は、PHP の単純な関数を使用して、バスケットボールに触れる確率をできるだけ 70% に近づけることです。
ステップ 1: $arr=array("赤","赤","赤","青","青","青","青","青","青","青 ” ); これが必要です。これらは初期化された 3 つの赤いボールと 7 つのバスケットボールです
ステップ2:ランダムにランダムに混ぜます。
まず、swap 関数を作成します (この関数を理解していない場合は、基本を学ぶ必要があります)
リーリー
この関数は、2つの乱数を入力し、配列内のシーケンス番号を交換することで実装されます。
上記の交換関数と入力されたランダムパラメータにより、赤いボールと赤いボール、またはバスケットボールとバスケットボールが交換されます。ただし、「本当の」ミキシングは達成されません
したがって、すべての交換が赤いボールとバスケットボールのランダムな交換になるようにするための補足関数を作成する必要があります
リーリーこの関数の機能は、10 個のボールの中から赤いボールまたはバスケットボールを見つけ、それぞれの現在のシリアル番号を取り出し、rand 関数を使用してバスケットボールまたは赤いボールのシリアル番号をランダムに選択することです。
こちらをご覧ください:
$i=getRange($arr,”red”) //これにより、ランダムな赤いボールのシリアル番号を取得できます
ランダムにランダムに混合を開始します
リーリーここで注意すべき重要な点は、$num
4番目のステップが完了した後に出てくる$arrは、赤いボールとバスケットボールを混ぜたものです。
ステップ 5: rand 関数を再度呼び出しますエコー $arr[rand(0,9)];
コンテンツが青色の場合は、直接終了します (「とても忙しいので、気にしないでください」)
赤の場合は、プログラムに購入プロセスの実行を継続させます。