首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在不存储数组的情况下生成整数的随机排列?

有没有办法在不存储数组的情况下生成整数的随机排列?
EN

Stack Overflow用户
提问于 2021-06-22 16:06:47
回答 2查看 222关注 0票数 1

对于上下文,我试图为我正在制作的应用程序创建一个随机用户的提要,我希望这是一个不重复的提要(当然,直到您访问每个用户的配置文件为止)。假设我有一些用户,索引从0到X(所以X+1用户,我们忽略了登录的用户)。其中一种方法是创建一个数组,然后应用费舍-耶茨洗牌来获得一个随机排列,然后继续进行这个排列。

不过,我的要求有点不同。我希望在客户端生成一个种子,避免生成这样的数组,所以我从客户端发送的唯一数据就是分页:(offset, limit, seed)

它的核心是范围[0, X][0, X]之间的随机双射映射。从根本上说,这是一个随机排列,但这与存储整个数组的开销有关。如果我有100万条条目,那么只为了达到任意的索引就必须生成这个数组是没有意义的。

本质上,我是否可以在偏移量 (x)、极限 (y)和种子中给出一个函数,使它能够在0和DB_SIZE (0 <= x <= DB_SIZE)之间的唯一整数序列(可以被赋予种子)的随机序列中计算位置为x的整数,然后计算出现在它之后的E 113y<代码>E 214/代码>整数?这应该在O(1)时间和空间内完成,而不需要计算这个序列中x-1整数之前的x。(编辑:这里的限制是索引x之后要检索的元素数,包括在内。因此,如果我想获得接下来的10个用户,我将返回,在传统的分页,在索引x, x + 1, ... , x + 9的项目。现在,这些应该是映射到一个随机的指数序列,[29, 57, 61, 1, 5, 30, 11, 70, 94, 7]说。

有什么办法让我做到这一点吗?

Sidenote:是的,在用户浏览了100个其他用户之后,用户不太可能在一开始就注意到重复,所以理论上我可以确保我有100个唯一的用户,然后在这个用户用完后再生成另外100个用户(其中可能包含前100个用户中的重复,无论以前有多少)。这是我可能不得不依赖的实现,但我想知道这是否有可能实现。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68087088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档