随机排序一个数组

Cam*_*Cam 4 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)时间.

如果所描述的问题不存在解决方案,我仍然想知道以下一种或多种方式(和/或必要时以其他方式)不符合我的约束的解决方案:

  • 时间复杂度比O(n)差.
  • 该算法偏向于符号的最终位置.
  • 算法不具有生成性.

我应该补充一点,这个问题似乎与从1-k随机排序整数的问题相同,因为我们可以从1-k中排序整数列表,然后对于新列表中的每个整数i,我们可以生成符号ai.