Alias method

Leetcode: Random Pick with weight
alias method 算法流程总结:

import numpy as np
int k = len(probs)
q=np.zeros(K)
J=np.zeros(K,dtype=np.int)
for kk, prob in enumerate(self.probs):
    self.q[kk] = prob* self.K
    if self.q[kk] < 1.0:
        self.smaller.append(kk)
    else:
        self.larger.append(kk)
while len(self.smaller)>0 and len(self.larger)>0:
    small = self.smaller.pop()
    large = self.larger.pop()
    self.J[small] = large
    self.q[large] = self.q[large] - (1-self.q[small])
    if self.q[large] < 1.0:
         self.smaller.append(large)
    else:
         self.larger.append(large)

def pickIndex(self):
    sz = len(self.J)
    kk = int(np.floor(np.random.rand())*sz)
    if np.random.rand() < q[kk]:
        return kk
    else:
        return J[kk]
算法小屋 文章被收录于专栏

不定期分享各类算法以及面经。同时也正在学习相关分布式技术。欢迎一起交流。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务