5

この投稿で提供された回答を使用して、リストからランダムにユニークなアイテムを選択したいと思います。

説明した方法に従って、ループの各反復で、現在のアイテムがリストから選択される確率のパーセンテージ値である確率値を生成します。

私が知る必要があるのは、このパーセンテージ値を使用してアイテムを選択する(または選択しない)方法です。

これが私が持っているコードですremainingIndicesList<int>

for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
}

pixelsToAddは120で、remainingIndices.Countは3600です。私が始めている確率値は0.0333333351です。

ソリューションは、はるかに広い範囲の値、できれば任意の値で機能するように柔軟である必要があります。

ありがとう

コメント

この質問の将来の読者のために、最初は確率値が0から100の間のパーセンテージであると思ったが、実際には0から1の間の値でRandom.NextDouble()あるため、戻り値と完全に一致することを明確にする必要があります。以下の回答で説明されている比較。

4

1 に答える 1

3

確率を使用するには、上の一様分布に従う確率変数からのサンプルと比較します[0, 1]

if (Random.NextDouble() <= probability)
    // Take the ith element in the list

結果のループは次のようになります。

List<???> selectedItems = new List<???>();
for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
    if (Random.NextDouble() <= probability)
    {
        selectedItems.Add(items[i]);
        pixelsToAdd--;
    }
}
于 2013-02-02T21:55:32.657 に答える