前言

这学期开始看社团检测的东西,了解了一些经典算法。比如GN算法,BGLL算法(又叫Louvain,

因为该算法是作者在Louvain大学时提出的),LPA算法,等等。

我先看的LPA(毕竟算法思想最简单,hhh,怪我太笨了),又看了Louvain。

Louvain算法的代码,作者在文章里给了网址,是C++写的,我下到本地运行并认真研究了一下,写的真挺好的。

然后昨天突发奇想,干脆自己仿照Louvain的代码风格,用C++把LPA实现一下,

因为在网上只看到过Python和Java实现的LPA算法,还没见过C++实现的。

然后昨天把框架写好,今天把细节补全,最后又从Louvain的代码里搬来了模块度的计算部分。

最后调试好,就OK啦。

1.LPA基本思想

给每一个节点添加标签,初始时可以以各自的nodeid作为标签,标签传播过程中将一个节点的邻居节点的标签中

数量最多的标签作为该节点的标签。标签即代表所属社区。

1 初始时,给每个节点一个标签,通常以其id作为初始标签。

2 每个节点使用其邻居节点的标签中数量最多的标签更新自身标签。

3 反复执行步骤2,直到满足终止条件。(至于终止条件是什么,这个可以自己设置,

比如我就直接设定迭代5次结束,也可以根据每次迭代模块度的增加程度来设定,

网上有说直到每个节点的标签不再变化为止,其实这比较难判定,

而且据研究,大部分网络经过5次迭代,其95%的节点标签都不再变化,

后面每次迭代虽部分标签还在变化,但相比来说性价比不高了)

LPA算法的优点是收敛周期很短,而且不需要任何先验知识。时间复杂度接近线性:对节点分配标签为O(n),

每次迭代需要遍历所有的边两次,也就是O(2m),所以时间复杂度为O(n+2m),其中n为节点数,m为边数。

同步更新和异步更新还没搞懂,回头看看再说。

缺点

1 由于迭代过程中可能会出现随机选择的情况,所以LPA算法具有不稳定性,也就是同一个网络每次执行的结果可能都不一样。

2 可能出现巨型社区。

算法改进思路

目前还没

2.数据集

dolphins

3.代码

代码都在我的github上, 下面仅列出main函数代码.

#include "lpa.h"

using namespace std;

void display_time(const char *str){

time_t rawtime;

time ( &rawtime );

cerr << str << " : " << ctime (&rawtime);

}

int main(int argc, char **argv){

srand(time(NULL));

//parse_args(argc, argv);

if(argc != 2){

cerr << "argc not 2" << endl;

}

string filename = argv[1];

cout << "filename = " << filename << endl;

time_t time_begin, time_end;

time(&time_begin);

display_time("start");

//sleep(3);

LPA lpa(filename);

cout << "初始模块度 = " << lpa.modularity() << endl;

for(int i = 0; i < 5; i++){

lpa.labeled();

lpa.display();

}

display_time("end");

time(&time_end);

return 0;

}

4.运行结果

模块度计算python代码_LPA算法C++实现及模块度计算相关推荐

  1. 皮尔逊相关系数的计算(python代码版)

    皮尔逊相关系数的计算(python代码版) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 fro ...

  2. 皮尔森相关性系数的计算python代码(一)

    部分代码 from math import sqrt import numpy as np import pandas as pddef excel_one_line_to_list():def mu ...

  3. 皮尔森相关性系数的计算python代码(四)(热力图版)

    部分代码: import numpy import pandas as pd import numpy as np from matplotlib.font_manager import FontPr ...

  4. 皮尔森相关性系数的计算python代码(三)

    部分代码 import os import pandas as pd import numpy as np from scipy.stats import pearsonrdef Pearson(da ...

  5. 大学物理实验——密立根油滴实验数据计算Python代码

    大学物理实验--密立根油滴实验数据计算Python代码 先手准备 import numpy as np 编写函数 def f(t,U):# 基本物理量准备rou = 981.0g = 9.80l = ...

  6. em算法python代码_EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

  7. 终于从树堆里爬出来了——堆排序(基于二叉树)基本思想、步骤、复杂度及python代码,欢迎交流

    欢迎关注,敬请点赞! 树堆逃生记 一.动图演示 二.思路分析 1. 相关概念 2. 基本思想 3. 步骤 [步骤一] 构造初始堆 [步骤二] 将堆顶元素与末尾元素进行交换,使末尾元素最大. [步骤三] ...

  8. knn算法python代码_KNN算法原理(python代码实现)

    kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...

  9. python测试代码与模块_测量Python代码运行时间

    Python 社区有句俗语: "python自己带着电池" ,别自己写计时框架. Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间 ...

最新文章

  1. centos6.5搭建lnmp环境
  2. job 做 ha 问题?
  3. 搜索引擎索引之索引基础
  4. mongodb 启动脚本和配置
  5. 窗台上晒了一本书,三个人问了三个问题
  6. Eclipse - Open Declaration
  7. 计算机语言学汉语言文学,汉语言文学本科通关宝典-《语言学概论》.pdf
  8. java毕业设计成品源码网站基于SpringBoot旅游信息管理系统
  9. 关于虚拟机IP更改问题教给大家一个必杀技
  10. 前端微信公众号开发,成功拿到了字节跳动、腾讯大厂offer
  11. 01 - Kali笔记_Linux_Kali环境熟悉
  12. sql 修改时间正价 2天_“熬夜3天,修改17遍,我终于写出了1篇稿费2万的稿子”...
  13. 【许晓笛】 EOS智能合约案例解析(1) 1
  14. 傅里叶变换的意义和理解(通俗易懂)[转]
  15. 应用MATLAB建模与仿真
  16. 为什么不想做产品经理
  17. 服装设计_服装设计网_服装设计图_服装款式图-POP服饰流行前线
  18. 4T移动硬盘 分区_Windows如何对硬盘进行分区?
  19. 如何在JMP中进行相关分析(Correlation Analysis) ?
  20. switchhosts的作用

热门文章

  1. Ubuntu 账户管理
  2. OJ练习01(C语言):jlh吃水果
  3. import.meta.env.PROD部分错觉
  4. 这些可视化大屏逼格,秒杀99%的页面……
  5. JData大数据竞赛18年赛题-如期而至-用户购买时间预测
  6. 携程开启「3 天打鱼 2 天晒网」的办公模式
  7. win10切换桌面_win10系统如何使用快捷键切换桌面
  8. matlab三轴陀螺标定,一种mems三轴陀螺仪误差标定方法
  9. h264码流及h265码流结构分析,NAL头类型分析
  10. R语言ggplot2 (一):ggplot2包安装和初始作图