日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题——轻松搞定面试中的红黑树问题

發布時間:2025/4/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题——轻松搞定面试中的红黑树问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版權所有,轉載請注明出處,謝謝!
http://blog.csdn.net/silangquan/article/details/18655795

?

? ?連續兩次面試都問到了紅黑樹,關鍵兩次都沒有答好,這次就完整地來學習整理一下。

沒有學習過紅黑樹的同學請參考:

<<Introduction to Algorithms>> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures

教你透徹了解紅黑樹?

?

1.stl中的set底層用的什么數據結構?

2.紅黑樹的數據結構怎么定義的?

3.紅黑樹有哪些性質?

4.紅黑樹的各種操作的時間復雜度是多少?

5.紅黑樹相比于BST和AVL樹有什么優點?

6.紅黑樹相對于哈希表,在選擇使用的時候有什么依據?

7.如何擴展紅黑樹來獲得比某個結點小的元素有多少個?

8.擴展數據結構有什么步驟?

9?為什么一般hashtable的桶數會取一個素數

詳細解答

1.stl中的set底層用的什么數據結構?

紅黑樹

?

2.紅黑樹的數據結構怎么定義?

?

[cpp]?view plaincopy
  • enum?Color??
  • {??
  • ??????????RED?=?0,??
  • ??????????BLACK?=?1??
  • };??
  • ??
  • struct?RBTreeNode??
  • {??
  • ???????????struct?RBTreeNode*left,?*right,?*parent;??
  • ???????????int???key;??
  • ???????????int?data;??
  • ???????????Color?color;??
  • };??
  • ?

    3.紅黑樹有哪些性質?

    一般的,紅黑樹,滿足以下性質,即只有滿足以下全部性質的樹,我們才稱之為紅黑樹:
    1)每個結點要么是紅的,要么是黑的。
    2)根結點是黑的。
    3)每個葉結點(葉結點即指樹尾端NIL指針或NULL結點)是黑的。
    4)如果一個結點是紅的,那么它的倆個兒子都是黑的。
    5)對于任一結點而言,其到葉結點樹尾端NIL指針的每一條路徑都包含相同數目的黑結點。

    ?

    4.紅黑樹的各種操作的時間復雜度是多少?

    能保證在最壞情況下,基本的動態幾何操作的時間均為O(lgn)

    ?

    5.紅黑樹相比于BST和AVL樹有什么優點?

    紅黑樹是犧牲了嚴格的高度平衡的優越條件為代價,它只要求部分地達到平衡要求,降低了對旋轉的要求,從而提高了性能。紅黑樹能夠以O(log2 n)的時間復雜度進行搜索、插入、刪除操作。此外,由于它的設計,任何不平衡都會在三次旋轉之內解決。當然,還有一些更好的,但實現起來更復雜的數據結構能夠做到一步旋轉之內達到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。

    相比于BST,因為紅黑樹可以能確保樹的最長路徑不大于兩倍的最短路徑的長度,所以可以看出它的查找效果是有最低保證的。在最壞的情況下也可以保證O(logN)的,這是要好于二叉查找樹的。因為二叉查找樹最壞情況可以讓查找達到O(N)。

    紅黑樹的算法時間復雜度和AVL相同,但統計性能比AVL樹更高,所以在插入和刪除中所做的后期維護操作肯定會比紅黑樹要耗時好多,但是他們的查找效率都是O(logN),所以紅黑樹應用還是高于AVL樹的.?實際上插入 AVL 樹和紅黑樹的速度取決于你所插入的數據.如果你的數據分布較好,則比較宜于采用 AVL樹(例如隨機產生系列數),但是如果你想處理比較雜亂的情況,則紅黑樹是比較快的

    ?

    6.紅黑樹相對于哈希表,在選擇使用的時候有什么依據?

    權衡三個因素: 查找速度, 數據量, 內存使用,可擴展性。
      總體來說,hash查找速度會比map快,而且查找速度基本和數據量大小無關,屬于常數級別;而map的查找速度是log(n)級別。并不一定常數就比log(n) 小,hash還有hash函數的耗時,明白了吧,如果你考慮效率,特別是在元素達到一定數量級時,考慮考慮hash。但若你對內存使用特別嚴格, 希望程序盡可能少消耗內存,那么一定要小心,hash可能會讓你陷入尷尬,特別是當你的hash對象特別多時,你就更無法控制了,而且 hash的構造速度較慢。

    紅黑樹并不適應所有應用樹的領域。如果數據基本上是靜態的,那么讓他們待在他們能夠插入,并且不影響平衡的地方會具有更好的性能。如果數據完全是靜態的,例如,做一個哈希表,性能可能會更好一些。

    在實際的系統中,例如,需要使用動態規則的防火墻系統,使用紅黑樹而不是散列表被實踐證明具有更好的伸縮性。Linux內核在管理vm_area_struct時就是采用了紅黑樹來維護內存塊的。

    紅黑樹通過擴展節點域可以在不改變時間復雜度的情況下得到結點的秩。

    ?

    7.如何擴展紅黑樹來獲得比某個結點小的元素有多少個?

    這其實就是求節點元素的順序統計量,當然任意的順序統計量都可以需要在O(lgn)時間內確定。

    在每個節點添加一個size域,表示以結點 x 為根的子樹的結點樹的大小,則有

    size[x] = size[[left[x]] + size [right[x]] + 1;

    這時候紅黑樹就變成了一棵順序統計樹。

    利用size域可以做兩件事:

    1). 找到樹中第i小的結點;

    ?

    [cpp]?view plaincopy
  • OS-SELECT(x;,i)??
  • r?=?size[left[x]]?+?1;??
  • if?i?==?r??
  • ?????return?x??
  • elseif?i?<?r??
  • ?????return?OS-SELECT(left[x],?i)??
  • else?return?OS-SELECT(right[x],??i)??

  • 思路:size[left[x]]表示在對x為根的子樹進行中序遍歷時排在x之前的個數,遞歸調用的深度不會超過O(lgn);

    ?

    ?

    2).確定某個結點之前有多少個結點,也就是我們要解決的問題;

    ?

    [cpp]?view plaincopy
  • OS-RANK(T,x)??
  • r?=?x.left.size?+?1;??
  • y?=?x;??
  • while?y?!=?T.root??
  • ?????????if?y?==?y.p.right??
  • ?????????????????r?=?r?+?y.p.left.size?+1??
  • ?????????y?=?y.p??
  • return?r??


  • ?

    思路:x的秩可以視為在對樹的中序遍歷種,排在x之前的結點個數加上一。最壞情況下,OS-RANK運行時間與樹高成正比,所以為O (lgn).

    ?

    8.擴展數據結構有什么步驟?

    1).選擇基礎數據結構;

    2).確定要在基礎數據結構種添加哪些信息;

    3).驗證可用基礎數據結構上的基本修改操作來維護這些新添加的信息;

    4).設計新的操作。

    9?為什么一般hashtable的桶數會取一個素數

    設有一個哈希函數
    H( c ) = c % N;
    當N取一個合數時,最簡單的例子是取2^n,比如說取2^3=8,這時候
    H( 11100(二進制)?) = H( 28 ) = 4
    H( 10100(二進制) ) = H( 20?)= 4

    這時候c的二進制第4位(從右向左數)就”失效”了,也就是說,無論第c的4位取什么值,都會導致H( c )的值一樣.這時候c的第四位就根本不參與H( c )的運算,這樣H( c )就無法完整地反映c的特性,增大了導致沖突的幾率.

    取其他合數時,都會不同程度的導致c的某些位”失效”,從而在一些常見應用中導致沖突.
    但是取質數,基本可以保證c的每一位都參與H( c )的運算,從而在常見應用中減小沖突幾率..

    (個人意見:有時候不取質數效率也不會太差..但是無疑取質數之比較保險的..)

    轉載于:https://www.cnblogs.com/wuchanming/p/4444961.html

    總結

    以上是生活随笔為你收集整理的面试题——轻松搞定面试中的红黑树问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产无码精品一区二区 | 久久精工是国产品牌吗 | 成人小视频在线观看 | 亚洲色图欧美日韩 | 性爱免费在线视频 | 蜜桃99视频一区二区三区 | 福利在线免费 | 好吊操免费视频 | 91丨porny在线 | 天天综合天天做天天综合 | wwwxx在线 | 日韩黄色一区二区 | 国产精品久久久精品 | 伊人久操 | 亚洲精品免费在线观看视频 | 国产真实自拍 | 男男gay羞辱feet贱奴vk | 国产自精品| 国产夜夜嗨 | 国产精品国产三级国产专播精品人 | 美女扒开腿让人桶爽 | 国产精品夜夜夜爽阿娇 | 欧美精品入口蜜桃 | 91精品国产91久久久久青草 | 四虎成人精品在永久免费 | 色射色 | 精品国产鲁一鲁一区二区张丽 | 日产精品久久久 | 成人在线观看一区 | 国产伦理自拍 | 日日操日日操 | 亚洲少妇在线 | 日日碰狠狠添天天爽无码 | 午夜肉体高潮免费毛片 | 日韩黄色一级大片 | 国产高清在线视频 | 人人涩| 黄色av电影在线观看 | 亚洲人在线播放 | 欧美日韩成人一区二区 | 丁香花五月天 | 成熟人妻av无码专区 | 男女视频网站 | 亚av在线| 国产99久久久国产精品成人免费 | 91精品视频在线播放 | 亚洲操一操 | 色多多网站 | 粉嫩av在线 | 欧美a级在线 | 欧美一区二三区 | 欧美一级片一区二区 | jizz日本在线播放 | 色88久久久久高潮综合影院 | 国产精品高潮呻吟av | 久久在现| 欧美精品一区二区成人 | 日韩成人午夜 | 黄色香蕉网 | 丰腴饱满的极品熟妇 | av伦理在线 | 麻豆性生活 | 日韩精品一区二区三区无码专区 | 亚洲成av人片在线观看无码 | 日日干av| 国模无码一区二区三区 | 爱草视频 | 台湾佬中文在线 | 欧美日韩在线高清 | 91性高潮久久久久久久 | 欧美日韩免费高清一区色橹橹 | 欧美高清hd| 午夜草草| 欧美亚洲在线观看 | 爆操老女人 | 在线网站av | 欧美黄色短视频 | 亚洲精品一区二区三区四区 | 蜜臀一区二区三区精品免费视频 | 欧美成人另类 | 国产精品久久久久久久无码 | 日日爱669 | 国产片网址 | 俺去草| 最新成人 | 久久亚洲精品中文字幕 | 国产女合集| 91成人毛片| 日本午夜电影网站 | 亚洲理论中文字幕 | 欧美成人女星 | 口舌奴vk | 日本美女久久 | 亚洲成网 | 视频一区免费 | 在线观看你懂得 | 天天做天天爱天天爽 | 女优视频在线观看 | 欧美aⅴ视频 |