資料庫和圖演算法結合的乙個問題:
自動表關聯的問題:乙個資料庫(圖),有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聚類除...