Geo*_*met 3 java random algorithm collections
假设我有一个列表列表,如下所示:
因此外部列表的大小为3,内部列表的大小为5,3和4.
我需要获得任何这些内部列表的随机元素,给出每个元素同样随机的机会.所以我可以编写一个算法:
0和之间生成随机数totalListsSize (5 + 3 + 4) = 12randomIndex 7randomIndex 7 - firstListSize 5 = newRandomIndex 2randomIndex 2 in secondList = element g.问题是顺序选择必须完整且可耗尽:在上面的例子中经过12次连续选择后,我必须选择每个元素一次.
有没有办法做到可扩展?
randomIndex.为什么不生成所有可能索引的排列(换句话说,您将对序列[0,12)进行随机排列).然后你就会知道你将按照随机顺序一次性击中所有元素.
为了有效查找,您可以保持数组长度的运行总计.在您的示例中:0,5,8,12.这样,您可以通过"总索引"进行二进制搜索以查找任何数组.