固有数学思想——随机从队列中选取n个数字,按顺序插入。数学基石:p(1) = 1/ n; p(i) = (1 - p(i - 1)) * (1 / (n - i + 1)) = 1 / n。所以其为等概率的随机队列。
如果在原数组随机:随机从数组的n - i 个中选取一个元素,将其和数组最后一个元素进行交换,迭代(i<-0 until n)
如果空间不限,利用hash:将原数组看成一个输入数据源,从数组中拿出当前第一个数据随机插入新数组中,发生碰撞就找下一个空块插入。也容易理解为等概率,因为可以把冲突块和空闲块看成一个空间。优化,可以利用位图,以及位运算快速计算出下一个空块。场景:交换代价高的时候。
浙公网安备 33010602011771号