如何从几个可能为空的数组中按优先级获取随机项

时间:2014-08-09 23:10:02

标签: algorithm random probability-density

我想从三个列表中随机选择一个项目,其中每个列表代表不同的选择概率。

我有三个列表(也可以是3个阵列):高,中,低"优先级"。

我想通过优先机会从这三个列表中选择一个项目

E.g。高于70%的可能性从20%的中间和低的休息10%

然而,一些列表可能是空的(不是全部)

至少其中一个列表中有一个项目

我正在寻找能够做到这一点的算法(任何语言,但更喜欢C#Java Python)

我尝试了以下代码(Python),但它没有完成这项工作 由于空状态,有时甚至没有选择任何项目。

        x =  random.randint(1,100)
        if x  < 71 and highChance != []:     
             return random.choice(highChance)
        elif x >=71 and x < 91 and midChance != []:
            return random.choice(midChance)
        elif lowChance != []:
            return random.choice(lowChance)

1 个答案:

答案 0 :(得分:0)

int[] high = new int[] { 0, 1, 2, 3 };
int[] mid = new int[] { 0, 1 };
int[] low = new int[] { };

int[][] arr = new int[3][];
arr[0] = high.Length != 0? high: mid.Length != 0? mid: low;
arr[1] = mid.Length != 0 ? mid : arr[0];
arr[2] = low.Length != 0 ? low : arr[0];

Random rnd = new Random(0);
int n = rnd.Next(10);
int k = (n < 7) ? 0 : (n < 9) ? 1 : 2;
int result = arr[k][rnd.Next(arr[k].Length)];