【问题标题】:Select element from collection with probability proportional to element value从集合中选择元素,概率与元素值成正比
【发布时间】:2023-03-09 03:35:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: algorithm graph selection probability random-sample


    【解决方案1】:

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

    选择一条随机边,然后随机选择它连接的节点之一;那是你的随机顶点。概率与顶点度成正比——对于每个节点,概率为

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

    【讨论】:

    • 这似乎是显而易见的答案。当图的边缘包含相同的信息时,无需创建辅助数据结构。
    • 确实非常聪明,恕我直言,以前的方法更普遍地适用于您必须与其值成比例地选择节点的每种情况,这可能不是度数......
    【解决方案2】:

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

    现在,在[0,Sum(d(v)))范围内选择一个均匀分布的变量x,并返回list[x]

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

    【讨论】:

      猜你喜欢
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多