我们的应用程序显示具有大量节点和边缘的潜在大图。当然,我们使用像dot这样的东西来布局图形,它们在屏幕上看起来很好。但是,用户希望将它们打印到纸上。从技术上讲,我们可以做到这一点,我们将图形分成小图像,用户可以打印出来。但是不能保证通过切割页面大小我们不会切割节点,在不同页面之间有大量边缘等等。我正在寻找一种可以改变图形布局的算法,以便它在打印时更有用: - 确保没有节点落在页面边界上 - 尽量减少页面之间的边缘 似乎看起来像找到密集相关节点的“集群”放在同一页面上,几乎没有边缘与其他页面交叉到其他集群。有人能指出我做相关的文献/工具吗?
由于
答案 0 :(得分:1)
聚类分析是一个良好的开端。
我建议采用以下方式处理:
首先定义成本函数:
给定页面重新分区:成本(重新分区)= f(边界附近的节点,多边形边缘)
目标是尽量减少这个功能。
选择了群集分析算法:
定义一个集群算法(您可以查看我在DBSCAN上的帖子:DBSCAN code in C# or vb.net , for Cluster Analysis 并向群集添加“页面”约束。 (页面大小)
根据订单,您将通过您的积分,因为“页面约束”,结果会有所不同。
选择成本最低的那个,或者在找到可接受的成本时停止。
这个算法的复杂性是O(n!)......对于大图来说有点大。 因此,您需要考虑更多的聚类约束,或者只是进行部分搜索(首先测试n2将其置于O(n2)中)以获得良好的近似值。 根据可接受的成本,您可以在合理的时间内获得结果。