有人询问GraphViz中重叠的子群集并获得以下响应:
抱歉,没有。一般子图可以共享节点而不暗示子集 遏制但不是集群。问题出在图纸上。 如果簇可以任意重叠,则绘制它们就成了问题 绘制维恩图,没有好的算法。
“绘制维恩图的问题”的正式定义或例子是什么?为什么它(我认为NP-complete / hard)很难? (额外点:将减少量描述为一个众所周知的NP完全问题)
答案 0 :(得分:5)
你有N个点和二元关系R,你需要以图形方式表示关系,以便每个节点都由欧几里德平面上的圆圈表示,这样两个圆圈重叠,当且仅当相应的节点n和n'它认为n R n'。
答案 1 :(得分:3)
在许多情况下,我们可以使用双重图形来代替维恩图,而双重图形是集合交叉点的布尔点阵。每个节点表示要包括的集合的唯一选择以及要排除的集合。仅通过包含/排除单个集合而不同的节点是连接的。
对于越来越多的集合,当然通常有许多节点和边缘。但是在许多实际设置中,将存在许多根本不相交的集合,因此可以省略那些交叉节点以及从它们到其他节点的任何边缘。通过这种方法,节点和边缘的数量可以减少到实际数量。
在布置结果图时,最好选择GraphViz算法“neato”并要求避免重叠节点。进行这些设置的一种方法是在图形的开口花括号内写入 layout = neato,overlap = prism;