Skip to content

Instantly share code, notes, and snippets.

@sing1ee
Created July 26, 2013 13:32
Show Gist options
  • Save sing1ee/6088874 to your computer and use it in GitHub Desktop.
Save sing1ee/6088874 to your computer and use it in GitHub Desktop.
If you're given a list of countries and its corresponding population, write a function that will return a random country but the higher the population of the country, the more likely it is to be picked at random.

###选择旅游国家

####原题

有一个待选国家的列表,以及国家的相对热门程度,请给出一个算法,随机选择一个国家,并且保证,越是热门的国家,随机选择它的可能性就越高。

####分析

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

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

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

国家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的数字,即可。
  • 当国家数以及热度都是不固定时,则需要蓄水池抽样算法

蓄水池抽样算法,在我们前面的系列中有介绍,是时候翻开前面的东西,复习一下了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment