【问题标题】:Assigning a random natural number to every given natural number为每个给定的自然数分配一个随机自然数
【发布时间】:2020-08-26 02:23:18
【问题描述】:

我需要一个函数,它为 [0, infinity] 上的每个自然数分配一个随机对应的自然数。例如,一个函数将一个数字和种子作为参数,并为我提供与我为给定种子提供的数字相对应的随机数。

即,

它会分配给 5 24。

它会分配给 2 12589128948。

它会分配给 3 12358。

等等,等等,等等。

我一直在考虑如何实现这一点,并没有任何有用的想法。算法必须是可播种的,这样我就可以生成同一组整数,每个整数每次都映射到这些整数。映射不一定必须是一对一的。

有人知道这是否可能吗?如何实现?

谢谢!

【问题讨论】:

  • 为什么是“[0, infinity]”?为什么不是 0 到某个有界数?你能解释一下为什么需要这样的函数吗?
  • 尝试一种加密,它将初始数字(被视为明文)映射到一个唯一的明显随机数(密文)。正如@Peter O 所说,您最好设置一个大小限制,否则每个密文输出都可能具有无限大小。 2^googolplex 上面的数字比它下面的数字多得多。

标签: c++ algorithm random random-seed


【解决方案1】:

听起来您正在寻找的是一系列哈希函数。每个散列函数将整数作为输入,然后计算一些散列码,该码扮演随机分配的整数的角色。由于哈希函数总是从相同的输入产生相同的输出,因此它们具有您想要的可重复性。

有很多方法可以做到这一点。如果你有一些固定的哈希函数 f 可用,那么你可以使用一些随机选择的整数 k 作为你的“key”。然后可以将与 n 关联的数字计算为 f(n + k)。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2021-06-23
    • 2016-01-09
    • 2010-10-10
    • 2022-11-18
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多