当前位置: 首页 > news >正文

随机播放音乐 伪随机


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());}}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章:

随机播放音乐 伪随机

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…...

spring boot打包插件的问题

在spring boot项目中声明了 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build> 执行mvn clean package&…...

海康摄像头接入流媒体服务器实现https域名代理播放

环境 操作系统&#xff1a;Ubuntu 22.04流媒体服务器&#xff1a;srs 官网安装教程srs开启GB28181协议 官网开启教程进行海康摄像头的配置 官网配置教程srs使用systemctl实现开机自启 官网配置教程 nginx配置说明 server {listen 80;server_name a.com;return 301 https://$…...

Stable Diffusion模型Pony系列模型深度解析

Stable Diffusion模型Pony系列模型深度解析 一、技术架构与核心特性 基于SDXL的深度优化 Pony系列模型以SDXL为基础框架&#xff0c;通过针对二次元/动漫风格的微调&#xff0c;强化了在该领域的生成能力&#xff0c;同时保留了对写实场景的兼容性‌。其训练数据特别侧重于人…...

性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术

??关注&#xff0c;带你探索Java的奥秘&#xff01;?? ??超萌技术攻略&#xff0c;轻松晋级编程高手&#xff01;?? ??技术宝库已备好&#xff0c;就等你来挖掘&#xff01;?? ??订阅&#xff0c;智趣学习不孤单&#xff01;?? ??即刻启航&#xff0c;编…...

【Kubernets】K8S内部nginx访问Service资源原理说明

文章目录 原理概述**一、核心概念****二、Nginx 访问 Service 的流程****1. Service 的作用****2. Endpoint 的作用****3. Nginx Pod 发起请求****(1) DNS 解析****(2) 流量到达 kube-proxy****(3) 后端 Pod 处理请求** **三、不同代理模式的工作原理****1. iptables 模式****2…...

Markdown HTML 图像语法

插入图片 Markdown ![图片描述](图片链接)一般来说&#xff0c;直接复制粘贴过来就行了&#xff0c;部分网页/应用可以拖拽&#xff0c;没人会真敲图片的链接吧…… 示例图片&#xff1a; ![Creeper?](https://i-blog.csdnimg.cn/direct/f5031c8c4f15421c9882d7eb23540b8…...

2503,D比C更易重构

我发现C程序很少超越其初始设计.问题是,很难重构C程序.如 struct S { int a; }; struct S s; s.a 3; struct S *p; p->a 3;即.用来直接访问,->用来间接访问.假设想把按值传递S改为按指针传递S.现在你必须更新每个使用,而不仅是声明. 这是它在D中的工作方式: struct …...

Scala 中 val 和对象内部状态的关系

在 Scala 中&#xff0c;val 用于声明不可变的变量&#xff0c;这意味着一旦 val 被赋值&#xff0c;它的引用&#xff08;即指向的内存地址&#xff09;就不能再改变。然而&#xff0c;这并不影响对象内部的状态&#xff08;即对象的属性&#xff09;是否可以改变。具体来说&a…...

疫情管理系统设计与实现(代码+数据库+LW)

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本疫情管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…...

记Android12上一个原生bug引起的system_server crash

一. 现象描述 近日测试上报一个几乎必现的crash&#xff0c;描述如下: 现象: launcher编辑状态与锁屏解锁交互时系统概率性重启 操作步骤: 进入launcher组件编辑状态按电源键灭屏后亮屏&#xff0c;锁屏界面上滑解锁launcher编辑状态向右或向左滑动重复1&#xff0c;2&#x…...

代码随想录算法训练营第六天|Leetcode454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

15. 三数之和 建议&#xff1a;本题虽然和 两数之和 很像&#xff0c;也能用哈希法&#xff0c;但用哈希法会很麻烦&#xff0c;双指针法才是正解&#xff0c;可以先看视频理解一下 双指针法的思路&#xff0c;文章中讲解的&#xff0c;没问题 哈希法很麻烦。 题目链接/文章讲…...

大数据环境(单机版) Flume传输数据到Kafka

文章目录 前言一、准备二、安装三、配置环境变量四、修改配置4.1、kafka配置4.2、Flume配置 五、启动程序5.1、启动zk5.2、启动kafka5.3、启动flume 六、测试6.1、启动一个kafka终端&#xff0c;用来消费消息6.2、写入日志 其他 前言 flume监控指定目录&#xff0c;传输数据到…...

计算机毕业设计SpringBoot+Vue.js高校教师科研管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

C++课程设计【宿舍管理查询软件】

宿舍管理查询软件 一、题目描述二、源码以及说明宿舍管理查询软件设计与实现1. 系统设计思路1.1 功能需求1.2 数据结构2. 系统实现3. 代码说明3.1 数据结构3.2 功能实现3.3 文件存储4. 示例运行输入输出5. 总结其他QT文章推荐一、题目描述 (一)问题描述 为宿舍管理人员编写一…...

数据挖掘校招面经一

写在前面&#xff1a;其实数据挖掘、风控、机器学习算法与搜广推的八股还是有重合的部分&#xff0c;毕竟都是面对结构化数据。特别是我自己是做竞赛的&#xff0c;平时LGBM、CatBoost用的挺多的&#xff0c;所以感觉这些八股还是有必要看看&#xff0c;建议大家也可以看一下。…...

迷你世界脚本对象库接口:ObjectLib

对象库接口&#xff1a;ObjectLib 迷你世界 更新时间: 2023-04-26 20:21:09 具体函数名及描述如下: 序号 函数名 函数描述 1 getAreaData(...) 获取区域数据 2 getPositionData(...) 获取位置数据 3 getLivingData(...) 获取生物数据 4 getItemDat…...

VSCode知名主题带毒 安装量900万次

目前微软已经从 Visual Studio Marketplace 中删除非常流行的主题扩展 Material Theme Free 和 Material Theme Icons&#xff0c;微软称这些主题扩展包含恶意代码。 统计显示这些扩展程序的安装总次数近 900 万次&#xff0c;在微软实施删除后现在已安装这些扩展的开发者也会…...

C#—csv文件格式操作实例【在winform表格中操作csv】

C#—csv文件格式操作实例【在winform表格中操作csv】 实例一 实例效果 当在winform界面中点击读取按钮时 将csv中的所有数据读取出来放置在datagridview控件&#xff0c;可以在datagridview控件中编辑数据&#xff0c;当点击保存按钮时 将datagridview控件中的所有数据存储在…...

Redis设计与实现-数据结构

Redis数据结构 1、RedisObject对象2、简单动态字符串2.1 SDS定义2.2 SDS与C语言的区别2.3 SDS的空间分配策略2.3.1 空间预分配2.3.2 惰性空间释放 2.4 SDS的API 3、链表3.1 链表的定义3.2 链表的API 4、字典4.1 字典的定义4.2 哈希算法4.3 哈希表的扩缩4.3.1 哈希表扩缩的判断依…...

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器

Ubuntu20.04双系统安装及软件安装&#xff08;四&#xff09;&#xff1a;国内版火狐浏览器 Ubuntu系统会自带火狐浏览器&#xff0c;但该浏览器不是国内版的&#xff0c;如果平常有记录书签、浏览记录、并且经常使用浏览器插件的习惯&#xff0c;建议重装火狐浏览器为国内版的…...

C语言100天练习题【记录本】

C语言经典100题&#xff08;手把手 编程&#xff09; 可以在哔哩哔哩找到 已解决的天数&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六 下面的都是模模糊糊的 可以学学这些算法&#xff0c;我是算法白痴&#xff0c;但是我不是白痴&#xff0c;可以学&#xff…...

基于CURL命令封装的JAVA通用HTTP工具

文章目录 一、简要概述二、封装过程1. 引入依赖2. 定义脚本执行类 三、单元测试四、其他资源 一、简要概述 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具&…...

SQL刷题:自连接(Self-Join)--通过将 同一张表连接两次,比较不同行之间的数据关系

例题&#xff1a; 表&#xff1a;Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | salary | int | | managerId | int | ---------------------- id 是该表的主键…...

避坑!用Docker搞定PHP开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)

本次更新主要是对环境版本进行了更新&#xff0c;例如php 7.3.7升级到了7.3.8&#xff0c;另外之前的版本有同学踩了坑&#xff0c;主要是官方docker镜像php:7.3.7-fpm和php:7.3.8-fpm使用了不同版本的debian&#xff0c;后面会提到&#xff0c;请各位同学留意。 因为最近换电脑…...

第七节:基于Winform框架的串口助手小项目---协议解析《C#编程》

介绍 文章上所说的串口助手&#xff0c;工程文件资源-CSDN文库 目标 代码实现 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){if (isRxShow false) return;// 1,需要读取有效的数据 BytesToReadbyte[] dataTemp new byte[serialPor…...

pt-archiver删除数据库的数据表/各种报错类型

这篇帖子是前面文的一部分延申 mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客 如需转载&#xff0c;标记出处 目录 pt-archiver命令格式 如果执行后出现下面报错 1&#xff09;Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233. …...

STM32Cubemx配置E22-xxxT22D lora模块实现定点传输

文章目录 一、STM32Cubemx配置二、定点传输**什么是定点传输&#xff1f;****定点传输的特点****定点传输的工作方式****E22 模块定点传输配置****如何启用定点传输&#xff1f;****示例** **应用场景****总结** **配置 1&#xff1a;C0 00 07 00 02 04 62 00 17 40****解析** …...

模块和端口

1、模块 模块内部的5个组成是&#xff1a;变量声明 数据流语句 低层模块实例 函数和任务 行为语句 SR锁存器 timescale 1ns / 1psmodule SR_latch(input wire Sbar ,input wire Rbar ,output wire Q ,output wire Qbar);nand…...

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手&#xff0c;详细阐述居家养老管理模式兴起的…...

[machine learning] MACS、MACs、FLOPS、FLOPs

本文介绍机器学习中衡量一个模型计算复杂度的四个指标&#xff1a;MACS、MACs、FLOPS、FLOPs。 首先从含义上讲&#xff0c;可以分类两类&#xff1a;MACS/FLOPS和MACs/FLOPs。MACs/FLOPs表示总的操作数(后缀s可以看成是表示复数)&#xff0c;MACS/FLOPS表示每秒可以执行的操作…...

PostgreSQL10 物理流复制实战:构建高可用数据库架构!

背景 PostgreSQL 10 在高可用架构中提供了物理复制&#xff0c;也称为流复制&#xff08;Streaming Replication&#xff09;&#xff0c;用于实现实例级别的数据同步。PostgreSQL 复制机制主要包括物理复制和逻辑复制&#xff1a;物理复制依赖 WAL 日志进行物理块级别的同步&…...

STM32---FreeRTOS中断管理试验

一、实验 实验目的&#xff1a;学会使用FreeRTOS的中断管理 创建两个定时器&#xff0c;一个优先级为4&#xff0c;另一个优先级为6&#xff1b;注意&#xff1a;系统所管理的优先级范围 &#xff1a;5~15 现象&#xff1a;两个定时器每1s&#xff0c;打印一段字符串&#x…...

Linux常见操作命令(1)

(一)常用命令&#xff1a; 1.Tab 键可以实现自动补齐和提示&#xff0c;要合理使用 2.方向键&#xff08;上下&#xff09;来切换前后执行过的命令 (二)查看命令 一共有三个&#xff1a;ls, cd , pwd 。 1.ls&#xff1a;列出目录内容&#xff0c;包括参数-l&#xff08;详细…...

SPI驱动(二) -- SPI驱动程序模型

文章目录 参考资料&#xff1a;一、SPI驱动重要数据结构1.1 SPI控制器数据结构1.2 SPI设备数据结构1.3 SPI驱动数据结构 二、SPI 驱动框架2.1 SPI控制器驱动程序2.2 SPI设备驱动程序 三、总结 参考资料&#xff1a; 内核头文件&#xff1a;include\linux\spi\spi.h 一、SPI驱…...

Qt中txt文件输出为PDF格式

main.cpp PdfReportGenerator pdfReportGenerator;// 加载中文字体if (QFontDatabase::addApplicationFont(":/new/prefix1/simsun.ttf") -1) {QMessageBox::warning(nullptr, "警告", "无法加载中文字体");}// 解析日志文件QVector<LogEntr…...

SpringBoot 校园新闻网站

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

JAVA面经2

ConcurrentHashMap 并发程序出现问题的根本原因 线程池 线程池的执行原理&#xff08;核心参数&#xff09; 线程池的常见阻塞队列 ArrayBlockingQueue插入和删除数据&#xff0c;只采用了一个lock&#xff0c;而LinkedBlockingQueue则是在插入和删除分别采用了putLock和takeL…...

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量&#xff08;个&#xff09;&#xff1a;决定了 GPU 并行处理能力&#xff0c;在 AI 等并行计算类业务下&#xff0c;CUDA 核心越多性能越好。 显存容量&#xff08;GB&#xff09;&#xff1a;决定了 GPU 加载数据量的大小&#xff0c;在 AI…...

C++设计一:日期类Date实现

一、引言与概述 1 引言 日期操作是软件开发中的常见需求&#xff0c;如日程管理、数据统计等场景均需处理日期的比较、偏移及合法性校验。为简化此类操作&#xff0c;本文设计了一个高效且类型安全的C日期类Date。 该类通过构造函数内嵌合法性检查&#xff0c;确保对象初始状…...

关于2023新版PyCharm的使用

考虑到大家AI编程的需要&#xff0c;建议大家安装新版Python解释器和新版PyCharm&#xff0c;下载地址都可以官网进行&#xff1a; Python&#xff1a;Download Python | Python.org&#xff08;可以根据需要自行选择&#xff0c;建议选择3.11&#xff0c;保持交流版本一致&am…...

【Azure 架构师学习笔记】- Azure Databricks (15) --Delta Lake 和Data Lake

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (14) – 搭建Medallion Architecture part 2 前言 ADB 除了UC 这个概念之外&#xff0c;前面【Azure 架构师学习笔记】- Azure Databricks (1…...

一文了解Conda使用

一、Conda库频道 conda的软件频道是存储软件包的远程位置&#xff0c;当在Conda中安装软件包时&#xff0c;它会从指定的频道中下载和提取软件包。频道包含了各种软件包&#xff0c;不同的频道可能提供不同版本的软件包&#xff0c;用户可以根据需要选择适合的版本。 常见 Co…...

SP导入智能材质球

智能材质球路径 ...\Adobe Substance 3D Painter\resources\starter_assets\smart-materials 放入之后就会自动刷新...

记录一次Spring事务失效导致的生产问题

一、背景介绍 公司做的是“聚合支付”业务&#xff0c;对接了微信、和包、数字人民币等等多家支付机构&#xff0c;我们提供统一的支付、退款、自动扣款签约、解约等能力给全国的省公司、机构、商户等。 同时&#xff0c;需要做对账功能&#xff0c;即支付机构将对账文件给到…...

腾讯云物联网平台(IoT Explorer)设备端使用

1、直接看图流程 2、跑起来demo,修改产品id,设备名称,设备秘钥。 3、连接部分 4、修改默认地址和端口 sdk里面的地址默认是带着产品ID拼接的,咱们现在中铁没有泛域名解析,要改下这里。把+productID都去掉,然后地址里的.也去掉。...

ML.NET库学习023: ONNX Runtime 中 C++ 辅助函数解析:Span 类与张量操作

文章目录 ML.NET库学习023&#xff1a; ONNX Runtime 中 C 辅助函数解析&#xff1a;Span 类与张量操作主题项目主要目的和原理项目概述实现的主要功能关键函数代码结构 主要功能与步骤Span 类的实现张量大小计算数据加载与处理准确性评估 数据集的使用以下是逐步解释&#xff…...

利用opencv_python(pdf2image、poppler)将pdf每页转为图片

1、安装依赖pdf2image pip install pdf2image 运行.py报错&#xff0c;因为缺少了poppler支持。 2、安装pdf2image的依赖poppler 以上命令直接报错。 改为手工下载&#xff1a; github: Releases oschwartz10612/poppler-windows GitHub 百度网盘&#xff1a; 百度网盘…...

告别GitHub连不上!一分钟快速访问方案

一、当GitHub抽风时&#xff0c;你是否也这样崩溃过&#xff1f; &#x1f621; npm install卡在node-sass半小时不动&#x1f62d; git clone到90%突然fatal: early EOF&#x1f92c; 改了半天hosts文件&#xff0c;第二天又失效了... 根本原因&#xff1a;传统代理需要复杂…...

‌学习DeepSeek V3 与 R1 核心区别(按功能维度分类)

‌一、定位与架构‌ ‌V3&#xff08;通用型模型&#xff09;‌ 定位&#xff1a;多模态通用大模型&#xff0c;擅长文本生成、多语言翻译、智能客服等多样化任务‌12。架构&#xff1a;混合专家&#xff08;MoE&#xff09;架构&#xff0c;总参数 ‌6710 亿‌&#xff0c;每次…...