Spotify如何使用抖动算法随机播放歌曲?


自 Spotify 服务推出以来,我们使用 Fisher-Yates shuffle 来生成播放列表的 完全随机随机 播放。
Fisher-Yates shuffle 是最漂亮的随机算法之一,令人惊讶的是,如此复杂的问题可以解决在某些编程语言中用 3 行代码解决。这是通过使用最佳操作次数和最佳随机数来实现的。

收听音乐的用户并不喜欢完美的随机性。

算法
这似乎是一个以前必须由其他人解决的问题。事实上,我们发现了一篇博客文章 The art of shuffling music  by Martin Fiedler,它解决了同样的问题。但是,他的算法很复杂,在某些情况下可能会非常慢,因此我们对其进行了修改以更好地满足我们的需求。
主要思想与抖动中使用的方法非常相似。假设我们有一张黑白图片,使用了几百个灰色阴影。

我们想通过仅使用黑色和白色两种颜色的像素来进一步简化图片。我们可以使用 随机采样:假设一个像素有 80% 的灰色阴影,那么它将有 80% 的机会变成黑色,20% 的机会变成白色。我们一个一个地处理像素,并根据原始灰度为每个像素随机决定其新颜色。然而,结果远不能令人满意。

如您所见,黑色像素形成簇,并且还有大白点。如果黑点和白点分布得更均匀一些就更好了。Floyd–Steinberg 抖动等其他算法  避免了聚类并产生了更好的结果。

在上一张图片中看到的集群几乎完全消失了。

我们可以从抖动算法中获得灵感来解决同一艺术家的歌曲集群问题;我们将尝试将它们分布在整个播放列表中。

详细点击标题

用户反馈:
1、我不得不说,他们为洗牌所做的事情真的很糟糕。我有一个很大的健身房播放列表,经常听到相同的曲目,通常顺序相同,现在需要向下滚动并在随机曲目上按播放才能获得“新”顺序。
我理解他们所做的事情的动机,一个加权洗牌,只是在那个洗牌中使用我最听/最受欢迎的是愚蠢的。

2、这是我对 Spotify 的不满。我有一个播放列表,其中包含大约 800 首我喜欢的歌曲。它总是从大约 100 首最近添加的歌曲中播放。给我完全随机的。

3、我相信 Spotify 积极建议用户缓存歌曲作为带宽/成本节省措施。
我切换到 Apple Music 并用我最少播放的歌曲创建了一个智能播放列表,我对它的多样性感到非常满意。

4、多年前我放弃 Spotify 的原因之一是他们的 shuffle 非常糟糕。