<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无码精品色午夜在线观看| 成人网站免费观看| 亚洲中文字幕在线第六区| WWW国产亚洲精品久久麻豆| 日本人的色道www免费一区| 亚洲国产精品ⅴa在线观看| 免费高清av一区二区三区| 国产青草亚洲香蕉精品久久 | 黄人成a动漫片免费网站| 永久免费毛片手机版在线看| 亚洲av永久中文无码精品| 免费人成在线观看播放国产| 视频免费1区二区三区| 国产亚洲欧洲Aⅴ综合一区| 国产线视频精品免费观看视频| 国产亚洲精久久久久久无码AV| a级特黄毛片免费观看| 久久久无码精品亚洲日韩京东传媒| 在线观看www日本免费网站| 亚洲av片不卡无码久久| 日本19禁啪啪无遮挡免费动图| 精品女同一区二区三区免费播放| 亚洲精品国产综合久久一线| 免费成人在线视频观看| 亚洲乱码一二三四五六区| 国产又大又长又粗又硬的免费视频| 一区二区免费在线观看| 久久久久亚洲Av片无码v| 一个人看的www在线观看免费| 国产偷国产偷亚洲高清人| 亚洲人成人网站色www| 一二三四免费观看在线电影 | a在线观看免费视频| 亚洲国产高清在线精品一区| 国产精品99久久免费| 国产啪精品视频网站免费尤物| 亚洲影视自拍揄拍愉拍| 亚洲中文字幕在线观看| 丁香花在线观看免费观看| 中文字幕在线视频免费观看| 在线观看日本亚洲一区|