SNAP复杂网络处理平台
SNAP复杂网络处理平台
简介:这是斯坦福提供的,用于处理复杂网络的平台库,核心是使用C++编写的,效率相对很高,提供了C++和Python的接口,源代码可以在snap网站下载,也可以在github上下载。
C++
编译,安装与测试
需要安装两个相关的软件,用于绘图,Gnuplot
和Graphviz
这两个的安装都很简单,在ubuntu上只需要一行安装命令即可,具体的可百度。
在ubuntu环境下,在snap根目录下执行make all
,执行完成之后,进入到example
文件夹下,可以使用已经提供的接口,例如,使用下列命令生成一个小世界网络。
cd examples/graphgen
./graphgen -g:w -n:1000 -k:4 -p:0.1 -o:smallworld.txt
生成指定度分布的幂律图
查看文件,发现只需要提供nodes和exponent即可生成,速度极快,可能采用的是文章《Efficient and Simple Generation of Random Simple Connected Graphs with Prescribed Degree Sequence》类似的方法,使用命令为:
./graphgen -g:p -n:100000 -p:1.5 -o:t1.5.txt
-n
表示nodes数
-p
表示exponent(指数)
-o
表示输出文件
查看源码,在examples
中的graphgen.cpp
中,可以使用已经提供的生成图方式。生成幂律图对应以下函数。
G = TSnap::GenRndPowerLaw(N, P, true);
经测试,生成的图符合分布!
附graphgen.cpp文件源码
#include "stdafx.h"int main(int argc, char* argv[]) {Env = TEnv(argc, argv, TNotify::StdNotify);Env.PrepArgs(TStr::Fmt("Graph generators. build: %s, %s. Time: %s", __TIME__, __DATE__, TExeTm::GetCurTm()));TExeTm ExeTm;Tryconst TStr OutFNm = Env.GetIfArgPrefixStr("-o:", "output.txt", "Output graph filename");const TStr Plot = Env.GetIfArgPrefixStr("-g:", "e", "Which generator to use:""\n\tf: Complete graph. Required parameters: n (number of nodes)""\n\ts: Star graph. Required parameters: n (number of nodes)""\n\t2: 2D Grid. Required parameters: n (number of rows), m (number of columns)""\n\te: Erdos-Renyi (G_nm). Required parameters: n (number of nodes), m (number of edges)""\n\tk: Random k-regular graph. Required parameters: n (number of nodes), k (degree of every node)""\n\tb: Albert-Barabasi Preferential Attachment. Required parameters: n (number of nodes), k (edges created by each new node)""\n\tp: Random Power-Law graph. Required parameters: n (number of nodes), p (power-law degree exponent)""\n\tc: Copying model by Kleinberg et al. Required parameters: n (number of nodes), p (copying probability Beta)""\n\tw: Small-world model. Required parameters: n (number of nodes), k (each node is connected to k nearest neighbors in ring topology), p (rewiring probability)\n");const int N = Env.GetIfArgPrefixInt("-n:", 1000, "Number of nodes");const int M = Env.GetIfArgPrefixInt("-m:", 5000, "Number of edges");const double P = Env.GetIfArgPrefixFlt("-p:", 0.1, "Probability/Degree-exponent");const int K = Env.GetIfArgPrefixInt("-k:", 3, "Degree");if (Env.IsEndOfRun()) { return 0; }TExeTm ExeTm;TInt::Rnd.PutSeed(0); // initialize random seedprintf("Generating...\n");PUNGraph G;TStr DescStr;if (Plot == "f") {G = TSnap::GenFull<PUNGraph>(N);DescStr = TStr::Fmt("Undirected complete graph.");} elseif (Plot == "s") {G = TSnap::GenStar<PUNGraph>(N, false);DescStr = TStr::Fmt("Undirected star graph (1 center node connected to all other nodes).");} elseif (Plot == "2") {G = TSnap::GenGrid<PUNGraph>(N, M, false);DescStr = TStr::Fmt("Undirected 2D grid of %d rows and %d columns.", N, M);} elseif (Plot == "e") {G = TSnap::GenRndGnm<PUNGraph>(N, M, false);DescStr = TStr::Fmt("Undirected Erdos-Renyi random graph.");} elseif (Plot == "k") {G = TSnap::GenRndDegK(N, K);DescStr = TStr::Fmt("Undirected k-regular random graph (every node has degree K).");} elseif (Plot == "b") {G = TSnap::GenPrefAttach(N, K);DescStr = TStr::Fmt("Undirected Albert-Barabasi Preferential Attachment graph (each new node creades k preferentially attached edges).");} elseif (Plot == "p") {G = TSnap::GenRndPowerLaw(N, P, true);DescStr = TStr::Fmt("Random Graph with Power-Law degree distribution with exponent P.");} elseif (Plot == "c") {G = TSnap::ConvertGraph<PUNGraph>(TSnap::GenCopyModel(N, P));DescStr = TStr::Fmt("Copying model by Kleinberg et al. Node u comes, selects a random v, and with prob P it links to v, with 1-P links u links to neighbor of v. Power-law degree slope is 1/(1-P).");} elseif (Plot == "w") {G = TSnap::GenSmallWorld(N, K, P);DescStr = TStr::Fmt("Watts-Strogatz Small-world model. Every node links to K other nodes.");}printf("done.\n");TSnap::SaveEdgeList(G, OutFNm, DescStr);Catchprintf("\nrun time: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr());return 0;
}
Python
与C++仅接口的调用形式不同,核心实现使用的是C++
重点总结
SNAP这个平台一直以来没有发现,这应该是非常优秀的一个平台,速度极快,有时间可以好好研究一下。
SNAP复杂网络处理平台相关推荐
- cop2000计算机组成原理,COP2000计算机组成原理-南昌大学网络教学平台.doc
COP2000计算机组成原理-南昌大学网络教学平台.doc 伟福COP2000型实验仪 计算机组织与结构 实验指导书 南昌大学计算机科学与技术系 二OO七年八月 目 录 性能特点 1.1 硬件先进特点 ...
- 网络推广平台浅析通常网站关键词优化密度该如何把控呢?
在网站优化的过程中,网站关键词密度是非常重要的一点,控制的好就会给网站带来更多的好处,控制的不好很可能会影响网站发展,那么对于网站关键的密度控制要从哪几方面下手呢?下面网络推广平台就带大家一起来了解一 ...
- 网络推广平台详细的介绍为什么要重视内容优化?
网络推广平台表示,都说现在优化是"内容为王"的时代,可见,内容对于网站优化排名提升来说有多重要,但对于一些优化小白来说,觉得内容更新很枯燥见不到很真实的效果,但其实做好内容优化,能 ...
- 莫慌!网络推广平台更新网站SEO优化中,被K降权怎么办?
网站在优化进行中,网络推广平台指出难免会遇到被K的时候,导致网站整体流量大幅下降,排名也骤降,让很多优化专员都一筹莫展,甚至慌了神不知道该怎么办?下面网络推广平台就教大家如何帮助网站快速恢复权重和排名 ...
- SOC(网络安全管理平台)
SOC平台,网络安全管理平台. 提供集中.统一.可视化的安全信息管理,通过实时采集各种安全信息,动态进行安全信息关联分析与风险评估,实现安全事件的快速跟踪.定位和应急响应. 从监控.审计.风险和运维四 ...
- 如何取回服务器上的文件网页设计,毕业设计(论文)-基于内容中心网络开发平台的文件分享精选.docx...
毕业设计(论文)-基于内容中心网络开发平台的文件分享精选 基于内容中心网络开发平台的文件分享摘要当前的网络环境与网络诞生之初时相比已经发生变化,信息更多被用于分享和合作,而非仅仅从一地传送至另一地,基 ...
- 网络文学平台如何借力智能推荐,实现阅读体验全面提升?
2012 年今日头条上线,开启了内容媒体行业智能推荐的篇章.自此之后,大批资讯产品先后启动"智能推荐",打造千人千面的阅读体验,随后扩展到短视频行业,衍生出了快手.抖音两大国民级娱 ...
- linux下构建Zabbix网络监控平台
linux下构建Zabbix网络监控平台 由于图片过多,本人不想一张一张上传,请下载我的详细文章: linux下构建zabbix网络监控平台[技术文档](河南-清小小)-下载地址: http://do ...
- 河南科技大学c语言网络教学平台,计算机基础教学部
主任 薛冰冰 副教授 副主任 俞卫华 计算机基础教学部隶属于河南科技大学电子信息工程学院,承担着全校各个专业的计算机公共基础课的教学任务.计算机基础教学部经历了30年的发展,先后开设过<BASI ...
最新文章
- 白话Elasticsearch50-深入聚合数据分析之doc values机制
- mysql 数据迁移_MySQL海量数据迁移
- linux修改某个用户的数组,linux-shell编程1:变量和数组
- aptitude 命令_C-命令行参数Aptitude问题与解答
- 解决 Plugin with id 'com.github.dcendents.android-maven' not found.
- linux 扩根目录,linux根目录扩容
- ubuntu-Linux系统读取USB摄像头数据(uvc)
- 金仓数据库KingbaseES客户端连接问题
- 蒙氏素材1-1000珠链标签蒙特梭利教具
- excel打不开_excel表格中超链接打不开的解决办法
- 【小牛分享】人员组织架构图 - 为纪念2013即将结束而分享
- UVA-12304 Race(递推)
- C# OpenCvSharp 连通区域最小衔接矩形+最小标注信息(minx,miny,Width,Height)
- 密码学实验_7_S盒创建(python 实现)
- 威斯康星麦迪逊计算机专业排名,恭喜L同学获得威斯康星大学麦迪逊分校计算机专业(专业排名TOP10)EA录取...
- 06-08 无人机怎么拍摄VR全境图?
- 曲速未来|区块链可扩展性:第一层解决方案是否保持密钥?
- Android 系统背光设置
- 爬取起点中文网小说介绍信息
- 你必须理解的三大软件原则1_DRY