我需要生成一个代表v4 ip地址的随机数数组,并且数组中的每个随机数必须是唯一的。
解决此问题的最有效方法(数据结构和算法)是什么?
我正在考虑生成一个255 ^ 4元素的数组,从0到255 ^ 4。并使用诸如Fischer和Yattes算法之类的shuffle算法来混洗这些数字。因此,当我需要生成一个n元素数组时,我只需从上面的数组中选择第一个n元素。
这是最有效的方法吗?
答案 0 :(得分:1)
IP v4号码只是呈现32位整数的另一种方式。以十进制打印每个字节,中间用点。
因此,选择一个随机的32位数字,并丢弃那些代表系统中广播地址的数字。根据需要重复。
答案 1 :(得分:0)
如果你想要IPv4整数(32位)的确定性唯一性保证,你可以简单地使用512 MB的数组然后根据你需要的任何概率分布在数组上循环,翻转硬币(可能偏向于多少你正在寻找的整数),并设置头部,如果是尾部则保持不设置。
但是,如果您只愿意使用概率保证,那么使用基于this question的构造减少内存消耗可能会更加棘手。