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;

  • 相关阅读:
    Python基础之公共方法
    Python基础之字符串
    Python基础之字典
    Python基础之元组
    Python基础之列表
    Python基础之函数和模块
    Python基础之if判断,while循环,循环嵌套
    Python基础之注释,算数运算符,变量,输入和格式化输出
    Mapreduce实例——二次排序
    Mapreduce实例——Reduce端join
  • 原文地址:https://www.cnblogs.com/fegnze/p/4022786.html
Copyright © 2011-2022 走看看