【发布时间】:2013-01-18 04:35:15
【问题描述】:
我想创建具有 n 个顶点的所有有向图的集合,其中每个顶点都有 k 个直接后继和 k 个直接前驱。 n 和 k 不会那么大,而是在 n = 8 和 k = 3 左右。包括循环图和非循环图。每个图将依次用作对大量加权图进行采样的模板。
我的兴趣是拓扑图案的作用,所以我不想为任何两个彼此对称的图采样权重,其中 symmetry 意味着一个顶点中不存在顶点排列将其转换为另一个的图形。
一个天真的解决方案是考虑 2 ^ (n * (n - 1)) 邻接矩阵并消除所有那些(大部分)直接违反后继或前任约束。对于 n = 8,这仍然不足以表示和简单地枚举 uint64_t 内的每个矩阵。
跟踪行数和列数将是另一项改进,但真正的瓶颈是将图表添加到结果集中,此时我们需要针对已经在集合中的其他图表测试对称性。对于 n = 8,每个插入操作已经有超过 40,000 个排列。
谁能向我推荐一种我可以阅读的算法,它可以以更智能的方式完成所有这些工作?是否有用于 C、C++、Java 或 Python 的图形库已经实现了如此全面的图形生成器?是否有一个存储库,其中有人已经“列出”了所有合理的 n 和 k 图表?
【问题讨论】:
-
这听起来像是“计算机编程的艺术,第 4 卷”中的内容。