K-shell分解法,O(N)
step 1 查找网络中所有度为1的节点,并将这些节点及连接的边去掉。
step 2 经过步骤1后,网络中可能会出现新的度为1的节点,循环执行步骤1,直至所剩的网络中没有度为1的节点为止。
step 3 去掉网络中剩余度为2的节点,一次类推,重复循环执行。
step 4 重复以上操作,直至网络中没有节点为止。
代码实现:
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 nodeID,Weight FROM NODEWeight1 ORDER BY nodeID")
dat <- dbFetch(res, n=-1) #n=-1表示取所有数据,n=2表示取2条数据
res1 <- dbSendQuery(conn, "SELECT nodeID1,nodeID2 FROM NODEMap1 ORDER BY nodeID2")
dat1 <- dbFetch(res1, n=-1) #n=-1表示取所有数据,n=2表示取2条数据
dbDisconnect(conn)
output <- data.frame(nodeID = 0,seq = 0