R语言-关键节点问题-方案二
来源:互联网 发布:php代码开元 编辑:程序博客网 时间:2024/05/22 12:34
紧接方案一
由于方案一每次输出一个权重最高结点,然原始网络规模达100W,到假设一秒输出一个结点也约需要277小时,到中间阶段,有很多结点具有相同的权重。
因此做性能优化,每次输出权重最大的全部结点,预计可以吧时间缩短在3小时以内。
缺点是同属最大权重的结点间可能相关,导致结果不是特别精准,尤其随着权重变小,规模变大,尤其明显,所以设置当最大权重为5的时候停止输出。
实现代码:
library(dplyr)library(RMySQL) # 载入RMySQL包conn <- dbConnect(MySQL(),dbname = "NETWORKS",username = "root") # 建立数据库连接dbSendQuery(conn, "SET @@sql_mode=ANSI;") # 启动非严格模式dbSendQuery(conn, "SET NAMES GBK") # win7环境下如果汉字乱码,就运行这条命令res <- dbSendQuery(conn, "SELECT * FROM NODEWeight1")dat <- dbFetch(res, n=-1) #n=-1表示取所有数据,n=2表示取2条数据res1 <- dbSendQuery(conn, "SELECT * FROM NODEMap1")dat1 <- dbFetch(res1, n=-1) #n=-1表示取所有数据,n=2表示取2条数据output <- data.frame(nodeID = 0,Weight = 0,seq = 0) #建立空的输出序列output <- output[-1,] #清空数据node_cnt <- 0 #已经输出的结点数量for (i in 1:nrow(dat)) { print(Sys.time()) max_Weight <- max(dat$Weight) if (max_Weight < 5) #当最大权重小于5时,退出循环 { #打印剩余的结点 file.path <- paste("E:/PACT-上海/私の稿/比赛/大师赛-挖掘复杂网络中的关键节点/方案一/output_",last,".csv",sep="") write.table(dat,file.path, col.names=T,row.names = F, quote = F, sep=",") break } node_del <- dat$nodeID[dat$Weight==max_Weight] #权重最大的结点编号,有多个全部输出 node_rel <- data.frame(nodeID = 0,Weight = 0) #初始化 node_rel <- node_rel[-1,] #循环删除最大权重结点信息 for (m in 1:length(node_del)) { node_del_tmp <- node_del[m] node_rel <- rbind(node_rel,cbind(nodeID=dat1[which(dat1$nodeID1==node_del_tmp),2],Weight=0)) #追加node_del_tmp相连接的结点 dat1 <- dat1[-which(dat1$nodeID1==node_del_tmp),] #删除node_del_tmp的数据 dat1 <- dat1[-which(dat1$nodeID2==node_del_tmp),] #删除连接node_del_tmp的数据 dat <- dat[-which(dat$nodeID==node_del_tmp),] #删除node_del_tmp的数据 } node_rel <- summarise(group_by(node_rel, nodeID),count = n()) #group by #循环更新关联结点权重 for (n in 1:length(node_rel)) { x <- which(dat$nodeID==node_rel$nodeID[n]) dat$Weight[x] <- dat$Weight[x] -node_rel$count[n] #关联结点权重-1 效率不高 } output <- rbind(output, cbind(nodeID=node_del, Weight=max_Weight, seq=i) ) #输出本轮最大结点信息 node_cnt = node_cnt+m cat("Weight:",max_Weight,"\tnode number:",m,"\tnode count:",node_cnt,"\tnode release:",nrow(dat),"\n") #页面输出 if (max_Weight <= 35) #当权重小于35时才存储文件 { file.path <- paste("E:/PACT-上海/私の稿/比赛/大师赛-挖掘复杂网络中的关键节点/方案一/output_",max_Weight,".csv",sep="") write.table(output,file.path, col.names=T,row.names = F, quote = F, sep=",") } }
阅读全文
0 0
- R语言-关键节点问题-方案二
- R语言-关键节点问题-方案一
- R语言-关键节点问题-方案三
- R语言-关键节点问题-方案四-K-shell分解法
- R语言问题——连接数据库乱码问题解决方案
- R语言学习(二)
- R语言学习(二)
- R语言学习二
- R语言seed问题
- R 语言乱码问题
- 【R语言】问题处理
- R语言编码问题
- R语言for循环的替换方案
- R语言入门(二)
- R语言教程(二)
- R语言学习二 数据类型
- R 语言学习笔记(二)
- R语言笔记(二)
- 【Question 01】关于 intellij 启动 web 项目控制台乱码的问题
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
- selenium使用谷歌浏览器
- MATLAB运行速度与数组维数的关系
- 最短路径算法Dijkstra思路及java实现
- R语言-关键节点问题-方案二
- MATLAB相关作业
- 编程语言简史搞笑版
- linux中sed命令和awk命令的使用
- laravel 自定义函数库
- Qt学习11——进度条QProgressBar
- 降薪求职,到底该不该?
- AirSim-无人机坐标
- 分享一个vue写的购物车插件