ホームページ >バックエンド開発 >Golang >Go を使用してスライスの一端に偏ったアイテムをスライスからランダムに選択するにはどうすればよいですか?

Go を使用してスライスの一端に偏ったアイテムをスライスからランダムに選択するにはどうすればよいですか?

王林
王林転載
2024-02-05 23:12:121037ブラウズ

如何使用 Go 从切片中随机选择一个偏向切片一端的项目?

質問内容

goslice からランダムな値を選択する方法はわかります:

リーリー

しかし、slice からランダムな項目を選択し、それを slice の一方の端にバイアスするにはどうすればよいでしょうか?私のユースケースでは、append() を使用して時間の経過とともに増加する slice を作成します。私の理解では、最新の項目は slice の右側に追加されると思います。 slice からランダムな項目を選択し、slice の最新のメンバーを優先する関数を作成したいと考えています。私の最初の推測は、rand.normfloat64() 経由で 正規分布 を使用することですが、これを達成するためにそれをどのように使用できるか、またそれを使用できるかどうかはわかりません。

この関数は、slice から任意の項目を選択できる必要がありますが、slice に追加された新しい項目をより高い頻度で選択する必要があります。


正解


正規分布に満足していると仮定すると、rand.normfloat64() を使用できます。配列に項目が 20 個ある場合:

リーリー

は、リストの先頭に向かって重み付けされた数値を生成します。そして### リーリー

は、リストの最後に向かって重み付けされた数値を生成します。

これは、サンプルのランダムな分布を示す例です。 モバイル プレイグラウンド:

https://www.php.cn/link/34ff028fc02b773b8885b59aee142e60 リーリー

出力例:

[86 92 76 80 73 69 60 69 58 51 47 38 44 30 29 24 19 27 18 10]

ただし、ランダム化されているため、最後尾のアイテムをすべて入手することもできます...

前半の数値が左半分の数値の 10 倍であるステップ関数が必要な場合は、2 つの乱数を使用するだけです。

リーリー

go プレイグラウンドの例:

https://www.php.cn/link/d5c82d99f0edb85fc94ffa4204146aad リーリー

出力例

[96 92 89 89 88 78 95 86 83 98 15 10 15 10 10 12 4 11 11 8]

以上がGo を使用してスライスの一端に偏ったアイテムをスライスからランダムに選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。