【问题标题】:find random country but probability of picking higher population country should be higher [duplicate]找到随机国家,但选择人口较多的国家的概率应该更高[重复]
【发布时间】:2019-04-22 14:37:20
【问题描述】:

我正在处理以下面试问题:

如果给您一份国家/地区及其相应人口的列表, 编写一个函数,它将返回一个随机国家,但越高 该国的人口越多,就越有可能在 随机的。

我想出了以下逻辑:

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

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

请注意,百分比之和应为 100。

现在,随机生成一个介于 1 到 100 之间的数字“n”。

如果 1

有没有更好的方法来解决这个问题?算法或代码什么都可以。另外,如果我们要在 Java 中实现它,那么在这里使用的最佳数据结构是什么?

【问题讨论】:

  • 这很好。它是对具有指定概率的离散集进行采样的标准方法之一。一个简单的列表(按范围排序)就足够了(进行二进制搜索以找到国家/地区)。
  • 为什么你应该坚持 1
  • 实数四舍五入到相同的整数值呢?那你会选择哪个国家呢?那么人口

标签: java algorithm data-structures


【解决方案1】:

你可以使用TreeMap,它是 O(log n) 并且有一个方便的 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();

【讨论】:

  • 您无需遍历一次即可找到总人口,然后计算百分比。如果您将上面的 percentCountry1 等替换为 populationCountry1(等)并在 1 和世界总人口之间绘制一个随机数(使用双精度或 64 位整数作为人口,因为 32 位整数不够),则此解决方案有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多