2016-09-26 51 views
-1

我有以下算法问题: 给定一个任意的数字序列,比如说5-10个数字,以及一个种子数,比如5,16或56.预期的结果是一组数字序列。该集合的大小是种子编号。例如,种子数为5,这意味着对于每个种子,我们都有一个{1,2,3,4,5}的种子集,我们只能从原始序列生成一个确定性和唯一的数字序列。以确定性方式变换数字

是否有任何哈希函数或JavaScript中实现的库可以实现?提前谢谢了。

回答

1

任意数字序列,比如说5-10个数字,以及种子号码,比如5,16或56.预期的结果是一组数字序列。该集合的大小是种子编号。例如,种子数是5,这意味着我们有一个种子集合{1,2,3,4,5},

理想情况下,你应该尝试做到这一点,并要求有帮助结果;询问“有没有/什么是最好的/你知道一个工具来做这件事”是关于堆栈溢出的话题,并且要求代码更是如此。

如果正确地明白,如果有的3种子大小,那么你有一个种子集是{1,2,3},并且希望长度的5和10之间的三个数字序列。

一种方法是建立这样的数字序列:

2 1 5 . . . . 

,其中2为代表的种子需要的位数(在你的榜样,1或2个都行),这里15是种子,然后是15的任何哈希(可能是盐),转换为10并截断到所需的长度。 JS中有库可以执行MD5和SHA1哈希。 MD5是128位,它给出了大约128/3.32 = 38位数字(你也可以使用CRC32,它产生9.6位数,但计算种子大小和种子本身,对于10位数字序列,你只需要8位数字,所以9.6很多)。

这意味着所有来自2位数种子编号的序列将以2开头,但它们将是是唯一且确定的。

+0

非常感谢Iserni。你的回答真的给了我一个解决方案的暗示。对于我来说CRC32比MD5和SHA1更好。 – Andrew