【发布时间】:2016-03-28 20:47:14
【问题描述】:
基本上,我想帮助设计一种算法,该算法采用给定的数字,并返回一个与第一个数字无关的随机数。规定是 a) 对于相似的输入数字,给定的输出数字将始终相同,并且 b) 在一定范围内(例如 1-100),所有输出数字都是不同的。即,100 以下的两个不同输入数字不会给出相同的输出数字。
我知道通过创建一个有序的数字列表、随机打乱它们然后返回输入的索引很容易做到这一点。但我想知道它是否可以在没有任何缓存的情况下完成。也许使用某种散列算法?这主要是因为如果可能的输出范围更大,比如 10000000000,那么生成整个数字范围然后随机打乱它们是很可笑的,如果你只想得到一些结果的话它。
不管它是用什么语言完成的,我只是想知道它是否可能。这个问题我想了很久,除了我已经想出的解决方案,我想不出一个解决方案。
编辑:我刚刚有了另一个想法;如果有另一种算法返回第一个算法的倒数,那将会很有趣。这是否可能是一个值得探索的有趣挑战。
【问题讨论】:
-
你可以通过一些简单的计算,并缓存一些信息(主要是输入X返回哪个随机数,这样你就可以得到你要求的一致的返回值)。
-
我宁愿不做任何类型的缓存。此外,该算法可能会在一段时间后变得低效,因为必须多次生成随机结果以确保它不匹配任何其他答案。此外,这不会保留运行时之间的相似性。纯粹的数学结果不仅会为不同运行时之间的输入提供相同的输出,而且完全可以在不同的计算机上提供相同的输出。这就是我正在寻找的解决方案。
-
您正在寻找multiplicative inverse。
-
您是否愿意将答案(即使是简单的答案)作为答案而不是 cmets?
-
这个问题很奇怪。您要求数字之间的关系使得这些数字除了关系之外不相关。我想不出如何区分除了关系之外相关数字不相关的关系,以及相关数字以关系以外的方式相关的关系。应该如何开始回答这个问题?
标签: algorithm random hash distinct-values