Kl算法及 1-优化 2-式划分java实现
Kl算法
KL 算法是 Kernighan 与 Lin 两个人在 1970 年设计一个图划分算法,是在寻找图 G 的一个极小成本的可许划分。KL 算法也是一种基于贪心算法的划分算法,通过交换两模块中的元素实现两模块间通信代价极小化。由于贪心算法会导致局部最优解,KL 算法在交换模块中元素时把所有可能交换后产生的代价增益都计算出来,从中选择一个最好的交换元素进行交换。这样在某种程度上降低了局部最优的风险,但会造成算法的时间复杂性。不过,KL 算法在很大程度上会给出全局最优解。实验表明 KL 算法给出的划分通信代价极小化是最好的。
【异构分布式嵌入式系统的优化设计方法,许巾一,陈仪香,李凯旋,2020 年 1 月】
λ-优化与 2 式划分
λ 优化:两个集合间的λ点互换是指交换这两个集合的λ元素。1-互换是将一个集合的单点与另一个集合的单点进行互换。一个配置称为 1-优化,若不再存在 1-互换导致划分成本的下降。
2 式划分:最简单划分问题是:给一个 2n 节点的图 G,其中每
个节点都拥有相同的尺寸,寻找一个极小成本划分将 2n 节点划分成都含有 n
个节点的两个集合。
算法具体详细逻辑可参考文章链接: Kernighan-Lin算法.
JAVA实现
import java.util.Arrays;
public class Kl
{
public static void main(String[] args)
{
double[][] matr=
{
{
0, 0, 0.5, 0, 0.5, 0, 0, 0},
{
0, 0, 0.5, 0.5, 0, 0, 0, 0},
{
0.5, 0.5, 0, 0.5, 1, 0.5, 0, 0},
{
0, 0.5, 0.5, 0, 0, 1, 0, 0},
{
0.5, 0, 1, 0, 0, 0.5, 1, 0},
{
0, 0, 0.5, 1, 0.5, 0, 0.5, 0.5},
{
0, 0, 0, 0, 1, 0.5, 0, 0.5},
{
0, 0, 0, 0, 0, 0.5, 0.5, 0},};//导入通信代价矩阵
char[] charA= {
'a','c','d','f'};//初始化分组1
char[] charB= {
'b','e','g','h'};//初始化分组2
System.out.print("初始2-划分集为:\n{");
for(char i:charA)
System.out.print(i+",");
System.out.print("}\n{");
for(char i:charB)
System.out.print(i+",");
System.out.println("}");
int[] A= new int[charA.length]