注意:之前对于公式用LATEX编写,复制的图片,不知怎么就显示不出,凡是框框的地方,用文字表示了公式。

    
    Kernighan-Lin算法是一种启发式算法,基于贪婪原理将网络划分为两个大小已知的社团。

    所要解决的问题描述:给定一个无向带权图G=(V,E,C),其中V为一含有2n个节点的集合,E为边集合,C为2n*2n且对称的权重矩阵(Cij表示节点i和节点j直接边的权重,Cii=0)。将图G划分为两个社区,原节点集合V分为两个大小相同的集合A和B(各含n个节点),并且使得社区之间连接的权重 T=求和Cab 为最小值(a是A中的任意节点,b是B中的任意节点)。
    为了解决这个问题,先给出如下定义:
    节点a的外部权重:Ea=求和Cax(x为B中的节点)。节点b的外部权重类似。
    节点a的内部权重:Ia=求和Cax(x为A中的节点)。节点b的内部权重类似。、
    令节点z的外部权重与内部权重之差为:Dz=Ez-Iz
    当A中的节点a与B中的节点b交换后,社区间连接的总权重减少量为(此处为了让该值取正,所以定义为增益gain):gain = Told - Tnew = (W+Ea+Eb-Cab) - (W+Ia+Ib+Cab) = Da+Db-2Cab
    算法描述:(参照原版论文,与wikipedia的算法略有不同,觉得wikipedia的不对)
输入:一个待划分的图G=(V,E,C)
输出:划分A和B
1. 给定一个初始划分A和B
2. do
3.     A(1)=A; B(1)=B;
4.     对A(1)和B(1)中的每一个节点计算其D值;
5.     for (p=1 to |V|/2)
6.         A(p)中选出ai,Bp中选出和bj,使得gain(p)=Dai+Dbj-2Caibj为最大值;
7.         ap'=ai;bp'=bj;A(p+1)=A(p)-ap';B(p+1)=B(p)-bp';
8.         p=p+1;
9.         更新A(p)和B(p)中每个节点的D值;
10.    end for
11.    选择k使得 G=求和gain(i) 为最大值(k为gain(i)为正值的个数);
12.    if (G>0)
13.        把A中的a1',a2',...,ak'与B中的b1',b2',...,bk'进行交换;
14.until (G<=0)
15.return A,B
    文章分析其算法时间复杂度n^2至(n^2)*logn之间。
    之后,文章对算法性能又做了一定的改进,以提高其精度。大概思想是:采用类似分治法(不是很确定),将原解决方案略微转换,使其执行每一轮的时间增加(从t到t'),同时增加其找到最佳划分的概率(从p到p')。那么若原方案执行了k轮,那么原方案找到最佳划分的概率就是1-(1-p)^k,而新方案的成功率就是
1-(1-p)^(kt/t')。那么只要是的后者大于前者即可。
    以上解决的是同规模划分,A和B规模大小相等的。那么若要将n个节点划分为两个规模不等的社区,分别含有n1和n2个节点(n1<n2,n1+n2=n),文章采用如下方法:增加2*n2-n个虚假节点(与原图中节点没有任何连接),那么总结点数就为2*n2个节点,然后用上述方法划分成2个n2规模的社区,再去掉那些虚假节点,那么就得到n1规模和n2规模大小的两个社区了。
    另外,对于将网络划分为多个(大于2)社区的情况(kn个节点,划分成k个社区),采用如下两种方法:(1)将kn个节点一直等规模划分,貌似这样对k有要求;
(2)将kn个节点划分为n个节点和(k-1)n个节点的两个社区,之后对(k-1)n个节点的社区再划分为n个节点和(k-2)n个节点的社区,如此往复下去。
参考文献:
1.维基百科对Kernighan-Lin算法的解释:http://en.wikipedia.org/wiki/Kernighan–Lin_algorithm
2.Karypis G, Kumar V. Multilevel< i> k</i>-way Partitioning Scheme for Irregular Graphs[J]. Journal of Parallel and Distributed computing, 1998, 48(1): 96-129.
声明:后半部分,由于文章阅读较浅显,所以可能含有一些错误,希望 大家指出。

Kernighan-Lin算法相关推荐

  1. 分治法的基本思想与例子解析

        分治法的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之. 凡治众如治寡,分数是也.--孙子兵法 1.基本思想 (1) 将求解的较大规模的问题分割成k ...

  2. 计算机网络二分法划分网络,三种经典复杂网络社区结构划分算法研究_GN算法

    论文导读::复杂网络是复杂系统的高度抽象.即社区结构特性[3].算法是一种试探优化法[4].算法. 关键词:复杂网络,社区结构,Laplace图谱,Kernighan-Lin算法,GN算法 1引言 现 ...

  3. LK算法、LKH算法介绍及Python实现

    目录 0. 前言 1. 基本LK算法 1.1 基本步骤 1.2 相关知识点 1.3 算法的伪代码 1.4 算法需要满足的准则 1. 准则一(顺序交换准则) 2. 准则二(可行性准则) 3. 准则三(正 ...

  4. 【计算机科学】【2013.08】无人机路径规划问题的算法研究

    本文为美国德克萨斯农工大学(作者:JIANGLEI QIN)的硕士论文,共44页. 在过去的十年里,无人驾驶车辆(UVs)在军事和民用领域得到了广泛的应用.无人车路径规划在有效利用现有资源(如无人车和 ...

  5. raymarching算法

    raymarching 算法 raymarching 算法思想很直观:首先有一个3D的体纹理,然后从相机发射n条射线,射线有一个采样的步长.当射线处在体纹理中时,每个步长采一次样,获取纹理值(实际上表 ...

  6. 前景检测算法_3(GMM)

    摘要 本文通过opencv来实现一种前景检测算法--GMM,算法采用的思想来自论文[1][2][4].在进行前景检测前,先对背景进行训练,对图像中每个背景采用一个混合高斯模型进行模拟,每个背景的混合高 ...

  7. 8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020

    出品 | AI科技大本营(ID:rgznai100) 在CVPR 2020上,商汤研究院链接与编译团队.高性能计算团队和北航刘祥龙老师团队合作提出了用于加速卷积神经网络训练过程的INT8训练技术.该工 ...

  8. AAAI 2020论文解读:商汤科技发布新视频语义分割和光流联合学习算法

    来源 | Every Frame Counts: Joint Learning of Video Segmentation and Optical Flow 编辑 | Carol 出品 | AI科技大 ...

  9. 收藏 | 一文总结70篇论文,帮你透彻理解神经网络的剪枝算法

    来源:DeepHub IMBA本文约9500字,建议阅读10+分钟 本文为你详细介绍神经网络剪枝结构.剪枝标准和剪枝方法. 无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的 ...

  10. CIKM 2020 | 如何更为合适地评测推荐算法? Top-N物品推荐算法评测设置回顾

    来源:RUC AI Box 本文约5200字,建议阅读10分钟 本文介绍了对于不同的实验设置对评价top-N商品推荐算法的影响,并设计了一个经验性的大规模实验. 1 引言 近十年里,top-N商品推荐 ...

最新文章

  1. java培训基础知识都学哪些
  2. eclipse+ADT 进行android应用签名打包详解
  3. 白话详细解读(七)----- CBAM:Convolutional Block Attention Module
  4. python一维数组定义,python一维数组保存
  5. linux的常用操作——gcc
  6. 微信第三方平台-授权流程经验分享
  7. docker daemon 配置文件
  8. MyBatis学习总结(20)——MyBatis完全使用指南
  9. Redis 数据类型及应用场景
  10. work summary(4)
  11. NYOJ -11--奇偶数分离
  12. python搭建http服务_Python搭建HTTP服务过程图解
  13. 天翼云从业认证(4.3)视频监控云存储解决方案
  14. java核心技术卷2 第9版 pdf,Java核心技术 卷II 高级特性(原书第9版) PDF
  15. PDF417打印后扫描不出来(记录)
  16. 用特征根判别法判断AR模型的平稳性,再用随机模拟的方法来验证以及做自相关分析
  17. iphone6s读写速度测试软件,iPhone6S/7/8运行iOS13速度测试:结果有点失望
  18. mysql创建table
  19. IP地址中的网络地址和主机地址分别是什么意思
  20. Unity 【Content Size Fitter】- 聊天气泡自动适配Text文本框大小

热门文章

  1. 国庆去哪里玩比较好?
  2. 【科普】WebSocket
  3. 英语四级bt总结法(必过)
  4. Python Selenium+Requests爬虫[双线程]--今日头条图片爬取【亲测能行!!!】
  5. spark-用户画像demo
  6. kali2020版本 中文输入法google拼音输入
  7. 出生时辰转天干地支 c语言算法,生辰八字天干地支转换
  8. 项目中的体会-老师布置作业界面
  9. 小程序制作工具的选择
  10. html 载入服务器字体,css调用服务器端字体示例代码