对于滴滴的随机数组算法

Posted on 2018-03-24 12:15  GaryWant  阅读(95)  评论(0)    收藏  举报

固有数学思想——随机从队列中选取n个数字,按顺序插入。数学基石:p(1) = 1/ n; p(i) = (1 - p(i - 1)) * (1 / (n - i + 1))  = 1 / n。所以其为等概率的随机队列。

如果在原数组随机:随机从数组的n - i 个中选取一个元素,将其和数组最后一个元素进行交换,迭代(i<-0 until n)

如果空间不限,利用hash:将原数组看成一个输入数据源,从数组中拿出当前第一个数据随机插入新数组中,发生碰撞就找下一个空块插入。也容易理解为等概率,因为可以把冲突块和空闲块看成一个空间。优化,可以利用位图,以及位运算快速计算出下一个空块。场景:交换代价高的时候。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3