Lin-Kernighan启发式算法的具体过程及思想是什么?

关注者
35
被浏览
49,791

3 个回答

毕业论文刚好有涉及到Kernighan-Lin算法~被导师吐槽【现在还用1970s的算法】

嘤嘤嘤 (๑¯ิε ¯ิ๑)

--------------------------------------------------------------------------------------

解决图分割问题最简单的办法就是将复杂网络一分为二,形成两个节点数量相等的集合。由此,Lin和Kernighan于1970年提出了试探性优化的贪婪算法Lin-Kernighan[1]。

(I)算法思想

Lin-Kernighan算法可用于复杂网络聚类,其优化目标为:使社区间连接数与社区内连接数之间的差值最小化。其候选解搜索策略为:将节点从自身社区移动到其他社区中,或是交换不同社区之间的节点。Lin-Kernighan算法在每次迭代的过程中,对候选解进行生成、评价与选择,只接受最佳的而拒绝全部稍差的候选解,直至由当前解出发无法搜寻更优的候选解。这就导致Lin-Kernighan算法找到的仅为局部最优解。


(II) 算法过程描述

步骤流程图如图:



(III) 时间复杂度分析

Lin-Kernighan的时间复杂度为O(t*n*n),n为节点数,t为迭代次数。


(IV) 算法适用范围

Lin-Kernighan是初始解敏感的算法,即产生一个较好初始社区结构的条件是事先得知社区的个数或者平均规模。若初始解较差,则会造成收敛速度缓慢、最终解较差。由于现实世界中的社区无法事先预知大小,故Lin-Kernighan算法的实用价值不大。

-------------------------------------------

参考文献

[1] B W.Kernighan, S.Lin. An efficient heuristic procedure for partitioning graphs. Bell System Technical Journal, 1970, 49(2): 291-307.

Kernighan-Lin算法是一种试探优化法。它是一种利用贪婪算法将复杂网络划分为两个社团的二分法。该算法引入增益值P,并将P定义两个社团内部的边数减去连接两个社团之间的边数,然后再寻找使 P值最大的划分方法。整个算法可描述如下:

  首先,将网络中的节点随机地划分为已知大小的两个社团。

在此基础上,考虑所有可能的节点对,其中每个节点对的节点分别来自两个社团。对每个节点对,计算如果交换这两个节点可能得到的P的增益ΔP=P交换后-P交换前。

然后交换最大的ΔP对应的节点对,同时记录交换以后的 P值。规定每个节点只能交换一次。

重复这个交换过程,直到某个社团内所有的节点都被交换一次为止。

需要注意的是,在节点对交换的过程中,P值并不一定是单调增加的。不过,即使某一步的交换会使P值有所下降,仍然可能在其后的步骤中出现一个更大的P值。当交换完毕后,便找到上述交换过程中所记录的最大的P值。这时对应的社团结构就认为是该网络实际的社团结构。

另外,建议去看他们的原始论文,这样对于理解KL算法更有帮助。