1. 程式人生 > 其它 >Hadoop叢集安裝配置教程

Hadoop叢集安裝配置教程

1.Dijkstra演算法:可以獲得以一個點為起點到所有其他點的最短路徑的問題

* 思路:
* 從起點開始,遍歷所有以起點為一端的所有邊,通過這些邊來更新其到其他點的距離,如果更新後更小則對該點最小
* 距離進行替換。一個點更新完後,去遍歷整個點集,找到離起點距離最小的點,在重複以上步驟即可。

程式碼及解析:

 1 public static HashMap<Node,Integer> dijkstra(Node node) {
 2         HashMap<Node,Integer> disMap = new HashMap<>();//存放到每個點到起始點的最短距離
3 HashSet<Node> set = new HashSet<>();//存放已經用來更新過的點 4 disMap.put(node,0);//從起始點開始進行處理 5 Node minNode = getMinNode(disMap,set);//初始化找到第一個點,後續開始進行迴圈操作 6 while (minNode != null) {//只要能找到能更新的點就繼續進行 7 int distance = disMap.get(minNode);//最小點到起始點距離(後續這個點所帶來的更新都要加該距離)
8 for (Edge edge : minNode.edges) {//遍歷最小點的所有的邊 9 Node toNode = edge.to; 10 if (!disMap.containsKey(toNode)) {//如果之前沒有這個點的最短距離,就直接把這個距離存進去 11 disMap.put(toNode, distance + edge.weight); 12 } 13 else {//如果比之前存的距離小,就進行替代更新
14 disMap.put(toNode, Math.min(disMap.get(toNode), distance + edge.weight)); 15 } 16 } 17 set.add(minNode);//表示這條邊已經更新過了,存到該集合進行記錄 18 minNode = getMinNode(disMap,set);//繼續找下一個沒更新過的最小節點 19 } 20 return disMap; 21 } 22 23 public static Node getMinNode(HashMap<Node,Integer> disMap,HashSet<Node> set) {//獲取不在set中 24 //距離最小的點 25 Node minNode = null; 26 int minDistance = Integer.MAX_VALUE; 27 for (Entry<Node,Integer> entry : disMap.entrySet()) { 28 if (!set.contains(entry.getKey()) && entry.getValue() < minDistance) { 29 minDistance = entry.getValue(); 30 minNode = entry.getKey(); 31 } 32 } 33 return minNode; 34 }