zoukankan      html  css  js  c++  java
  • 用lua实现的不重复随机数

    空间复杂度为(1-n),时间复杂度为应该也是最低的,lua方便之处还是很值得利用的

    local Random = {};

     

    function Random:Awake()

        self.m_min = 1;

        self.m_max = 1;

        self.m_end = 1;

        self.m_rangeMap = {};

    end

     

    function Random:setRange( min,max )

        if min > max then

            min,max = max ,min;

        end

        self.m_min = min;

        self.m_max = max;

        self.m_end = max;

        self.m_rangeMap[self.m_max] = self.m_max;

    end

    -------------------不重复------------------------------

    function Random:getRandom( ... )

        math.randomseed(tostring(os.time()):reverse():sub(1,6));--避免时差太小

        math.random(self.m_min,self.m_max);--过滤掉前几个劣质随机数;

        math.random(self.m_min,self.m_max);

        math.random(self.m_min,self.m_max);

        local tmp = math.random(self.m_min,self.m_max);

        local ret = self.m_rangeMap[tmp];

        if ret == nil then

            ret = tmp;

        end

        self.m_rangeMap[tmp] = self.m_max;

        self.m_max = self.m_max - 1;

        return ret;

    end

     

    function Random:getRandomNormal( ... )

        math.randomseed(tostring(os.time()):reverse():sub(1,6));--避免时差太小

        math.random(self.m_min,self.m_end);--过滤掉前几个劣质随机数;

        math.random(self.m_min,self.m_end);

        math.random(self.m_min,self.m_end);

        local ret = math.random(self.m_min,self.m_end);

        local tmp = self.m_rangeMap[ret];

        if tmp == nil then

            self.m_rangeMap[ret] = self.m_max;

            self.m_max = self.m_max - 1;

        end

        return ret;

    end

     

    return Random;

  • 相关阅读:
    NaN数值类型
    模板字符串
    一文带你速懂虚拟化KVM和XEN
    CentOS 8配置本地yum源及DNF简介
    fxksmdb.exe 是什么进程?
    入行IT,一定要会Linux吗?
    干货|Linux平台搭建网关服务器
    忘带U盘了??别急!一行python代码即可搞定文件传输
    手把手教你如何搭建一个私有云盘
    误删重要文件怎么办?学会Linux 救援模式再也不担心
  • 原文地址:https://www.cnblogs.com/fegnze/p/4022786.html
Copyright © 2011-2022 走看看