范围内非重复随机查找算法

2023-11-29

我正在寻找一种有效的算法,可以生成一定范围内的随机值,而不重复。

在伪代码中:(在 Rand 类中)

  Rand(long from, long to) {
    this.from = from;
    this.to = to;
    // ...
  }

  long getNumber() {

    // returns a random number in the [from, to] range
    //  which has never been returned before
  }

Usage:

  Rand r = new Rand(1, 100000000);

  long x = r.getNumber();
  long y = r.getNumber();
  ...

从 r.getNumber() 返回的数字应该始终与之前返回的数字不同。
当然,如果to - from + 1返回数字后,算法应该重新开始(或者出错 - 无论如何都不重要)。

请注意,范围可能非常大,因此是随机排列的数组(最初包含[from, to]数字)可能会溢出内存。


密码是一对一的映射,否则无法解密。因此,任何块密码都会将数字 0、1、2、3、4、5...映射到不同的 n 位数字,其中 n 是密码的块大小(以位为单位)。

将简单的 4 轮 Feistel 密码与您想要的任何(偶数)块大小组合在一起相对容易。只有四轮,速度很快,但不安全。或者使用仓促布丁密码它几乎可以有你想要的任何块大小。

无论您使用哪种密码,只需加密数字 0、1、2...,然后查看输出块即可。您可以丢弃任何超出您所需范围的结果,并且所有结果都保证是唯一的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

范围内非重复随机查找算法 的相关文章

  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • 照片马赛克算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

    Hy 我要做的是创建一个程序 使用 C 或 C 它将 24 位 像素位图和图像集合作为输入 我必须创建一个马赛克图像 类似于使用库的输入图像给定的图像 创建与输入类似的马赛克照片 到目前为止 我可以访问输入的图像像素及其颜色 但我有点卡住了
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • 我正在尝试寻找“调酒师算法”

    我正在解决旧编程竞赛中的一些示例问题 在这个问题中 我们输入了我们有多少调酒师以及他们知道哪种配方 每杯鸡尾酒的制作时间为 1 分钟 我们需要计算是否可以在 5 分钟内使用所有调酒师完成订单 解决这个问题的关键是尽可能高效地分配鸡尾酒 这就
  • 从 1 到 20 亿,像 (23,29) 这样相差 6 的连续素数对的数量

    如何在考虑时间复杂度的情况下从 1 到 20 亿 使用任何编程语言且不使用任何外部库 找到像 23 29 这样相差 6 的连续素数对的数量 尝试过埃拉托色尼筛 但获得连续素数是一个挑战 使用了生成器 但时间复杂度非常高 代码是 def ge
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1
  • C++ 为伪随机数生成器生成良好的随机种子

    我正在尝试为伪随机数生成器生成一个好的随机种子 我想我应该得到专家的意见 让我知道这是否是一个不好的方法或者是否有更好的方法 include
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • 如何在 Unity 中对齐“轨道”或模块化对象?

    我正在开发一个简单的游戏 用户可以在其中放置不同但模块化的对象 例如 轨道 道路等 我的问题是 当将一个物体靠近另一个物体时 如何匹配和放置不同的物体 我的第一种方法是为每个模块对象创建一个隐藏的子对象 一个盒子 并将其放在可以放置其他对象
  • 贪心技术与穷举搜索有何不同?

    我正在为一些示例问题编写伪代码 并且我注意到贪婪技术和详尽搜索之间存在令人担忧的模式 Job 1 Job 2 Job 3 Job 4 Job 5 Person 1 9 2 7 8 Person 2 6 4 3 7 Person 3 5 8
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 如何高效生成总和在指定范围内的所有组合(在所有深度)

    假设您有一组值 1 1 1 12 12 16 如何生成总和在预定义范围内的所有可能组合 不重复 min max 例如 这里是 所有深度的 范围在13 and 17 1 12 1 1 12 1 1 1 12 16 1 16 这假设具有相同值的
  • 2D形状识别与解析算法

    我正在寻找一种算法 用于从给定的一组 x y 点检测简单形状 如矩形 三角形 正方形和圆形 我还在寻找一种方法 一旦检测到 将路径转换为更干净的形状 我已经查遍了互联网 但没有找到任何 简单 的方法 几乎所有这些对于我的简单实现来说都是高级
  • 查找一个二维矩阵是否是另一个二维矩阵的子集

    最近我参加了一个黑客马拉松 我了解到一个问题 试图在 2d 矩阵中找到网格形式的模式 模式可以是 U H 和 T 并由 3 3 矩阵表示 假设我想展示 H 和 U 1 0 1 1 0 1 1 1 1 gt H 1 0 1 gt U 1 0
  • 寻找簇的中心

    我有以下问题 进行抽象以找出关键问题 我有 10 个点 每个点与其他点有一定距离 我想要 能够找到簇的中心 即与其他点的成对距离最小的点 令 p j p k 表示点 j 和 k 之间的成对距离p i 是簇的中心点 iff p i s t m

随机推荐

  • 如何在DatePickerDialog.OnDateSetListener中获取OnClick?

    我正在使用以下方法弹出对话框来选择日期 private DatePickerDialog OnDateSetListener mDateSetListener new DatePickerDialog OnDateSetListener p
  • 将空 XML 元素反序列化为 Guid.Empty

    我在反序列化方面遇到一些麻烦
  • ocaml printf 函数:如果某些条件成立,则完全跳过格式化

    摘自ocaml 在对象的方法中公开 printf 函数 因此可以独立回答 我有以下 简化的 ocaml 代码 用于记录器 type log level Error Warn Info let ord lvl match lvl with E
  • 从namedtuple中获取特定对象的对象名

    我最近发现namedtuple并想用它来替换我讨厌的大类定义 但我很好奇是否有一种聪明的方法来检索我刚刚选择的值的对象名称 如果不清楚 请参阅下面的示例 MyStruct namedtuple MyStruct Var1 Var2 Var3
  • 在 Python 3 中使用 ANSI 序列确定终端光标位置

    我想编写一个小脚本 将图像打印到终端 usr lib w3mimgdisplay 就像在 mac osx 中一样lsi 因此 当脚本启动时 我需要实际的光标位置 或插入符号位置 到目前为止 我想出了用 ANSI 序列获取 shell 中光标
  • 如何使用 Group By 和自连接返回每日最低、最高、开盘价和收盘价结果集?

    SOLVED 堆栈溢出万岁 当我离开时 人们留下了 2 个解决方案 谢谢大家 为两个可行的解决方案分发业力的协议是什么 这是我回来发布的解决方案 它源自另一个 StackOver 解决方案 如何使用聚合函数在MySQL查询中获取分组记录的第
  • 可空对象必须有一个值#2

    我试图重用我一直使用的相同代码 但现在遇到错误 我正在循环访问各种用户表 并在其中执行以下操作 DateTime dcdt DateTime u DateCreated DateTime lldt DateTime u LastLogon
  • 如何使用js移动输入中的文本

    我只是使用 js 来设置文本输入的值 但是 当文本长度超过输入可容纳的长度时 多余的文本将隐藏在输入的右侧部分 如何像正常打字一样隐藏左侧区域多余的文字 原谅我糟糕的英语 当您执行此操作时 您的插入符位置位于文本的开头 您需要将插入符位置移
  • 使用 common lisp 展平列表

    我正在读 Paul Graham 写的 On Lisp 一书 在第 4 章 实用函数 中 他给出了对列表进行操作的小函数的示例 这在编写较大的程序时会很有帮助 其中之一是flatten 给定任意级别的嵌套列表作为参数 展平将删除所有嵌套元素
  • 改进 HoughLines 以进行水平线检测(Python、OpenCV)

    我有这个源图像 我的目标是删除底线 同时保持字母 数字不变 这是我使用的代码 import cv2 import numpy as np img cv2 imread src png gray cv2 cvtColor img cv2 CO
  • 在 Cassandra 中存储值列表

    版本相关 这个问题的一些答案涉及旧版本的 Cassandra 此类问题的正确答案取决于您使用的 Cassandra 版本 我有一个个人资料列族 想要在每个个人资料中存储技能列表 我不确定这在 Cassandra 中通常是如何完成的 一种选择
  • Python Glassdoor API

    我正在尝试使用 Python 从他们的 API 中获取 glassdoor 数据 import urllib2 id1 x key y action employers company company basepath http api g
  • 在 Flask 中,我在哪里定义 url_for() 使用的域?

    当我打电话时url for index 它会生成 但有时我希望它生成 domain tld 反而 我在文档中找不到指定这一点的位置 我只需要做吗 domain tld s url for index url for需要一个 external
  • 编译器正在创建额外的类文件,其中包含 $

    我正在使用 Eclipse 并使用 SWT 编写了一个 Java 应用程序 当 Eclipse 编译我的程序时 它将我的主文件重命名为 4 个不同的文件 如下所示 主文件 class 主文件 1 class 主文件 2 class 主文件
  • VBA - 将上传的 .csv 文件名放入特定工作表的单元格中

    我想知道是否有一种方法可以获取所选的 csv 文件并将名称放入 摘要 表上的单元格中 以下是上传 csv 文件的代码 Dim ws As Worksheet strFile As String Set ws ActiveWorkbook S
  • JavaScript 数组拼接与切片

    有什么区别splice and slice const array 1 2 3 4 5 array splice index 1 array slice index 1 splice 改变原始数组 而slice 不 但它们都返回数组对象 请
  • rm() 似乎没有清空我的 R 工作区

    我正在尝试清理我的 R 工作区 我在任何线程中发现的任何东西似乎都不起作用 我已经在谷歌上搜索并尝试了几个小时的解决方案 当我打开 R 并输入ls 控制台显示上一个会话中的所有代码 function name pos 1L envir as
  • 如何循环遍历字符串并打印某些项目?

    lst AB CD EF GH 输出 A B CD E F GH 这是我尝试过的 但它不起作用 while index lt len my string curr char my string index if curr char whil
  • 如何使用 Groovy 元编程重写 java 类型实例的方法?

    我试图在 Groovy 代码中重写 java 类型实例的方法的功能 但遇到了类转换异常 我看了张贴的指南here但我无法让它工作 由于我的实际问题有点混乱 下面是一些可运行的示例代码 但由于相同的错误而失败 在示例中 我想重写 java l
  • 范围内非重复随机查找算法

    我正在寻找一种有效的算法 可以生成一定范围内的随机值 而不重复 在伪代码中 在 Rand 类中 Rand long from long to this from from this to to long getNumber returns