2011-07-08 83 views
3

我们的应用程序显示可能包含大量节点和边的大图。当然,我们使用诸如点的东西来布局图表,并且它们在屏幕上看起来很好。但是,用户想要将它们打印到纸张上。现在技术上我们可以做到这一点,我们将图形分成小图像,用户可以打印出来。但是不能保证通过在页面大小切割我们不会切入节点,在不同页面之间加载边缘等等。我正在寻找一种算法来改变图的布局,以便它'd在打印时可用性更高: - 确保没有节点落在页面边界上 - 尽量减少页面间的边缘 看起来好像找到密集相关节点的“群集”,以便放在具有少量边的交叉点上到其他页面到其他群集。任何人都可以指点我的相关文献/工具来做这种事情吗?在纸上打印图形的布局

谢谢

回答

1

聚类分析是一个好的开始。

我建议以下办法处理:

首先定义一个成本函数:

给出一个页面重新分配:成本(重新分区)= F(边界附近,multipages-边缘节点)

这个目标是最小化这个功能。

选择了聚类分析算法:

定义聚类算法(你可以看看我的帖子上DBSCAN:DBSCAN code in C# or vb.net , for Cluster Analysis ,并添加一个“页面”约束聚类(大小页面)

根据订单,您将通过您的积分结果将是不同的,因为“页约束”的。

选择了一个具有最小的成本,或当你找到一个可接受的成本停止。

这个算法的复杂性是O(n!)...对大图很有用。 因此,您需要考虑一些更多的聚类约束,或者仅进行部分搜索(首先测试n2以使其在O(n2)中)以获得良好的近似值。 根据可接受的成本,您可以在合理的时间内得到结果。