Kernighan-Lin

Kernighan-Lin算法

算法伪代码

输入 待划分的大图G=(V,E)

输出 划分后子图A、B


1、将图G平均划分为A、B两个初始子图

do

​ 计算A、B子图中各个节点的D_values值

​ for i in range(|V|/2)

​ 从A和B两个子图中,分别找出a、b,使得gain=D_values[a] + D_values[b] - (2 * c_ab)最大

​ 将a、b移除,不参与后面过程;将a、b、gain存入gains[]

​ 更新A、B子图各个节点的D值

​ end for

​ 计算g_max以及使得g_max最大的k值

​ if g_max > 0 then

​ 交换A、B子图顶点

until 没有可以交换的顶点对之后算法结束,此时g_max小于0


数据使用空手道俱乐部社交关系图,共有34个节点和78条边
空手道俱乐部社交关系图

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kernighan-Lin是一种常用于解决图分割问题的算法。该算法最早由Brian W. Kernighan与S. Lin在1970年提出,至今仍被广泛应用于图论和集成电路设计领域。 Kernighan-Lin算法的目标是将一个图划分为两个子图,使得划分后两个子图的连接边数最小。这一目标可以被转化为最小割问题,即将图中的边分为两个集合,使得两个集合之间的边数最小。 算法的执行过程如下: 首先,随机选择一个初始划分,将顶点分为两个集合。 然后,计算划分的初始割,即计算两个集合之间的边数。 接下来,迭代执行以下步骤,直到不能再进行改进为止: 1. 计算每一个节点在当前划分下的边界增益值,即将节点从一个集合移动到另一个集合所能带来的割值的改变。 2. 选择边界增益值最大的节点,并将其从当前集合中移动到另一个集合,更新划分和割值。 3. 重复步骤1和2,直到找不到能够改进的节点。 最终,算法输出最优的划分结果。 Kernighan-Lin算法的优点在于简单且易于理解。它可以在较短的时间内得到较好的近似解,对于大规模的图分割问题具有较高的效率。此外,由于算法只涉及局部改动,因此往往能够得到局部最优解。然而,该算法的缺点也比较明显,它无法保证全局最优解且容易陷入局部最优解。 总之,Kernighan-Lin算法是一种常用的图分割算法,通过迭代地移动节点来优化划分结果。它在实际应用中具有较高的效率和易于实现的优点,但同时也存在一定的局限性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值