Java 找到随机国家,但选择人口较高国家的概率应更高

Java 找到随机国家,但选择人口较高国家的概率应更高,java,algorithm,data-structures,Java,Algorithm,Data Structures,我正在研究以下面试问题: 如果给你一份国家和相应人口的名单, 编写一个函数,返回一个随机的国家,但越高 这个国家的人口越多,就越有可能被选中 随机的 我提出了以下逻辑: 在列表上进行两次遍历。在第一次遍历中,总结所有 每个位置的人口,以获取总人口总数。在里面 第二次迭代,计算每个位置人口的百分比 反对总流行音乐。例如,如果位置A有一个population“A”。 A的人口百分比为(A/总人口)*100 假设在这些步骤之后,我们有以下值。地点A =35%B=22%C=19%D=20%E=4% 请注

我正在研究以下面试问题:

如果给你一份国家和相应人口的名单, 编写一个函数,返回一个随机的国家,但越高 这个国家的人口越多,就越有可能被选中 随机的

我提出了以下逻辑:

在列表上进行两次遍历。在第一次遍历中,总结所有 每个位置的人口,以获取总人口总数。在里面 第二次迭代,计算每个位置人口的百分比 反对总流行音乐。例如,如果位置A有一个population“A”。 A的人口百分比为(A/总人口)*100

假设在这些步骤之后,我们有以下值。地点A =35%B=22%C=19%D=20%E=4%

请注意,百分比加起来应该是100

现在,随机生成一个介于1和100之间的数字'n'


如果1可以使用
TreeMap
进行此操作,则它是O(logn)并且有一个方便的api。比如:

TreeMap<Integer, Country> map = new TreeMap<>();
map.put(percentCountry1, country1);
map.put(percentCountry1 + percentCountry2, country2);
// ...

int random = (new Random()).nextInt(100);
Country country = map.ceilingEntry(random).getValue();
TreeMap map=newtreemap();
地图放置(百分比country1,country1);
地图放置(百分比Country1+百分比country2,country2);
// ...
int random=(new random()).nextInt(100);
Country-Country=map.ceilingEntry(随机).getValue();

这很好。这是一种标准的方法,以指定的概率对离散集进行采样。一个简单的列表(按其范围排序)就足够了(进行二进制搜索以查找国家)。为什么您应该坚持使用1?将实数四舍五入到相同的整数值如何?那么你打算选择哪个国家?那么人口<1%的国家呢?不需要遍历一次就可以找到总人口,然后计算百分比。如果您使用populationCountry1(etc)替换上面的percentCountry1 etc,并在1和世界总人口之间绘制一个随机数(人口使用双精度或64位整数,因为32位整数不够),则此解决方案有效。