Chapter 1.有限连续范围内生成不重复随机数及其应用

欢迎来到「我是真的狗杂谈世界」,关注不迷路

背景/前言

最近遇到了两个可以转化为本文题目问题的需求点(具体需求在下面应用节选会讲到),决定整理和记录下来。

技术问题描述

  • 问题:给定一个连续且有限的值范围(从min到max,步长为step),从中随机取出不重复的n个值。
  • 举例:从108~10086的整数范围内,取出10个不重复的随机数。

技术问题方案

解决问题总会有一些通用的思想,比如:穷举、分治、迭代、倍增、回溯、贪心、动规

那运用这些思想可以想到如下解法(当然还会有别的解法)


粗暴随机法

  1. 维护一个结果集
  2. 在范围内生成一个随机数,并判断随机数是否在结果集内
  3. 随机数不在结果集内则加入结果集,并回到2步骤直至结果集内数量满足
  4. 随机数在结果集内则直接回到2步骤直至结果集内数量满足
function unique_rand($min, $max, $num) {
   
    $count = 0;
    $return = [];
    while ($count < $num) {
   
        $return[] = mt_rand($min, $max);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值