随机播放音乐 伪随机


import java.util.*;/*** https://cloud.tencent.com.cn/developer/news/1045747* 伪随机播放音乐*/
public class MusicPlayer {private List<String> allSongs; // 所有歌曲列表private List<String> playedSongs; // 已经播放过的歌曲列表private Map<String, Integer> songPreferences; // 歌曲偏好权重public MusicPlayer(List<String> allSongs) {this.allSongs = allSongs;this.playedSongs = new ArrayList<>();this.songPreferences = new HashMap<>();// 初始化所有歌曲的偏好权重为1for (String song : allSongs) {songPreferences.put(song, 1);}}// 根据偏好权重随机选择下一首歌曲public String getNextSong() {List<String> availableSongs = new ArrayList<>(allSongs);availableSongs.removeAll(playedSongs);if (availableSongs.isEmpty()) {// 如果所有歌曲都播放过了,重置播放列表playedSongs.clear();availableSongs = new ArrayList<>(allSongs);}// 计算总权重int totalWeight = availableSongs.stream().mapToInt(song -> songPreferences.get(song)).sum();// 生成一个随机数Random random = new Random();int randomWeight = random.nextInt(totalWeight);// 根据权重选择歌曲int cumulativeWeight = 0;for (String song : availableSongs) {cumulativeWeight += songPreferences.get(song);if (randomWeight < cumulativeWeight) {playedSongs.add(song);return song;}}return null; // 正常情况下不会执行到这里}// 更新歌曲偏好权重public void updatePreference(String song, int weight) {if (songPreferences.containsKey(song)) {songPreferences.put(song, songPreferences.get(song) + weight);}}public static void main(String[] args) {List<String> songs = Arrays.asList("Song1", "Song2", "Song3", "Song4", "Song5");MusicPlayer player = new MusicPlayer(songs);// 模拟用户偏好,增加某些歌曲的权重player.updatePreference("Song1", 3);player.updatePreference("Song3", 2);// 模拟播放10首歌曲for (int i = 0; i < 10; i++) {System.out.println("Now playing: " + player.getNextSong());}}
}

你是否曾想过音乐播放器的随机播放的歌曲真的是完全随机的吗?不,它们在骗你!

我们来介绍一下伪随机和真随机。

伪随机算法是最常见的一种,它会从播放列表中随机选择一首歌曲播放,然后根据一些规则来决定下一首播放的歌曲。例如,它可能会排除已经播放过的歌曲,以避免重复播放。另外,一些播放器还可能会根据歌曲的类型、时长、评分等因素来决定下一首播放的歌曲。

而真随机算法则会完全随机选择一首歌曲播放,没有任何规则和预测。但这种算法并不常见,因为它可能会导致某些歌曲被播放多次,而有些歌曲则几乎不会被播放。

如果,要表达的更清楚一些的话,如下:

真随机,它就像抓阄一样,没有列表的概念,也没有上一首和下一首的概念,它会随机到不同的音乐。而伪随机,是被算法所操纵的随机,算法在你选择随机播放时,一个完整的播放歌单或许就形成了。

那么如何判断是真随机还是伪随机呢?其实只要按上一首就知道了。如果切换到是你刚才听过的那一首,那就是伪随机。如果是每次都在切换不同的歌,那么就是真随机。

说到这里,大概有一个概念了,那就是大部分的音乐软件会推崇伪随机算法。为什么?

原因就是,用户选择随机播放就是为了满足自己无法下决定但又想要获得新鲜感的心理,这时就应该尽可能的避免重复和单调。如果是真随机算法的话,那么可能导致某些歌曲被播放多次,而有些歌曲则几乎不会被播放。

但这不是主要的,如果随机播放的歌是用户讨厌的呢?或者无论怎么随机播放,歌都不是用户不喜欢的,那用户会开始讨厌这个平台,平台的用户留存变少,转去其他平台。

打个比方,用户喜欢听古风歌曲,那么在它听歌时,前一首是古风,后一首就变成了嘻哈摇滚风,本来想着没准第三首就好了,结果第三首是纯音乐,换你你能接受吗?

用户的整体听歌体验都变得割裂了,于是用户转战其他平台,自己的平台用户大量流失。

那么,为了提高用户对于平台的粘滞力,伪随机是最好的选择。于是平台会干预随机列表,算法根据你平时的习惯,不断地推送那些你喜欢听的歌,迎合你的喜好。

而且,这还能让用户不需要自己搜就能找到想听的歌曲,甚至可以找到好多自己想听却忘记名字的歌了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30511.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Asp.net的零食购物商城网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模

2025-03-05&#xff0c;由华为诺亚方舟实验室、捷克技术大学和帝国理工学院联合开发的MuBlE&#xff08;MuJoCo and Blender simulation Environment&#xff09;模拟环境和基准测试。通过结合MuJoCo物理引擎和Blender高质量渲染&#xff0c;为机器人操作任务规划提供了逼真的视…

文件上传漏洞(upload靶场)

目录 Pass-01&#xff1a;前端绕过 方法一&#xff1a;浏览器禁用js 方法二:直接修改或删除js脚本 方法三&#xff1a;修改后缀绕过 Pass-02:服务器检测 Pess-03:黑名单绕过 Pass-04:.htaccess文件 Pass-05:windows特性和user.ini 方法一&#xff1a;php.自动解析为ph…

blender学习25.3.8

【04-进阶篇】Blender材质及灯光Cycle渲染&后期_哔哩哔哩_bilibili 注意的问题 这一节有一个大重点就是你得打开显卡的渲染&#xff0c;否则cpu直接跑满然后渲染的还十分慢 在这里你要打开GPU计算&#xff0c;但是这还不够 左上角编辑&#xff0c;偏好设置&#xff0c;系…

什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解

美颜SDK是一种用于处理图像与视频的开发工具&#xff0c;能够提供磨皮、美白、瘦脸、五官优化、动态贴纸等美颜特效。它广泛应用于直播、短视频、社交、在线会议、电商等行业&#xff0c;帮助用户在视频或图片中实现更好的视觉呈现。 一、从几何变换到深度学习&#xff1a;美颜…

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁&#xff0c;ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…

Docker 安装 Nacos 2.1.1(单机版)

一、拉取镜像 docker pull nacos/nacos-server:v2.1.1 二、新建数据库 官网上下载 对应版本的 nacos zip 包&#xff0c;在 nacos\conf 目录下有 mysql脚本&#xff1a; 新建一个数据库 nacos_config&#xff0c;在数据库中依次执行 nacos-mysql.sql、1.4.0-ipv6_support-up…

【计算机网络入门】初学计算机网络(九)

目录 1.令牌传递协议 2. 局域网&IEEE802 2.1 局域网基本概念和体系结构 3. 以太网&IEEE802.3 3.1 MAC层标准 3.1.1 以太网V2标准 ​编辑 3.2 单播广播 3.3 冲突域广播域 4. 虚拟局域网VLAN 1.令牌传递协议 先回顾一下令牌环网技术&#xff0c;多个主机形成…

国产化替换案例:CACTER邮件网关为Groupwise系统加固邮件安全防线

电子邮件作为企业信息流转的命脉&#xff0c;承载着商业机密与客户数据。然而&#xff0c;网络攻击手段日益复杂&#xff0c;钓鱼邮件等威胁正快速侵蚀企业安全防线。据《2024年第四季度企业邮箱安全性研究报告》显示&#xff0c;2024年Q4企业邮箱用户遭遇的钓鱼邮件数量激增至…

在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持

由于移动端GPU规模有限&#xff0c;厂商并没有实现完整的OpenGL特性&#xff0c;而是实现了它的子集——OpenGL ES。因此如果需要开发的程序要支持移动端平台&#xff0c;最好使用OpenGL ES开发。 1、 下载支持库、OpenGL ES Demo 1.1、下载PowerVRSDK支持库作为准备&#xff…

【GoTeams】-5:引入Docker

本文目录 1. Dokcer-compose回顾下Docker知识编写docker-compose.yaml运行docker 2. 部署go服务编写dockerfile 1. Dokcer-compose 这里简单先用一下win版本的Docker&#xff0c;后期开发好了部署的时候再移植到服务器下进行docker部署。 输入命令docker-compose version 就可…

YOLOv8改进SPFF-LSKA大核可分离核注意力机制

YOLOv8改进------------SPFF-LSKA 1、LSAK.py代码2、添加YAML文件yolov8_SPPF_LSKA.yaml3、添加SPPF_LSKA代码4、ultralytics/nn/modules/__init__.py注册模块5、ultralytics/nn/tasks.py注册模块6、导入yaml文件训练 1、LSAK.py代码 论文 代码 LSKA.py添加到ultralytics/nn/…

10.RabbitMQ集群

十、集群与高可用 RabbitMQ 的集群分两种模式,一种是默认集群模式,一种是镜像集群模式&#xff1b; 在RabbitMQ集群中所有的节点(一个节点就是一个RabbitMQ的broker服务器) 被归为两类:一类是磁盘节点,一类是内存节点&#xff1b; 磁盘节点会把集群的所有信息(比如交换机、绑…

DeepSeek-R1:使用KTransformers实现高效部署指南

KTransformers作为一个开源框架&#xff0c;专门为优化大规模语言模型的推理过程而设计。它支持GPU/CPU异构计算&#xff0c;并针对MoE架构的稀疏性进行了特别优化&#xff0c;可以有效降低硬件要求&#xff0c;允许用户在有限的资源下运行像DeepSeek-R1这样庞大的模型。 硬件…

回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测

回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测回归效果基本介绍GWO-BP-Adaboost:基于灰狼算法优化BP神经网络结合Adaboost思想…

基于websocket的多用户网页五子棋 --- 测试报告

目录 功能测试自动化测试性能测试 功能测试 1.登录注册页面 2.游戏大厅页面 3.游戏房间页面 自动化测试 1.使用脑图编写web自动化测试用例 2.创建自动化项目&#xff0c;根据用例通过selenium来实现脚本 根据脑图进行测试用例的编写&#xff1a; 每个页面一个测试类&am…

JavaWeb-mysql8版本安装

下载方式 地址&#xff1a;https://www.mysql.com/cn/downloads/ 选择&#xff1a;MySQL Community (GPL) downloads 选择&#xff1a;MySQL Community Server 选择&#xff1a; 选择&#xff1a; 安装mysql &#xff08;8.0.30&#xff09; 1、以管理员身份 打开 命令行…

人工智能神经网络基本原理

MP 神经元数学模型 MP 模型是神经网络领域的早期模型&#xff0c;它模仿了神经元的基本结构和工作原理。 人工神经元是一个多输入、单输出的信息处理单元&#xff0c;是对生物神经元的建模。建模方式可以有很多种&#xff0c;不同的建模方式就意味着不同的人工神经元结构。 比…

python从入门到精通(二十六):python文件操作之Word全攻略(基于python-docx)

python文件操作之word技巧大全 word技巧基础到高级操作大全A.准备工作1. 安装python-docx库2. 导入库 B.基础操作1. 创建Word文档1.1 创建文档对象1.2 添加word标题1.3 添加word段落1.4 设置段落样式1.5 创建有序列表1.6 创建无序列表1.7添加word分页1.8 添加word图片1.9 添加w…

Android Configuration相关问题如何定位分析(中英文切换、黑夜白天模式等)

Android Configuration相关问题如何定位分析&#xff08;中英文切换、黑夜白天模式等&#xff09;. Configuration的常见问题场景&#xff1a; app的size position不正确中英文显示不正确白天黑夜模式不正确 Configuration信息如下&#xff1a; mFullConfiguration{1.0 ?mc…