模块度计算python代码_LPA算法C++实现及模块度计算
前言
这学期开始看社团检测的东西,了解了一些经典算法。比如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++实现及模块度计算相关推荐
- 皮尔逊相关系数的计算(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 ...
- 皮尔森相关性系数的计算python代码(一)
部分代码 from math import sqrt import numpy as np import pandas as pddef excel_one_line_to_list():def mu ...
- 皮尔森相关性系数的计算python代码(四)(热力图版)
部分代码: import numpy import pandas as pd import numpy as np from matplotlib.font_manager import FontPr ...
- 皮尔森相关性系数的计算python代码(三)
部分代码 import os import pandas as pd import numpy as np from scipy.stats import pearsonrdef Pearson(da ...
- 大学物理实验——密立根油滴实验数据计算Python代码
大学物理实验--密立根油滴实验数据计算Python代码 先手准备 import numpy as np 编写函数 def f(t,U):# 基本物理量准备rou = 981.0g = 9.80l = ...
- em算法python代码_EM 算法求解高斯混合模型python实现
注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...
- 终于从树堆里爬出来了——堆排序(基于二叉树)基本思想、步骤、复杂度及python代码,欢迎交流
欢迎关注,敬请点赞! 树堆逃生记 一.动图演示 二.思路分析 1. 相关概念 2. 基本思想 3. 步骤 [步骤一] 构造初始堆 [步骤二] 将堆顶元素与末尾元素进行交换,使末尾元素最大. [步骤三] ...
- knn算法python代码_KNN算法原理(python代码实现)
kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...
- python测试代码与模块_测量Python代码运行时间
Python 社区有句俗语: "python自己带着电池" ,别自己写计时框架. Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间 ...
最新文章
- centos6.5搭建lnmp环境
- job 做 ha 问题?
- 搜索引擎索引之索引基础
- mongodb 启动脚本和配置
- 窗台上晒了一本书,三个人问了三个问题
- Eclipse - Open Declaration
- 计算机语言学汉语言文学,汉语言文学本科通关宝典-《语言学概论》.pdf
- java毕业设计成品源码网站基于SpringBoot旅游信息管理系统
- 关于虚拟机IP更改问题教给大家一个必杀技
- 前端微信公众号开发,成功拿到了字节跳动、腾讯大厂offer
- 01 - Kali笔记_Linux_Kali环境熟悉
- sql 修改时间正价 2天_“熬夜3天,修改17遍,我终于写出了1篇稿费2万的稿子”...
- 【许晓笛】 EOS智能合约案例解析(1) 1
- 傅里叶变换的意义和理解(通俗易懂)[转]
- 应用MATLAB建模与仿真
- 为什么不想做产品经理
- 服装设计_服装设计网_服装设计图_服装款式图-POP服饰流行前线
- 4T移动硬盘 分区_Windows如何对硬盘进行分区?
- 如何在JMP中进行相关分析(Correlation Analysis) ?
- switchhosts的作用