關聯式容器set和map原理

藍旭晨楓發表於2016-04-07
1、標準的STL關聯式容器分為set(集合)和map(對映表)兩大類,以及這兩大類衍生而來的multiset(多鍵集合)和multimap(多鍵對映表)。

2、這些容器的底層均以RB-tree(紅黑樹)完成。RB-tree(紅黑樹)也是一個獨立的容器,但並不開放給外界使用。

3、此外,SGI STL還提供了一個不在標準規格之列的關聯式容器:hash table(雜湊表),以及以此hash table 為底層機制而完成的hash_set(雜湊集合)hash_map(雜湊對映表)、hash_multiset(雜湊多鍵集合)、hash_multimap(雜湊多鍵對映表)。

4、二叉搜尋樹是一種特殊的二叉樹,其具有如下性質:

        1) 若左子樹不空,則左子樹所有結點的值均小於它的根結點的值

        2)若右子樹不空,則右子樹所有節點的值均大於它的根節點的值

        3)左右子樹也分別為二叉搜尋樹

5、二叉搜尋樹支援各種動態集合操作,包括:插入、查詢、刪除,其操作的時間複雜度與樹的高度成正比,在遇到二叉樹極端不平衡的情況下,其形狀就與連結串列是一樣的,二叉樹插入、查詢、刪除的時間複雜度都退化為O(n)。

 6、 平衡二叉搜尋樹是一種特殊的二叉搜尋樹,其沒有一個節點深度過大,不同的平衡條件,造就不同的效率表現。常見的平衡二叉搜尋樹有:AVL-tree和RB-tree。

7、關聯容器一般以平衡二叉搜尋樹作為內部資料結構,RB-tree的應用尤其廣泛。

8、RB-tree是許多平衡二叉查詢樹的一種,一顆有n個內結點的紅黑樹的高度至多為2log(n+1),它能保證在最壞情況下,基本的動態集合操作時間為O(logn)

9、二叉搜尋樹具有對數平均時間的表現,但這樣的表現構造在一個假設上:輸入資料有足夠的隨機性。

   而hash table(雜湊表)的資料結構,這種結構在插入、刪除、搜尋等操作上也具有常數時間的表現,而且這種表現是以統計為基礎的,不需要依賴輸入元素的隨機性。

相關文章