首页 > 试题广场 >

设张三的mp3里有1000首歌,现在希望设计一种随机算法来随

[问答题]
设张三的mp3里有1000首歌,现在希望设计一种随机算法来随机播放。与普通随机模式不同的是,张三希望每首歌被随机到的概率比是与一首歌的豆瓣评分(0~10分)成正比的,如朴树的《平凡之路》评分为8.9分,逃跑计划的《夜空中最亮的星》评分为9.5分,则希望听《平凡之路》的概率与《夜空中最亮的星》的概率比为89:95,。现在我们已知这1000首歌的豆瓣评分:
(1)请设计一种随机算法来满足张三的需求。
(2)请写代码实现自己的算法。
推荐
1.假如《平凡之路》的概率与《夜空中最亮的星》的概率比为89:95,则考虑概率空间中有89+95=184个整数,选中1..89即为《平凡之路》选中90..184即为 《夜空中最亮的星》

2.
#!/usr/bin/python
# -*- coding: utf-8 -*-

import random

l = [
 ('平凡之路', 89),
 ('夜空中最亮的星', 95),
]

s = reduce(lambda s, x: s + x[1], l, 0)

def rand_song():
    choose = random.randint(1, s)
    for song, weight in l:
        choose -= weight
        if choose <= 0:
            return song


if __name__ == '__main__':
 # test
 import time
 random.seed(time.time())
 d = {}
 for i in xrange(100000):
    song = rand_song()
    if song in d:
        d[song] += 1
    else:
        d[song] = 1
    for k, w in l:
        v = d[k]
        print k, v, 1.0*v/100000, 1.0*w/s

随机测试结果:
平凡之路 48092 0.48092 0.483695652174
夜空中最亮的星 51908 0.51908 0.516304347826

编辑于 2015-02-06 16:01:12 回复(2)