Javascript 如何有效地从所有组合中随机选择多个组合

Javascript 如何有效地从所有组合中随机选择多个组合,javascript,arrays,random,unique,combinations,Javascript,Arrays,Random,Unique,Combinations,例如,我有两个数组(第一个数组包含名字,第二个数组包含姓氏)。我想从这两个数组中生成n个唯一的、不重复的组合,其顺序为>>>first_name+''+last_name 我不希望事先生成所有可能的组合,因为它占用了太多内存 所以我认为该算法应该做的是迭代,直到没有生成组合,在迭代过程中,它应该为两个数组提供一些随机索引,如果这些索引已经一起使用,则尝试选择另一个随机数,直到没有生成唯一的索引。 但这种方法可能会在运行时触发深层递归,因为已经给出了很多输出,新的随机索引与现有索引匹配的机会在每一

例如,我有两个数组(第一个数组包含名字,第二个数组包含姓氏)。我想从这两个数组中生成n个唯一的、不重复的组合,其顺序为>>>first_name+''+last_name

我不希望事先生成所有可能的组合,因为它占用了太多内存

所以我认为该算法应该做的是迭代,直到没有生成组合,在迭代过程中,它应该为两个数组提供一些随机索引,如果这些索引已经一起使用,则尝试选择另一个随机数,直到没有生成唯一的索引。 但这种方法可能会在运行时触发深层递归,因为已经给出了很多输出,新的随机索引与现有索引匹配的机会在每一步都会增加


那么,你们的建议是什么呢,伙计们,我怎样才能以非常优化的方式从不存在的/虚拟的2个数组元素组合中选择随机的、唯一的n个项目呢

因此,您可以在范围
0..N-1
中生成所需数量的非重复随机整数值(例如,使用Fisher-Yates采样),对其进行排序,并获得相应的名称组合:

for i = 0..M-1
    Generate K[i] = Random(N)
Sort K[]
for i = 0..M-1
   FirstNameIndex = K[i] / L    //integer division
   LastNameIndex = K[i] % L     //integer modulo
   Combination[i] = First[FirstNameIndex] + Last[LastNameIndex]

请访问,采取的,看看什么和。做一些研究,搜索相关话题等;如果你陷入困境,发布一篇你尝试的文章,记录输入和预期输出。谢谢,我最终得到了一个完全相同的解决方案。当然,它也有缺点,我们生成整个长度的数组,然后将其洗牌,但无论如何,这是最理想的解决方案。