代码之家  ›  专栏  ›  技术社区  ›  mikera

从DAG中随机采样节点

  •  2
  • mikera  · 技术社区  · 14 年前

    1. 我指定了一个固定的节点a,它永远不能被采样
    2. 直接或间接引用的节点从不采样

    有没有一个好的算法可以做到这一点?理想情况下不需要大量额外的内存,因为DAG很大!

    2 回复  |  直到 14 年前
        1
  •  2
  •   aioobe    14 年前

    我能想出的唯一解决办法就是

    1. 将节点放入哈希集中
      (使用宽度优先遍历从根遍历它们),O(| E |+| V |)

    2. 从节点A开始,通过向后遍历边来删除所有前置任务
      (同样是O(| E |+| V |)

    这将导致一个O(| E |+| V |)算法需要O(| V |)内存。

    请注意,您不必在步骤1中复制节点,只需保存对节点的引用。

        2
  •  0
  •   The Alchemist    14 年前

    我无论如何都不是这方面的专家,但我想你可能需要一个 Monte Carlo Markov chain sampling method 例如 Metropolis-Hastings Gibbs sampling

    您可以在网上找到一些代码示例,您可能需要修改代码以完全执行您希望它执行的操作。关于这个话题有一些很好的介绍,比如 this

    一些可能对您有所帮助的软件包括:

    我不知道你对图论的熟悉程度,所以我不确定你要实现这一点有多难。

    希望这有帮助。。。