依旧是无向图关键节点问题,此方案使用一次性计算权重,排序输出,胜在运算快,避免循环。
权重计算公式:节点权重=节点度+直接关联节点的度
权重计算比较粗糙,仅为试水,并为后面的方案做铺垫。
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 ORDER BY nodeID")
dat <- dbFetch(res, n=-1) #n=-1表示取所有数据,n=2表示取2条数据
res1 <- dbSendQuery(conn, "SELECT * FROM NODEMap1 ORDER BY nodeID2")
dat1 <- dbFetch(res1, n=-1) #n=-1表示取所有数据,n=2表示取2条数据
#关联数据
C <- merge(dat1, dat, by.x = "nodeID2", by.y = "nodeID",all.x=TRUE)[,c(2,1,4)]
#group by
planes <- group_by(C, nodeID1)
delay <- summarise(planes,
Weight1 = n(), #第一层度数
Weight2 = sum(Weight), #第二层度数
Weight3 = n()+sum(Weight)) #第一层+第二层度数
#数据回插至数据库
conn <- dbConnect(MySQL(),dbname = "NETWORKS",username = "root") # 建立数据库连接
dbSendQuery(conn, "SET @@sql_mode=ANSI;") # 启动非严格模式
dbSendQuery(conn, "SET NAMES GBK") # win7环境下如果汉字乱码,就运行这条命令
dbWriteTable(conn,"NODEWeight1_1",delay,row.names=F) # 如果表名用的变量,怎不需要“”,否则需要用“”指明
dbDisconnect(conn)
#输出排序结果
#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_1 order by Weight3 desc")
dat <- dbFetch(res, n=-1) #n=-1表示取所有数据,n=2表示取2条数据
result <- matrix(dat$nodeID1,nr=500)
result <- t(result)
file.path <- paste("E:/.../方案三/output_20170705_1.csv",sep="")
write.table(result,file.path, col.names=T,row.names = F, quote = F, sep=",")