【演算法】—— 隨機音樂的播放演算法

來源:互聯網
上載者:User

標籤:text   無法   shuffle   https   播放清單   通過   term   圖片   怎麼   

全部隨機播放音樂,這個功能太普通以至於以前從未考慮過其背後實現邏輯。

Random還是shuffle

我們經常使用的全部隨機播放功能,在外國同行口中並不是叫Random播放,而是叫Shuffle,洗牌的意思。

為什麼不是Random?來看兩個例子。

在Spotify成立之初,他們使用一種叫「Fisher-Yates shuffle」的演算法去產生一個完全隨機(perfectly random )的播放清單,這個演算法據說非常簡單,只需3行代碼搞定,不過它存在致命弱點。

 

中,每種顏色代表一位歌手,也就是說我的列表裡有綠色歌手的4首歌,紅色歌手的2首歌,黑色歌手的2首歌。

圖中上下兩行都是運行Fisher-Yates演算法可能產生的播放清單,請問這兩個列表出現的機率哪個更大呢?

答案是一樣大,完全隨機演算法下,每一首歌出現在每個位置的機率是一樣的。你可能認為這怎麼可能,前面已經出現3次綠色歌手的歌了,下一次出現機率應該很小了吧。錯了,演算法是沒有記憶的,除非你告訴它,下一首不允許播放綠色歌手的歌,否則它播放綠色歌手的歌的機率還是50%。

再來看個例子,假設你播放清單裡有10首搖滾樂(A),11首鄉村樂(B),11首爵士(C),下面是我自己用Python的random函數產生的序列:

A A A A C C C B C B B A C B C B B B B A B C B A C A C C A A C B

可以看出,這個列表裡前半段和後半段基本上沒有B出現,尤其是前面連續4個A和3個B,這樣的結果是無法令人滿意的,一點均衡性都沒有。

回頭再想,我們為什麼要全部隨機播放?因為我們不知道要聽什麼,我們想要一個隨性的播放清單,我們不想專門聽某一位歌手的或某一張專輯的曲目,我們不想按照平常迴圈的順序播放,我們想換換口味有點新意,所以我們把這個選擇權交給軟體本身去做,如果軟體接連給你播放同一個歌手或同一張專輯的曲目,那就違背我們隨機的目的了。所以好的全部隨機播放列表應該做到均衡分布,同一個流派、同一個歌手、同一種專輯下的音樂彼此之間相距越遠越好。

還是上面這個例子,好的播放清單應該是下面這樣的:

A B C B C A B A C B A C B C A B C A C B A B C A C B A C B C A B

shuffle播放演算法

那麼如何產生上面這個均衡的播放清單呢?博主Martin Fiedler給了一個思路。

1)將列表中的歌曲按流派、歌手、專輯等邏輯範式分組,給這個組裡的音樂設定一個全部隨機播放順序;
2)接下來把每個分組的曲目通過合并演算法組成一個完整的播放清單。

很簡單吧,僅僅兩步而已。接下來看看合并演算法是怎麼一回事。假設在第一步我們得到了下面的分組:

將每個分組擴充到和最大分組相等的長度,比如給綠色分組填充8首「靜默」歌曲,讓該組長度等於12。填充的時候應盡量讓組中的音樂均衡分布列表中。

每個分組都填充完畢後,就開始合并新列表了,從每個分組的第1列按隨機順序取出歌曲放在新列表中。

再取出第2列按隨機順序取出歌曲放在新列表中。

第3列。需要注意的是,假如第2次取出的是黃-紅-藍,第3次取出藍-黃-紅-綠,那麼就會有兩個藍色分組的歌曲接連出現的情況,這個時候需要把第3次拿出的歌曲首尾互換,最後得出綠-黃-紅-藍的順序。

就是shuffle播放背後的大概邏輯了,難的不是合并演算法,而是填充分組的演算法,個人感覺。

【演算法】—— 隨機音樂的播放演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.