根据热点选国家

来源:互联网 发布:java join多个线程 编辑:程序博客网 时间:2024/06/05 21:09
题目:
     有一个待选国家的列表,以及国家的相对热门程度,请给出一个算法,随机选择一个国家,并且保证,越是热门的国家,随机选择它的可能性就越高。

分析:
    

每当我们遇到一个题目的时候,都要对题目进行充分的理解,有哪些条件,目标是什么。这个题目看完之后,我们能够得到两个要点:

  • 随机选择一个国家
  • 越是热门,选择的可能性、概率就越高

我们怎么做到这个呢?如何充分理解这个呢?还是通过一个例子来进行:

国家ABCD热度1252

随机选择一个国家,意味着,如果热度相同,则被选择的概率是相同的,更进一步,都可以表示为2/10。依次类推,A被选择的概率是1/10,热度最小,则概率最小。并且,概率之间的比,和热度之间的比是相同的。

那么,我们以怎么样的方法,来保证,选择A的概率是1/10,B和D的概率是2/10,C的概率是5/10?我们稍作变换,将上面的表格,转换为如下的表格:

ABBCCCCCDD

我们只要保证,选择上面表格中每一个元素的概率是相同的,就可以得到A,B,C,D的概率值。如何保证呢?两种情况:

  • 当国家数以及热度都是固定时,比如上面的总数10,随机0-9的数字,即可。
  • 当国家数以及热度都是不固定时,则需要蓄水池抽样算法
0 0