如何实施加权洗牌
我最近写了一些我认为效率很低的代码,但是由于它只包含几个值,所以我接受了它。但是,我仍然对以下方面的更好算法感兴趣: X个对象的列表,每个对象都分配有一个“权重” 权重总和 生成一个从0到总和的随机数 遍历对象,从总和中减去它们的权重,直到总和为非正数 从列表中删除该对象,然后将其添加到新列表的末尾 项目2,4和5都需要n时间,因此这是一种O(n^2)算法。 这可以改善吗? 作为加权随机播放的示例,元素具有更大的重量,位于前部的机会更大。 示例(我将生成随机数以使其真实): 6个权重为6,5,4,3,2,1的对象; 总和是21 我选择了19 19-6-5-4-3-2 = -1:,因此2进入了第一位置,权重现在为6,5,4,3,1; 总和是19 我选择了16 16-6-5-4-3 = -2:,因此3进入第二位置,权重现在为6,5,4,1; 总和是16 我选择了3 3-6 = -3,因此6排在第三位,权重现在为5,4,1;总和是10 我选择8:,8-5-4 = -1因此4排在第四位,权重现在为5,1;总和是6 我选择5:,5-5=0因此5排在第五位,权重现在为1;总和是1 我选择了1 :1-1=0,因此1移到最后一个位置,我没有重量了,我完成了