是否存在一些解决此类问题的算法,或者需要使用反复试验法来完成?
答案 0 :(得分:1)
感觉就像graph isomorphic问题或与之相关的事情。但是,我无法证明这一点。我会尝试使用约束 - 可满足性工具包来解决此任务。有很多方法可以做到,我会坚持使用satisfiability checking。
我们可以按如下方式制定你的问题:对于给定的顶点集和连通性约束(边连通性,顶点度等),有没有办法选择这样的边集,它将满足给定的约束条件?
让我们介绍两组布尔变量:每个顶点和每个边缘。我们同意,如果变量== True 那么它就会存在;否则它就不存在了。
我们不知道图表的外观,所以我们必须引入n ^ 2个变量来表示所有边缘:
> e_0, e_1, ..., e_m
当且仅当顶点至少有一个当前边时,我们才将顶点视为存在:
v_i <=> OR (e_0, e_1, ..., e_k)
最后,让我们介绍连接约束。我们可以使用pseudo-boolean constraints来执行此操作。下一个约束保证如果存在顶点,则必须至少存在5个边。只有该函数将评估为 True 。
min_degree_i <=> greater_than_equal (get_all_edges_from_vertex (v_i), min_value=5)
下一个约束确保所有顶点必须存在,除了它们中的任何三个(顶点连接)。边缘相同:
vertices_connectivity <=> select_exact ( (v_0, ..., v_n), (vertices_num - 3) )
edges_connectivity <=> select_exact ( (e_0, ..., e_m), (edges_num - 4) )
最后,我们可以将公式传递给SAT求解器(例如Glucose)。输出将是满足所有给定约束的图表。
我不确定我的方法是最好的,但我建议更详细地探讨它。我自己没有实现它,所以我的算法可能有一些缺点/错误。我的观点是,如果您不知道如何构建解决方案,并且您不知道它的外观,那么请尝试使用约束来找出解决方案。