zoukankan      html  css  js  c++  java
  • Lua在给定范围内,生成指定个数不重复随机数组

    本篇主要是参考 lua连续随机数 这篇文章完成。大家可以去原贴查看学习。

    生成随机数组,暂时发现两种方法

    1、把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都想到这个方法)

    2、先生成一个连续的数字表t,每次随机一个数n,把t[n]保存,并移除t[n]

    首先,说一下我的真实需求是给定一定范围,然后生成指定个数的不重复随机数组。这个给定范围,可能很大,可能很小,指定个数可能比数组个数大,也可能只比数组个数小一点,也可能比数组个数小很多。

    例如,1、从1~100,这100个数内,随机生成10个不重复数字数组。

      2、从1~1000,这1000个数内,随机生成10个不重复数字数组。

      3、从1~15,这15个数内,随机生成10个不重复数字数组。

    当需求是例2时,生成方法一没有任何问题。

    需求是例1时,生成方法一也凑合没问题。

    但是,当需求是例3时,生成方法三的重复概率过高,使得随机次数无限增大(我的机器就直接卡死不动来进行反抗)。

    根据需求,于是用生成方法二生成随机数。

    下文附上原贴中的代码(我要去吃饭了,自己的代码就先不贴了):

    --产生1~~m,若有n的则m~~n的数字表
    function table.fillNum(m,n)
        local j,k
        if n then
           j=m
           k=n
        else
            j=1
            k=m
        end
    
        local t={}
        for i=j,k do
            table.insert(t,i)
        end
        return t
    
    end
    
    
    --产生不相同的从m到n,一共cnt个随机数表
    function math.randomx( m,n,cnt ) --方法1
        if cnt>n-m+1 then
            return {}
        end
        local t = {}
        local tmp = {}
        math.randomseed(os.time())
        while cnt>0 do
            local x =math.random(m,n)
            if not tmp[x] then
                t[#t+1]=x
                tmp[x]=1
                cnt=cnt-1
            end
        end
        return t
    end
    --同上 (我对方法2做了修改,以符合自己的需求)
    function math.randomEx(m,n,cnt) --方法2
        local tmp=table.fillNum(m,n)
        if cnt>n-m+1 then
            return tmp
        end
        local x=0
        local t={}math.randomseed(os.time())
        while  cnt>0 do
           x=math.random(1,n-m+1) 
           table.insert(t,tmp[x])
           table.remove(tmp,x)
           cnt=cnt-1
           m=m+1
          
        end
        return t
    end
    
    
    t=math.randomx(11, 25, 6)
    for i=1,6 do
      print(t[i])
    end
    print("...........")
    t=math.randomEx(11, 25, 6)
    for i=1,6 do
      print(t[i])
    end
  • 相关阅读:
    Memcached学习(一)
    了解下SoftReference
    Java Thread UncaughtExceptionHandler
    csdn 不登录浏览全文 chrome 浏览器
    postgresql 主从 patroni
    熔断,限流,降级
    CentOS7.4 源码安装MySQL8.0
    CentOS BIND9安装及配置
    Linux安全之SYN攻击原理及其应对措施
    fping常用参数介绍
  • 原文地址:https://www.cnblogs.com/slysky/p/5954053.html
Copyright © 2011-2022 走看看