十大常用資料結構

來源:互聯網
上載者:User
一、棧:

1、尾碼運算式的求值;
2、中綴到尾碼運算式的轉換;
3、深度優先搜尋的非遞迴實現;
4、動態規劃的最佳化:用於維護一個凸序列,便於二分尋找,如LIS問題的O(nlgn)演算法。

二、隊列:
1、樹的層序遍曆;
2、廣度優先搜尋;
3、Bellman-Ford演算法的SPFA實現;
4、網路流中FF演算法的Edmonds-Karp實現,以及Preflow演算法的隊列最佳化實現。

三、二叉搜尋樹:

1、對大量的關鍵字的索引尋找;
2、有很多平衡策略以改善其平均效能:
常用平衡樹:AVL,紅/黑樹狀結構,隨機化BST,Splay Tree,Treap(或叫笛卡兒樹)。

四、散列表(hash表):
1、一般針對範圍較大但狀態很稀疏的應用,比如狀態壓縮記憶化搜尋;
2、實現映射功能。

五、檢索樹(Trie):
1、一般用於字串索引演算法,速度快,但佔用空間較大(相對hash);
2、常用的改進結構:Patricia線索樹,多叉檢索樹(TST)。

六、優先隊列:

1、常用的是二元堆積的實現,具體應用如堆排序和Dijkstra演算法;
2、當需要快速合并兩個優先隊列時,常用二項式隊列,實現簡單。
3、注意最大最小堆的配對使用。

七、線段樹和樹狀數組:

1、兩者都可以用於離散對象的統計;
2、後者的步進函數的性質和應用值得注意;
3、前者基本上適用於任何的區間操作,如求區間最值,改變區間的值等。
4、線段樹還可以用於最佳化狀態的枚舉,經常和動態規劃結合。

八、尾碼樹與尾碼數組:

1、總體規律是兩者的實現都比較複雜,前者更甚,但是前者的功能也更強大;
2、幾乎可以解決所有常見的關於字串的演算法,如最長迴文子串,最長重複子串,以及很多的模式比對問題。

九、並查集:

1、解決無向圖的連通性問題,如用於Kruskal演算法;
2、解決等價關係的查詢(這是它的主要用武之地),如05年Baidu之星初賽的石頭剪子布遊戲;
3、優點是實現異常簡單,缺點是合并後無法分離,若需要可以選擇用動態樹。

十、鄰接表和邊表:

1、表示圖的最直接的方法;
2、後者更省空間,並且在一定程度上更好用,比如Bellman-Ford演算法。
ps:數組、鏈表太基礎不在考慮之列。 本文轉載自:http://fuliang.javaeye.com/blog/403605

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.