我有一个大的有向图(DAG),我想根据以下标准有效地绘制一个样本节点:
节点存储为具有指向其引用的其他节点的对象的对象,整个图形可以从直接或间接引用其他所有节点的单个根节点到达。
有一个很好的算法吗?理想情况下,由于DAG很大,所以不需要大量的额外内存!
答案 0 :(得分:2)
我能想到的唯一解决方案是
将节点放入哈希集
中
(使用,例如,广度首次遍历从根遍历),O(| E | + | V |)
从节点A开始,通过向后遍历边缘来删除所有前任 (再次O(| E | + | V |))
从其余节点中选择一个随机节点。
这将导致O(| E | + | V |)算法具有O(| V |)内存要求。
请注意,您不必在步骤1中复制节点,只保存对节点的引用。
答案 1 :(得分:0)
我不是这方面的专家,但我认为您可能想要Monte Carlo Markov chain sampling method或Metropolis-Hastings算法等Gibbs sampling。
您可以在线找到一些代码示例,您可能需要修改代码才能完全按照您的意愿执行操作。关于这个主题有一些很好的演示,比如this。
可能对您有帮助的一些软件是:
我不知道你对图论的熟悉程度,所以我不确定你实现它有多困难。
希望这有用......