我正在尝试实施Kernighan-Lin算法来进行图形分区,以找到MAXIMIZED成本而不是最小化成本。我已经使用下面的伪代码实现了最小化版本,但是,我不确定如何修改它以便它找到最大化的值。 这是我用来实现最小化版本的伪代码。
- 功能Kernighan-Lin(G(V,E)):
- 确定节点的平衡初始分区为集合A和B
- A1:= A; B1:= B
- 做
- 计算A1中所有a的D值和B1中的b
- for(n:= 1 to | V | / 2)
- 从A1找到[i],从B1找到b [j],这样g [n] = D [a [i]] + D [b [j]] - 2 * c [a [i]] [b [j]]是最大的
- 将a [i]移动到B1,将b [j]移动到A1
- 从本次传递中的进一步考虑中移除[i]和b [j]
- 更新A1 = A1 \ a [i]和B1 = B1 \ b [j]
元素的D值- 结束
- 找到最大化g_max的k,g [1],...,g [k]
的总和- if(g_max> 0)然后
- 用b [1],b [2],...,b [k]
交换a [1],a [2],...,a [k]- 直到(g_max <= 0)
- 返回G(V,E)
醇>