从集合中选择元素,其概率与元素值成比例

时间:2012-07-18 12:51:38

标签: algorithm graph selection probability random-sample

我有一个顶点列表,我必须从中选择一个概率与deg(v)成比例的随机顶点,其中deg(v)是顶点度。此操作的伪代码如下所示:

Select u ∈ L with probability deg(u) / Sigma ∀v∈L deg(v)

其中u是随机选择的顶点,L是顶点列表,v是L中的顶点。问题是我不明白如何去做。有人可以向我解释,如何获得这个随机顶点。如果有人能向我解释,我将不胜感激。伪代码将更加欣赏;)。

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是为每个Sum(d(v))填充一个大小为v的列表 - 您将在完全 {{1}中保留对v的引用您列表中的条目。

现在,在范围d(v)中选择一个均匀分布的变量x,然后返回[0,Sum(d(v)))

此方法需要list[x]空间(因为对于简单的图O(n^2)),初始化时间也是Sigma(d(v)) is O(n^2),但只执行一次。假设您要多次选择一个顶点,每次选择它时,除了第一个顶点之外,都会O(n^2) [假设O(1)随机化函数和随机访问列表]。

答案 1 :(得分:2)

另一种解决方案;仍然很简单,不需要任何预处理或额外的内存(如果图中有一个边缘列表):

选择随机边缘,然后随机选择其中一个连接的节点;这是你的随机顶点。概率与顶点度成正比 - 对于每个节点,概率为

P(v) = sum(P(e: e uses v))/2 = |{e: e uses v}|/(2*|E|) = deg(v)/(2*|E|)