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;

  • 相关阅读:
    java算法---五家共井
    JAVA实用工具--javamail
    java基础篇---HTTP协议
    java基础解疑!!!
    java基础解疑!!
    jsp----标签编程(JSTL)
    jsp----EL表达式
    java基础篇---线程问题
    算法篇---java经典问题!!!
    java基础篇---注解(Annotation)
  • 原文地址:https://www.cnblogs.com/fegnze/p/4022786.html
Copyright © 2011-2022 走看看