java – 如何将加权循环图划分为n个图,尽可能少地断开连接
作者:互联网
问题的背景:
在我女儿学校的每一个新年开始时,校长总是谈到将孩子分成几个班级是多么困难,因为他们对于他们想要在课堂上的人有很多要求,幼儿园也有一些建议.
在我看来,这只是一个加权的循环图,其中孩子作为节点,请求/推荐作为需要拆分的边.
问题:
想象一下,如果你愿意的话,带有周期和加权边的图可能会断开连接.
我想将该图划分为n个较小的图,每个图中至少有s个节点,每个图中最多有t个节点,同时尽可能少地打破边.
我认为NP很难解决,所以它可能真的是一个优化问题.
>这个图算法有名字吗?
>有没有可以帮我解决这个问题的java库?
谢谢,
加斯帕
解决方法:
图的组件也是图.去年我不得不编写图像拼接代码,它使用有向图数据结构,有64000像素,并且它一点也不慢.
生成的图像是最后一个,代码在这里github.
那么,在您的情况下,您可以创建图形数据结构.创建一个Linkedlist的一维数组,并在该链接列表中保存与三个参数连接的数据结构,第一个是您的第一个学生,第二个是第一个连接的学生,第三个是表示它们之间的强度的数字. :示例学生1连接到学生5,其强度== 100然后您创建一个新节点已连接c =新连接(1,5,100);并将其添加到数组的第一个条目,如下所示:array [i] .add(c)其中i == 1.
搜索:哪个学生连接到哪个学生:当你试图找到哪个学生连接到哪个学生时,那么你就可以简单地使用以下数组:
`for(Connected c : array[i].get();
int firstStudent = c.getFirst()
int secondStudent = c.getSecond()
int strength = c.getStrength();`
您的链表应该有一个迭代器,以便您可以进行遍历.
标签:java,optimization,graph-algorithm 来源: https://codeday.me/bug/20190710/1426680.html