对于我正在从事的项目,我应该生成具有有限高度的随机生成树。
基本上,我执行以下操作:1)生成生成树2)检查可行性,如果可行,请保留它。
1)从最小生成树(Prim或Kruskal的树)开始,我添加一个不存在的边,这创建了一个循环,我检测到此循环并删除了该循环的边之一,这给了我新的生成树,然后我继续通过添加新边来生成树...
2)假设有一个特殊的顶点。对于每个顶点,从到的路径的长度应小于,其中是给定的参数。
有什么更好的(聪明的)方法吗?
PS我忘了指定另一个约束(我的错误):顶点的度也应定界。
对于我正在从事的项目,我应该生成具有有限高度的随机生成树。
基本上,我执行以下操作:1)生成生成树2)检查可行性,如果可行,请保留它。
1)从最小生成树(Prim或Kruskal的树)开始,我添加一个不存在的边,这创建了一个循环,我检测到此循环并删除了该循环的边之一,这给了我新的生成树,然后我继续通过添加新边来生成树...
2)假设有一个特殊的顶点。对于每个顶点,从到的路径的长度应小于,其中是给定的参数。
有什么更好的(聪明的)方法吗?
PS我忘了指定另一个约束(我的错误):顶点的度也应定界。
Answers:
几年前,我正在研究有深度的生成树,它们真的很有趣。我的一些同事提出了出色的消息传递算法,但是我找不到他们可用的任何代码。我们在这里以物理学风格将其写成:http : //iopscience.iop.org/1742-5468/2009/12/P12010/。他们告诉我,它也可以在度界内使用,尽管这并未纳入论文范围。
您提出的方法,我称为Markov Chain Monte Carlo,通常是消息传递方法的竞争者。如果您有兴趣从给定图的一组边界度,边界深度生成树中随机抽取近似均匀的样本,建议您改变使用“软”边界的方法。即,不是拒绝使树违反深度限制的边交换,而是接受它,但是比不违反边界的交换的概率低。如果您有一个控制该概率降低多少的参数,则可以使违反配置的约束越来越少,直到获得几乎统一随机的可行解决方案。
最大的问题是您需要运行多长时间。由于度数最大为2的生成树是哈密顿路径,因此您应该期望任何泛型绑定在图的大小上都是指数的。但是也许您感兴趣的图在某种程度上很特别。
使用广度优先搜索!从图中的每个顶点进行BFS,选择结果树的最小高度。BFS总是以最小的跳数找到从根到其他所有顶点的路径。