Algorithm 具有最小额外边的啮合环网

Algorithm 具有最小额外边的啮合环网,algorithm,graph,Algorithm,Graph,我的问题中有几个数据集可以合理地分组为环形网络,为了最吸引人地显示它们,我想以一种最小化边缘数量的方式组合它们: 这个问题对于两个人来说非常简单:只需将所有共享节点彼此相邻,然后让其他节点循环。对于网络中的3个或更少的节点来说,这也很简单,因为顺序并不重要。但是对于3个或更多的网络,如果其中有4个或更多的节点,我该如何解决这个问题呢 因为每个环中的数据都是无序的,所以我可以对其重新排序以获得最大的效率。如果给定一组任意的环形网络,我如何确保这些组合环形网络中的最小边数 编辑:使用此选项的代码:

我的问题中有几个数据集可以合理地分组为环形网络,为了最吸引人地显示它们,我想以一种最小化边缘数量的方式组合它们:

这个问题对于两个人来说非常简单:只需将所有共享节点彼此相邻,然后让其他节点循环。对于网络中的3个或更少的节点来说,这也很简单,因为顺序并不重要。但是对于3个或更多的网络,如果其中有4个或更多的节点,我该如何解决这个问题呢

因为每个环中的数据都是无序的,所以我可以对其重新排序以获得最大的效率。如果给定一组任意的环形网络,我如何确保这些组合环形网络中的最小边数

编辑:使用此选项的代码:

function arrangeInLoops (sets) {

    /* sort sets for maximum edge overlap */

    var graph = new Graph();

    for (var i = 0; i < sets.length; i++) {
        for (var j = sets[i].length - 1; j >= 0; j--) {
            // Both of these methods are made idempotent
            graph.addNode(sets[i][j]);
            graph.addEdge(sets[i][j], sets[i][j > 0 ? j - 1 : sets[i].length - 1]);
        }
    }

    return graph;
}
函数排列回路(集合){
/*最大边重叠的排序集*/
var-graph=新图();
对于(变量i=0;i=0;j--){
//这两种方法都是幂等的
图.addNode(集合[i][j]);
图.addEdge(集合[i][j],集合[i][j>0?j-1:集合[i].长度-1]);
}
}
返回图;
}

事实上,我找到了自己的解决方案,可以更好地显示这些数据集:由于数据基本上是无序的,基本上是某种关系,只需将每个数据集中的所有项目相互连接(即创建一个完整的图而不是环形网络)。这样,您就不用自己计算网格应该在哪里出现,而是可以使用任何多项式时间的力定向算法来为您计算网格,因为它们将挂起在它们所属的两个集合之间。

到目前为止您尝试了什么,您遇到了什么问题?(如果这只是一个挑战,那么堆栈溢出是一个错误的地方。签出)如果这不是社区的挑战,那么这是一个家庭作业吗?(我为我的直率道歉,但我理解你的问题,这两个类别都不适合堆栈溢出。)@ChrisBritt这是一个工作应用程序-以这种方式显示的项目是业务实体,我正在尝试创建一种简单的以非键盘为中心的可视化方式。好的,您现在的显示是否有问题,您当前的程序输出的是什么,您想更改它?(如果是这样的话,您希望更改输出的具体程度如何)该图形似乎没有我可以看到的任何冗余。如果图形是您想要的输出,那么您当前正在尝试什么?(如果它与工作相关,我理解你不能发布你当前的来源,但你能尝试开发一个吗?@ChrisBritt-PPCG不是一个用于编程问题的网站。请不要在那里指导寻求帮助的用户;这是一个与网络其他部分截然不同的网站,“问题”不是真正的问题,而是挑战/竞赛。谢谢,你的友好邻里PPCG主持人:)@Doorknob冰 我知道这不是程序问题,而是挑战。然而,在任何编辑之前,他的问题最初是如何表述的,似乎他实际上提出了一个挑战,即开发“最佳”算法来完成他的任务,而不是提出关于完成任务的问题。由于我显然误解了他的意图,我向所有被冒犯的各方表示诚挚的歉意。