我正在使用一種模糊的語言,並且依賴性管理很差。爲了幫助14000個文件代碼庫,我編寫了一些解析工具(使用Java)並生成了一個依賴關係圖。在有向圖中查找島嶼
我寫了自己的圖和BFS類,他們工作得很好。有了它們,我有了getParents()
和getChildren()
這樣的方法。
現在我試圖找到這個圖中的'島'也就是說,我試圖找到我們的代碼庫的哪些部分不相互依賴,希望將它們收集到獨立的模塊中。
後來,我還計劃分析各個島嶼,看他們是否有任何薄弱環節,我們可以建立模塊障礙並定義模塊的界面,但這是不可能的。
現在,我想這樣做的:
Map<DependencyEntry, Set<DependencyEntry>> allChildren = new ...;
for(DependencyEntry entry : allFiles) allChildren.put(entry,getAllChildren(entry));
Set<DependencyEntry> visited = new ...;
Set<DependencyEntry> largest = new HashSet<DependencyEntry>(); // size 0
// slightly more expensive but more readable
for(DependencyEntry entry : allChildren.keySet()) {
Set<DependencyEntry> set = allChildren.get(key);
if(set.size() > largest.size()) largest = set;
}
visited.addAll(largest);
這應該給我最大的島嶼。從那裏,我可以通過並排除任何包含任何訪問節點的集合,然後再次運行它以獲得下一個最大的島,依此類推。
這是一個準確的算法嗎?有沒有更好的方法來解決我沒有看到的問題?
有趣的問題看,從清爽改變我該怎麼做XX在YY語言或錯誤代碼幫助0x34的問題! – GBa