在生成大量随机数时保证唯一性的最有效方法

时间:2017-11-11 23:58:45

标签: java random shuffle

我需要生成一个代表v4 ip地址的随机数数组,并且数组中的每个随机数必须是唯一的。

解决此问题的最有效方法(数据结构和算法)是什么?

我正在考虑生成一个255 ^ 4元素的数组,从0到255 ^ 4。并使用诸如Fischer和Yattes算法之类的shuffle算法来混洗这些数字。因此,当我需要生成一个n元素数组时,我只需从上面的数组中选择第一个n元素。

这是最有效的方法吗?

2 个答案:

答案 0 :(得分:1)

IP v4号码只是呈现32位整数的另一种方式。以十进制打印每个字节,中间用点。

因此,选择一个随机的32位数字,并丢弃那些代表系统中广播地址的数字。根据需要重复。

答案 1 :(得分:0)

如果你想要IPv4整数(32位)的确定性唯一性保证,你可以简单地使用512 MB的数组然后根据你需要的任何概率分布在数组上循环,翻转硬币(可能偏向于多少你正在寻找的整数),并设置头部,如果是尾部则保持不设置。

但是,如果您只愿意使用概率保证,那么使用基于this question的构造减少内存消耗可能会更加棘手。

相关问题