用R語言igraph庫實現表自動關聯

2021-08-01 16:26:37 字數 1727 閱讀 7394

資料庫和圖演算法結合的乙個問題:

自動表關聯的問題:乙個資料庫(圖),有n個表(圖的頂點),表之間通過外來鍵建立關聯(圖的邊)。

已知使用者的乙個查詢必然涉及其中m個表,但程式不知道這幾個表通過什麼外來鍵建立起join關係。

要求:讓程式自動找出用哪幾個表做join可查出結果,並列出表的join順序(不用最優)。

抽象後的問題:n個頂點的圖中找出經過m個頂點的最小連通圖

演算法:1. 圖是頂點數為n的無向圖。

2. 得到必經頂點集m中長度為2的全組合cm。

3. 找出全組合cm中每兩個頂點的最短距離minp。

4. 選擇路徑最短的兩個頂點minminp,並且這兩個頂點作為訪問過的頂點集visitedtbls。m中visitedtbls之外的集合為unvisitedtbls

5. 以visitedtbls中所有頂點為源點,以unvisitedtbls中所有頂點為目標頂點構造兩點最短路徑,並選擇這些最短路徑中的最短路徑,然後去掉這條路徑中的源點,把這條路徑中其它頂點加入visitedtbls

6. 重複5直到unvisitedtbls為空

7. 如果visitedtbls集合包含m,則正常。否則m中表存在不連通的情況,提醒使用者。

用igraph r實現演算法:

--------------

library(igraph)

#用資料庫中所有表構造圖

g = make_graph(c("student", "class", "student", "scourse", "student", "exam", "teacher", "tcourse", "class", "tcourse", "tcourse", "scourse", "tcourse", "exam"), directed = false)

#使用者需要的表

tbls

#所有路徑

all_******_paths(g, "student", "tcourse")

candidates

candpath

shortest

shortp=1

visitedtbls

unvisitedtbls

for (i in 0:(dim(candidates)[2] - 1))

for(i in 1:length(candpath))

}#開始迴圈

visitedtbls

unvisitedtbls

run

while(run)  }}

for(i in 1:length(candpath))

}visitedtbls

unvisitedtbls

if(length(unvisitedtbls) == 0)

break

}if(!all(tbls%in%visitedtbls))

print("使用者需要的表存在不連通")

#輸出結果

visitedtbls

演算法效果:

圖如下:

使用者要找"teacher", "scourse", "exam"三個表的關聯關係。

輸出join路徑:"teacher" "tcourse" "scourse" "exam"   即((teacher join tcourse) join scourse) join exam 

R語言用mRMRe包實現mRMR演算法

這裡記錄一下 r語言mrmre包實現mrmr演算法進行特徵降維的操作。下面是r library mrmre mrmr feature train feature mrmr feature y train label 篩選的資料要加上y值 target indices which names mrmr...

向量自回歸模型(VAR)及其R語言實現

自行google,很詳細,也很簡單 主要是 分析和內生變數間影響狀況分析。個人拙見,不是標準模板 選擇合適的變數 granger因果檢驗,進一步觀察變數間的關聯性,最好做雙向檢驗,不過也有人說單向就足夠了,這就人之間人智者見智了 選擇var模型滯後階數 擬合var模型 脈衝響應分析 方差分解 分析 ...

用R語言實現簡單的Kmeans聚類

最近主要在做針對投資者的統計及聚類分析,希望能找出投資者的一些特徵,方便做投資者的精準營銷。首先使用的是spss的modeler,畢竟操作視覺化,比較簡單,就是執行大量資料比較慢,挺費時間。後來又想用r驗證一下聚類的準確性,直接登陸rstudio,找了kmeans的包,也計算了,發現了spss聚類除...