【发布时间】:2012-02-03 11:03:24
【问题描述】:
我有一个(在实践中)多达 50,000 个顶点的加权图。给定一个顶点,我想根据所有相邻边的相对权重随机选择一个相邻顶点。
我应该如何将此图表存储在内存中,以便进行有效的选择?什么是最好的算法?它可以像每个顶点的键值存储一样简单,但这可能不适合最有效的算法。我还需要能够更新网络。
请注意,我一次只想迈出一个“步骤”。
更正式地:给定一个加权的、有向的、可能完全的图,让 W(a,b) 为边 a->b 的权重,让 Wa 是来自 a 的所有边的总和。给定一个输入顶点v,我想随机选择一个顶点,其中选择顶点x的可能性是W(v,x) / Wv
示例:
说 W(v,a) = 2, W(v,b) = 1, W(v,c) = 1.
给定输入 v,该函数应以 0.5 的概率返回 a,以 0.25 的概率返回 b 或 c .
【问题讨论】:
-
最合适的表示可能取决于图的稀疏程度。另外,“容易[进行选择]”是指“高性能”还是“需要很少的代码”?
-
@aix 图可能是完整的(如前所述),但通常会有些稀疏(每个节点可能有 25% 的可能出边?)。我进行了编辑以明确表示我想要高效的性能而不是简单的代码。
标签: c algorithm data-structures graph