algorithm - 播放随机歌曲算法

标签 algorithm random

想知道解决此问题的最佳方法是什么:从给定歌曲列表中随机播放一首歌曲,在播放完所有歌曲之前不会重复播放歌曲。

我的算法基本上调用 get_random 和减少的音乐集来找出下一首要播放的歌曲。 get_random 使用 2 的幂来划分列表,然后进一步分割。

这是我能做的最好的算法还是我能想出的任何其他更好的算法?我只需要这个想法。

import random
import math

def get_random(number):
        if number == 0:
            return number
        if number == 1:
            return number
        #make the number power of 2
        orig_no = number
        number = 1 << (math.floor(math.log(number))+1)
        left = 0
        right = number
    # check if toss falls in this current half and then change the half for next recursion. 
    # we change half from 1, 2, 4, 8, 16, 36, 64, 128
        while left < right:
          #f1 can be replaced by this rd.randint(0, 1)
            toss_value = f1() 
            if toss_value:
                right = math.floor((left + right)/2)
            else:
                left = math.floor((left + right)/2) + 1
        if left >= orig_no:
            return get_random(orig_no)
        else:
            return left

songs = ["i am here", "your are beautiful", "soorry", "i am happy", "where am i", "what did i do", "nothing wrong with you"]
for i in range(0, len(songs)-1):
        value = get_random(len(songs))
        print(songs[value])
        songs.pop(value)

最佳答案

打乱歌曲数组,播放所有歌曲,再打乱....

您可以使用 Fisher–Yates shuffle打乱数组。由于您使用的是 Python,因此已经有 random.shuffle给你。

关于algorithm - 播放随机歌曲算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36543254/

相关文章:

algorithm - 是否有任何算法可以用凸多边形覆盖凹多边形(包含孔)

php - 通过用户定义的权重选择随机元素

java - 从 C 到 Java 的随机生成器端口?

python - 复制项目并根据机会将其添加到列表中

c# - 建议一种针对大型已知集进行颜色模式匹配的算法

algorithm - MATLAB 中的可对角化矩阵

regex - 尽可能快地从众多正则表达式中选择正确正则表达式的算法

java - 华夫饼堆叠算法需要改进

c++ - 为什么打印浮点值时出现字符 'e'

c - 为什么在 c 中使用 rand() 时每个子进程都生成相同的 "random"数字?