C++高效率在m个元素中随机取n个元素的算法
一、简述
在编程中,尤其是编写游戏的过程中经常会遇到在m个东西中取出n个东西的需求,这个时候一般人都会想到随机n个数出来,然后在原来的列表中去凑这n个数的下标。这样会导致许多的问题,例如很难保证不出现重复的随机数,更重要的是我们会为了避免这些问题去做许多没有意义的循环从而严重的影响了效率,这个时候就需要一个更加有效率的算法。
二、基本原理
如果我们总共有的个数为m,而我们需要随机取出的个数为n。
那么我们每一个元素被取出的概率为: n m \frac{n}{m} mn
如果我们已经取出了一个元素,那么下一个元素被取出的概率为: n − 1