【问题标题】:Algorithm design to assign nodes to graphs将节点分配给图形的算法设计
【发布时间】:2025-11-27 13:35:02
【问题描述】:

我有一个图论(也与组合学有关)问题,如下图所示,想知道设计算法来解决它的最佳方法是什么。

给定 6 个节点的 4 个不同图(不同,我指的是不同的结构,例如 STAR、LINE、COMPLETE 等)和 24 个唯一对象,设计一个算法将这些对象分配给这 4 个图 4 次,从而使 4 个分配的图上重复邻居的数量最小化。例如,如果对象 A 和 B 在一个分配中的 4 个图中的 1 个上是邻居,那么在最好的情况下,A 和 B 将不再在其他 3 个作业。

显然,这种最小化的程度取决于给定的特定图结构。但我对这里的通用解决方案更感兴趣,因此给定任意 4 个图结构,算法的结果可以保证这种最小化。

欢迎任何解决此问题的建议/想法,并且一些伪代码可能足以说明设计。谢谢。

【问题讨论】:

  • 我可能遗漏了一些东西,但是... 24 个对象意味着您可以只为每个图中的每个节点分配一个不同的对象,从而导致任何给定的邻居不超过一次出现。
  • @Chowlett,是的,但这只是 1 个分配(即总共将 24 个对象分配给 4 x 6 个节点)。我在这里感兴趣的是,超过 4 个分配,重复相邻的数量被最小化。
  • 啊,我跟着。我很困惑,因为有 4 个图表 4 个作业,但这些数字实际上是不相关的。

标签: algorithm math graph-algorithm


【解决方案1】:

代表:

你有 24 个元素,我将这些元素命名为 A 到 X(24 个首字母)。 这些元素中的每一个都将在 4 个图表中的一个中占有一席之地。我将为从 1 到 24 的 4 个图的 24 个节点分配一个数字。

我会用一个24-uple =(xA1,xA2...,xA24)来识别A的位置,例如如果我想将A分配给8号节点,我会写(xa1,Xa2. .xa24) = (0,0,0,0,0,0,0,1,0,0...0),其中 1 位于位置 8。

我们可以说 A =(xa1,...xa24)

e1...e24 是单位向量 (1,0...0) 到 (0,0...1)

注意运算符'.':

  • A.e1=xa1
  • ...
  • X.e24=Xx24

这些符号对 A​​,...X 有一些限制:

Xii 在 {0,1} 和

Sum(Xai)=1 ... Sum(Xxi)=1

Sum(Xa1,xb1,...Xx1)=1 ... Sum(Xa24,Xb24,...Xx24)=1

因为一个元素只能分配给一个节点。

我将通过定义每个节点的邻居关系来定义一个图,假设节点 8 有邻居节点 7 和节点 10

检查 A 和 B 是否是节点 8 上的邻居,例如 I nedd:

A.e8=1 and B.e7 or B.e10 =1 那么我只需要 A.e8*(B.e7+B.e10)==1

在函数 isNeighborInGraphs(A,B) 中,我对每个节点进行测试,然后根据邻域得到一个或零。

符号:

  • 6 个节点的 4 个图,每个元素的位置由 1 到 24 的整数定义。 (第一个图表为 1 到 6,等等...)
  • e1...e24 是单位向量 (1,0,0...0) 到 (0,0...1)
  • 设 A、B ...X 为 N 个元素。

A=(0,0...,1,...,0)=(xa1,xa2...xa24)

B=...

...

X=(0,0...,1,...,0)

  • 图表说明:

IsNeigborInGraphs(A,B)=A.e1*B.e2+... //如果1和2是一个图中的邻居 例如

  • 系统状态:

L(A)=[B,B,C,E,G...] // 列表 A的邻居(可以重复)

actualise(L(A)):
for element in [B,X]
if IsNeigbotInGraphs(A,Element)
L(A).append(Element)
endIf
endfor
  • 目标函数

N(A)=len(L(A))+Sum(IsneigborInGraph(A,i),i in L(A))

...

N(X)= ...

算法描述

  1. 从初始位置开始 A=e1... X=e24
  2. 实现 L(A),L(B)... L(X)
  3. 解决这个问题(使用求解器,ampl 我猜这个例子会起作用,因为它是 非线性优化 问题):

目标函数

min(Sum(N(Z),Z=A to X)

约束:

Sum(Xai)=1 ... Sum(Xxi)=1

总和(Xa1,xb1,...Xx1)=1 ... Sum(Xa24,Xb24,... Xx24)=1

你会得到最好的解决方案

4.重复步骤 2 和 3,再重复 3 次。

【讨论】:

  • 感谢您的建议。但是您能否详细解释一下 e1、e2 等是什么意思,以及 N 个元素 A、B、...、X 及其表示 (xa1,xa2...xa24) 是什么意思?
  • @Skyork,我更新了帖子,我添加了段落representation
【解决方案2】:

如果所有四个图都是K_6,那么您可以做的最好的事情是选择 24 个对象的 4 个集合划分为 4 个集合,每个集合的基数为 6,这样任何两个集合的成对交集的基数最多为 2。您可以通过在集分区的 Hasse 图中选择最远的集分区来做到这一点,其中部分顺序由细化给出。一般情况要困难得多,但也许您仍然可以从解决方案的这种粗略近似开始,然后巧妙地在四个分配中为哪个顶点分配哪个对象。

【讨论】:

  • 我怀疑这还不是被接受的答案的唯一正当原因,更有可能是在“我的头上”部门而不是实际答案。如果你能想出一个(部分)这个想法的演示,我想你会(a)教我很多东西(b)在这里你的想法得到更多的赞赏。
【解决方案3】:

假设您不想循环所有组合并每次都计算总和并选择最低的,您可以实现最小问题(根据您的约束使用线性规划求解器,即 symplex 算法引擎或非线性求解器,在时间方面更难谈论)对变量(24)的约束取决于路径的形状。您还可以使用 LINGO/LINDO 等免费软件快速创建决策理论模型并测试其正确性(但您需要决策理论概念)

【讨论】:

    【解决方案4】:

    如果这与现实世界有任何关系,那么您不太可能绝对必须有一个真正最低限度的解决方案。接近最小值应该足够了,对吧?如果是这样,您可以反复随机分配 4 个作业并检查结果,直到时间用完或有足够好的解决方案或似乎已停止改进您的最佳解决方案。

    【讨论】: