Language agnostic 对数组进行随机排序

Language agnostic 对数组进行随机排序,language-agnostic,sorting,random,Language Agnostic,Sorting,Random,是否存在一种算法,在给定符号的有序列表{a1,a2,a3,…,ak}的情况下,在O(n)时间内以无偏差的随机顺序生成相同符号的新列表?“无偏差”是指任何符号s最终位于列表中某个位置p的概率为1/k 假设可以在O(1)时间内从1-k(含1-k)生成一个无偏整数。还假设O(1)元素访问/变异是可能的,并且可以在O(k)时间内创建大小为k的新列表 特别是,我对“生成”算法感兴趣。也就是说,我感兴趣的是一种算法,它有O(1)个初始开销,然后为列表中的每个时隙生成一个新元素,每个时隙占用O(1)个时间 如

是否存在一种算法,在给定符号的有序列表{a1,a2,a3,…,ak}的情况下,在O(n)时间内以无偏差的随机顺序生成相同符号的新列表?“无偏差”是指任何符号s最终位于列表中某个位置p的概率为1/k

假设可以在O(1)时间内从1-k(含1-k)生成一个无偏整数。还假设O(1)元素访问/变异是可能的,并且可以在O(k)时间内创建大小为k的新列表

特别是,我对“生成”算法感兴趣。也就是说,我感兴趣的是一种算法,它有O(1)个初始开销,然后为列表中的每个时隙生成一个新元素,每个时隙占用O(1)个时间

如果不存在上述问题的解决方案,我仍然希望通过以下一种或多种方式(和/或其他方式,如有必要)了解不符合我约束条件的解决方案:

  • 时间复杂度比O(n)差
  • 该算法对符号的最终位置有偏差
  • 该算法不是生成的

我要补充的是,这个问题似乎与随机排序1-k中的整数的问题相同,因为我们可以对1-k中的整数列表进行排序,然后对新列表中的每个整数I进行排序,我们可以生产符号ai。

是-您正在寻找。

到目前为止,您考虑过哪些洗牌算法?你有没有因为特定的原因把它们排除在外?@Greg:我没有发现任何有用的东西,但我似乎用了错误的关键字(随机排序,随机排序…)进行搜索。寻找“随机排列”和“洗牌”会得到更多的结果。不过,我还没有发现任何有生成性的东西。根据你对这个词的定义,克努斯洗牌是有生成性的。@Martin:是的,它是有生成性的。谢谢和+1。我把我没有注意到这一点归咎于早上有多早:)太好了!它也出人意料地简单。