热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql带权重的随机算法_随机选取算法(有权重的记录中选取)~转

三类随机问题1.已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管。实现思路:按行遍历所有记录,约隔nm条取一个数据

三类随机问题

1.  已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管。

实现思路:按行遍历所有记录,约隔n/m条取一个数据即可

2.  在1类情况下,还要求选取出来的m条记录是随机排序的

实现思路: 给n条记录,分别增加一列标记,值为随机选取的1至n之间的不重复数据,

3.  区别于1,2类问题, 如果记录是有权重的,如何结合权重去随机选取。 比如A的权重为10, B的权重股为5, C的权重为1, 则随机选取4个时可能应该出现AABB。

这第三类问题是本文重点,下面开始解决。

实现思路: 以 A:10, B:5, C:1 三条记录上随机选取4条为例,(是否以权重排序这个无所谓)

对于

A 10

B 5

C 1

首先,将第n行的数值赋为第n行加第n-1行的,递归执行,如下:

A 10

B 15

C 16

然后每次从[1,16]随机选取一个数,如果落在[1,10]之间,则选取A,如果落在(10,15]之间则选B,如果落在(16,16]之间则选取C, 图示如下,谁占的区间大(权重高),被选上的概率更大。

1337936317_6357.jpg

知道了思路,实现起来就比较方便了, 需要考虑的一点可能就是我随即选了一个数值,比如12,我怎么跟B对应上? 其实也比较简单,用二分法查找即可。

下面附上实现代码:

1 三类随机问题2 1. 已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管。3 实现思路:按行遍历所有记录,约隔n/m条取一个数据即可4

5 2. 在1类情况下,还要求选取出来的m条记录是随机排序的6 实现思路: 给n条记录,分别增加一列标记,值为随机选取的1至n之间的不重复数据,7 实现参考博文 将文件内容按行随机排列8

9 3. 区别于1,2类问题, 如果记录是有权重的,如何结合权重去随机选取。 比如A的权重为10, B的权重股为5, C的权重为1, 则随机选取4个时可能应该出现AABB。10

11

12 这第三类问题是本文重点,下面开始解决。13 实现思路: 以 A:10, B:5, C:1三条记录上随机选取4条为例,(是否以权重排序这个无所谓)14 对于15 A 10

16 B 5

17 C 1

18 首先,将第n行的数值赋为第n行加第n-1行的,递归执行,如下:19 A 10

20 B 15

21 C 16

22 然后每次从[1,16]随机选取一个数,如果落在[1,10]之间,则选取A,如果落在(10,15]之间则选B,如果落在(16,16]之间则选取C, 图示如下,谁占的区间大(权重高),被选上的概率更大。23

24

25 知道了思路,实现起来就比较方便了, 需要考虑的一点可能就是我随即选了一个数值,比如12,我怎么跟B对应上? 其实也比较简单,用二分法查找即可。26 下面附上实现代码:



推荐阅读
  • 应对.avast后缀勒索病毒:全面指南
    本文详细介绍了.avast后缀勒索病毒的特性、感染途径、恢复方法及预防措施,旨在帮助用户有效应对这一威胁。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 初探Java编程:从入门到实践
    本文旨在为初学者提供Java编程的基础知识,涵盖程序、算法、流程图的概念,以及JDK环境的配置和Eclipse的使用方法。 ... [详细]
  • 本文探讨了大型服务端开发过程中常见的几个误区,包括异步任务处理不当、日志同步模式使用、网络操作未设置超时、缓存命中率及响应时间未统计、单一缓存模式、分布式缓存加锁不当以及团队管理上的误区,旨在帮助开发者避免这些常见错误。 ... [详细]
  • 如何处理MySQL命令行中文乱码问题
    本文详细探讨了MySQL命令行中出现中文乱码的原因及解决方案,通过调整配置文件和执行特定SQL命令来确保字符集正确设置,为用户提供了一个有效的解决路径。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • 2023年最佳PHP开发学习路径推荐
    本文详细探讨了针对不同背景的学习者如何选择最适合自己的PHP开发学习资源,包括书籍、在线课程及培训机构的推荐。 ... [详细]
  • 本文将指导您如何在Docker环境中高效地搜索、下载Redis镜像,并通过指定或不指定配置文件的方式启动Redis容器。同时,还将介绍如何使用redis-cli工具连接到您的Redis实例。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 使用LVS与ldirectord实现高可用负载均衡
    本文介绍了如何通过LVS(Linux Virtual Server)结合ldirectord工具来实现服务器的健康检查及负载均衡功能。环境设置包括一个LVS节点和两个真实服务器节点,通过配置ldirectord进行健康状态监测,确保系统的高可用性。 ... [详细]
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • 深入解析MySQL查询优化:特定类型查询的高级策略
    本文详细探讨了MySQL中特定类型查询的优化方法,包括COUNT()查询、关联查询、LIMIT分页及UNION查询的优化技巧,旨在提高数据库查询效率。 ... [详细]
  • 前端开发中的代码注释实践与规范
    本文探讨了前端开发过程中代码注释的重要性,不仅有助于个人清晰地回顾自己的编程思路,还能促进团队成员之间的有效沟通。文章将详细介绍HTML、CSS及JavaScript中的注释使用方法,并提出一套实用的注释规范。 ... [详细]
author-avatar
imjob1234_34706
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有