<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    【JAVA算法】

    使用JAVA語言來實現算法。
         摘要: HashMap 和 HashSet 是 Java Collection Framework 的兩個重要成員,其中 HashMap 是 Map 接口的常用實現類,HashSet 是 Set 接口的常用實現類。雖然 HashMap 和 HashSet 實現的接口規范不同,但它們底層的 Hash 存儲機制完全一樣,甚至 HashSet 本身就采用 HashMap 來實現的。
    通過 HashMap、HashSet 的源代碼分析其 Hash 存儲機制

    集合和引用

    就像引用類型的數組一樣,當我們把 Java 對象放入數組之時,并不是真正的把 Java 對象放入數組中,只是把對象的引用放入數組中,每個數組元素都是一個引用變量。


    實際上,HashSet 和 HashMap 之間有很多相似之處,對于 HashSet 而言,系統采用 Hash 算法決定集合元素的存儲位置,這樣可以保證能快速存、取集合元素;對于 HashMap 而言,系統 key-value 當成一個整體進行處理,系統總是根據 Hash 算法來計算 key-val  閱讀全文
    posted @ 2010-03-23 09:37 rogerfan 閱讀(1031) | 評論 (0)  編輯

         摘要: 如果一個圖中所有點都是聯通的,求最小樹可以將圖遍歷完成,這里的最小是指邊最少,跟邊長沒有關系。

    算法利用深度優先遍歷,記載每個遍歷過的節點,將節點按照遍歷順序記錄下來就是所謂的最小樹。

    關于深度優先遍歷請參見深度優先遍歷。

    不過這里奇怪的是:

    假如所有節點之間是雙向聯通的,只用生成一個數組,裝入所有的節點,例如{'a','b','c','d','d'}

    然后每兩個點之間的線段就是最小樹的結果,即a --> b, b --> c, c --> d, d --> e

    似乎不用圖這樣復雜的結構支撐。

    不過這里還是給出了按照圖來產生最小樹的辦法。

    Graph.mst:返回最小樹。

    Graph.main:提供簡單測試。
      閱讀全文
    posted @ 2008-05-28 15:58 rogerfan 閱讀(726) | 評論 (0)  編輯

         摘要: 當每個任務有前后置關系時,需要找到一種滿足前后置關系的路線,將任務完成。

    如果將每個任務看成一個節點,任務之間的前后置關系表示為有向圖時,這種路線順序叫做為圖進行拓撲排序。也叫關鍵路徑分析。

    這里的圖用鄰接矩陣法表示,算法的關鍵是:

    1 找到一個沒有后繼的頂點

    2 在圖中刪除它,放入結果數組中

    3 重復 步驟 1 ,步驟 2 直到圖中沒有多余的節點。

    如果圖中出現環裝結構,則算法無法進行,因為此時任務之間循環成為前置。
      閱讀全文
    posted @ 2008-05-28 15:57 rogerfan 閱讀(1131) | 評論 (0)  編輯

         摘要: 圖的傳遞閉包是指修正后的鄰接矩陣表示的圖。(見Graph 圖-鄰接矩陣法 )

    在多個頂點的有向圖中,每個頂點可以到按照方向到達一定的節點,這叫圖的連通性。有種方法直接告訴我們,圖中的兩個節點是否可以聯通,這里說的是WarShall算法。

    WarShall的基本原理是,如果A可以到達B,且C可以到達A,則C可以到達B。通過對鄰接矩陣的修正可以做到這點。隨然這里舉例是將兩步可并成一步,但數學上可以證明這種修正可以達到任意步驟。
      閱讀全文
    posted @ 2008-05-28 15:54 rogerfan 閱讀(937) | 評論 (0)  編輯

         摘要: 與傳遞閉包問題 非常相似的一個問題是,能不能給出一個矩陣,根據矩陣可以以時間代價O(n)的方式得到在一個有向代權圖中任意指定端點之間的最短距離。求的這個矩陣的問題被稱為每一對端點間的最小距離問題。

    這里采用的是Floyd算法,它與WalShall 算法非常相似:

    如果A可以到達B,距離為x,且C可以到達A,距離為y,則求得C可以到達B,距離為 z = x + y,z小于如果c到B的原來的距離,則用z更新矩陣,否則c到B距離維持不變。

    和最小路徑算法類似,這里用一個很大數字INFINITY來表示兩個端點之間距離為無窮大的情況,即不通。這里INFINITY=最大的int值(~(1<<31))。

    Floyd.main()提供簡單的測試。

    與WalShall 一樣,Floyd算法本身的時間代價為O(n^3)
      閱讀全文
    posted @ 2008-05-28 15:53 rogerfan 閱讀(401) | 評論 (0)  編輯

         摘要: 圖中代權的最小樹的問題如下:


    如果N個城市之間(圖中的頂點)要修公路(圖中的邊)以使所有的城市聯通,求怎樣修可以使得公路的總長最小?
    以上問題中的N個城市之間可以用圖中的頂點表示,公路可以圖中的邊表示,公路的長度用邊長表示,公路是雙向的。問題就轉換為在有N個頂點中的雙向代權圖中求得一個最小樹。這里的代權指的邊的長度,這與以前的不代權的最小樹生成算法有很大的區別。


    算法描述如下:
      閱讀全文
    posted @ 2008-05-28 15:45 rogerfan 閱讀(414) | 評論 (0)  編輯

         摘要: 這里使用的是Dijkstra來計算最短路徑。事實上Dijkstra完成時,指定節點到所有節點的最小路徑均已求出。

    算法簡述如下:

    準備好兩個輔助性數據結構:

    1 ParentLength : 用來記錄到當前節點之前的父節點,與到當前節點的最小路徑

    2 Path: 記錄指定節點到所有節點的ParentLength。初始化時,所有的ParentLength的父節點都為指定的起始節點,長度都是INFINITY,代表沒有聯通,距離無窮大。
      閱讀全文
    posted @ 2008-05-28 15:39 rogerfan 閱讀(882) | 評論 (0)  編輯

    主站蜘蛛池模板: 亚洲av午夜精品一区二区三区| 亚洲gay片在线gv网站| 久久久久亚洲AV无码观看| 亚洲va中文字幕| 天天看片天天爽_免费播放| 亚洲精品高清一二区久久| 少妇中文字幕乱码亚洲影视| 亚洲欧美国产国产一区二区三区| 色www永久免费| 免费永久在线观看黄网站| 日韩亚洲AV无码一区二区不卡| 久久精品成人免费看| 亚洲成av人在片观看| 欧亚一级毛片免费看| 成人激情免费视频| 亚洲高清资源在线观看| 3d成人免费动漫在线观看| 亚洲日韩激情无码一区| 日本高清不卡中文字幕免费| mm1313亚洲精品国产| 亚洲AV成人精品日韩一区| 青娱乐免费在线视频| 亚洲人成亚洲精品| 99久久免费国产精精品| 亚洲成色999久久网站| a毛片免费全部播放完整成| 亚洲AV永久无码精品一百度影院| 一二三区免费视频| 免费观看日本污污ww网站一区| av午夜福利一片免费看久久| 国产在线观看免费视频播放器| 亚洲最大无码中文字幕| 免费在线看v网址| 小说区亚洲自拍另类| 青青青青青青久久久免费观看| 亚洲五月综合网色九月色| 精品福利一区二区三区免费视频 | 国产亚洲精品2021自在线| 免费看片A级毛片免费看| 一级a性色生活片久久无少妇一级婬片免费放| 成人免费淫片在线费观看|