繁体   English   中英

从消除排序和弦图中获取树分解

[英]Obtaining a tree decomposition from an elimination ordering and chordal graph

给定消除排序和图形的弦线化,我需要对图形进行很好的树分解。

我的想法是获取图中的所有派系(我可以做),并从根开始构建二叉树,并根据派系的共同点数生成子项(即派系)。 我想这样做直到使用所有派系,因此,我有一棵树。 问题是,派系可能有两个以上的顶点,所以我不能递归地为每个顶点运行,因为树可能不是二进制的。

http://en.wikipedia.org/wiki/Tree_decomposition http://en.wikipedia.org/wiki/Chordal_graph

我在python中进行实现,目前我有chordal图,所有派系列表和排序顺序。 想法和/或代码非常受欢迎!

构造一个非常好的(通常)和弦图的树分解:找到一个完美的消除排序,枚举最大派系(候选者是一个顶点和在排序中出现在它后面的邻居),使用每个集团作为一个分解节点并将其连接到与其相交的排序中的下一个集团。 我没有描述那么正确; 看我随后的回答

一个很好的树分解定义如下( Daniel Marx的定义)。 漂亮的树分解根深蒂固。 每个节点都是四种类型之一。

Leaf (no children): a set {v}
Introduce (exactly one child): a set S union {v} with child S (v not in S)
Forget (exactly one child): a set S with child S union {v} (v not in S)
Join (exactly two children): a set S with children S and S

任意地根据非好的树分解并在根处开始递归转换过程。 如果当前节点没有子节点,则构造由带有祖先的叶节点组成的明显链。 否则,请注意,如果某个顶点属于至少两个子节点,则它属于当前节点。 递归转换子和链忘记祖先,直到它们的集是当前节点的子集。 从理论上讲,最简单的方法是将缺失的元素引入每个孩子,然后集体加入。 但是,由于下一步的运行时间通常取决于设置大小,因此在子集完成之前尝试一些启发式方法来加入子项可能是明智的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM