首页IT科技对于键值序列必须从键值为(使用键值对数组构造的无重复随机数算法)

对于键值序列必须从键值为(使用键值对数组构造的无重复随机数算法)

时间2025-05-01 16:54:43分类IT科技浏览5890
导读:-- @param list_length 生成的数组长度 -- @param max_random_length 随机数的最大范围 math...

-- @param list_length 生成的数组长度 -- @param max_random_length 随机数的最大范围 math.generate = function (list_length, max_random_length) local random = {} local random_list = {} -- 输出随机数表, 通过判断是否存在随机数键避免重复随机数 for i = 1, list_length do local random_number = math.random(1, max_random_length) -- 当存在该随机数时, 重复随机至不重复 while random[random_number] do random_number = math.random(1, max_random_length) end random[random_number] = true end for key, value in pairs(random) do table.insert(random_list, key) end return random_list end

在上面的函数math.generate中, 需要传入两个参数: 随机数表的长度list_length和最大随机数max_random_length. 返回1个没有重复值的随机数表.

由于lua的table本质上是键值对动态数组, 所以(line 14)可以直接将随机出来的数字random_number传入key中, 这样就表示这个随机数已经有了, 后续再随机出相同的随机数就会进入(line 11)的循环中去再次随机.

这样做的好处是, 不用和按顺序填充随机数表时, 每随机出一个值就需要和前面的所有值进行遍历查询, 这种随机数生成方式只需要比对一次就知道是否重复, 极大减少了时间复杂度.

最后, 通过pairs迭代器遍历出random所有的键(随机数)就构成了一个新的无重复随机数组random_list.

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
公众号文章隐藏 点击出现(公众号隐藏内容) openai gym(openai注册页面打不开怎么办-不用注册openai账户也能使用chatgpt的软件)