之前同学面试微软,问了一个问题:如果给你一列物品,这列物品各自都有一个权重。如果根据权重随机选取物品。权重值越大,选中的概率就越大。
第一想法肯定就是根据权重的大小扩充这个数组。比如数组里有[‘apple’,’cherry’,’banana’],对应的权重是[3,4,1]。那么我们把数组扩充成
[‘apple’,’apple’,’apple’,’cherry’,’cherry’,’banana’]
就像这样,然后每个物品选取的概率就是1/(sum(权重))。
但是这个方法有个问题,第一:占用了太多空间。如果权值很大,则需要一个很大数组。