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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

树复制替换id_程序员的进阶课-架构师之路(12)-2-3-4树

發布時間:2025/3/13 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树复制替换id_程序员的进阶课-架构师之路(12)-2-3-4树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 本文鏈接:https://blog.csdn.net/m0_37609579/article/details/99699390

一、2-3-4樹的定義
2-3-4樹就是一種4階的多叉樹,它像紅黑樹一樣是平衡樹,可以保證在O(lgn)的時間內完成查找、插入和刪除操作,容易實現,但是效率比紅黑樹稍差。
2-3-4樹每個節點最多有四個字節點和三個數據項,名字中 2,3,4 的數字含義是指一個節點可能含有的子節點的個數。對于非葉節點有三種可能的情況:

  • 有一個數據項的節點總是有兩個子節點;
  • 有二個數據項的節點總是有三個子節點;
  • 有三個數據項的節點總是有四個子節點。
  • 簡而言之,非葉節點的子節點數總是比它含有的數據項多1。如果子節點個數為L,數據項個數為D,那么:L = D + 1。


    二、操作
    構建一個數組為{7,1,2,5,6,9,8,4,3}的2-3-4樹的過程:
    2-3-4樹的插入:


    2-3-4樹的刪除:


    三、效率
    分析2-3-4樹我們可以和紅黑樹作比較分析。紅-黑樹的層數(平衡二叉樹)大約是log2(N+1),而2-3-4樹每個節點可以最多有4個數據項,如果節點都是滿的,那么高度和log4N。因此在所有節點都滿的情況下,2-3-4樹的高度大致是紅-黑樹的一半。不過他們不可能都是滿的,所以2-3-4樹的高度大致在log2(N+1)和log2(N+1)/2。減少2-3-4樹的高度可以使它的查找時間比紅-黑樹的短一些。
    但是另一方面,每個節點要查看的數據項就多了,這會增加查找時間。因為節點中用線性搜索來查看數據項,使得查找時間的倍數和M成正比,即每個節點數據項的平均數量。總的查找時間和M*log4N成正比。
    四、2-3樹
    2-3樹是一棵自平衡的多路查找樹,它并不是一棵二叉樹,具有如下性質:

  • 每個節點有1個或2個key,對應的子節點為2個子節點或3個子節點;
  • 所有葉子節點到根節點的長度一致;
  • 每個節點的key從左到右保持了從小到大的順序,兩個key之間的子樹中所有的key一定大于它的父節點的左key,小于父節點的右key。
  • 2-3-4樹只是在2-3樹的基礎上進行了擴展,任一節點只能是1個或2個或3個key,對應的子節點為2個子節點或3個子節點或4個子節點。
    五、2-3-4樹跟紅黑樹的轉化
    Java HashMap的紅黑樹是普通的紅黑樹,既可以左旋也可以右旋的。紅黑樹從根到葉子節點的最長路徑不會超過最短路徑的二倍。紅黑樹是黑色平衡的,即從根節點到所有葉子節點的路徑,經過的黑色的節點數是相等的。 本質上來說,紅黑樹這個數據結構的基本思想源自于階數為4的B樹(也就是2-3-4樹)。

    等同于


    2-3-4 樹是紅黑樹的一種等同,這意味著它們是等價的數據結構。換句話說,對于每個 2-3-4 樹,都存在著至少一個數據元素是相同次序的紅黑樹。在 2-3-4 樹上的插入和刪除操作也等價于在紅黑樹中的顏色翻轉和旋轉。這使得它成為理解紅黑樹背后的邏輯的重要工具。
    因此對于紅黑樹的插入等操作,可以類比4階B樹的相關操作。
    1. 要將一個節點A插入,首先要將該節點的key值與樹中的節點Key值相比較,最后找到一個正確的null節點位置,然后替換此null節點。此時節點A的顏色為紅色。
    2. if A節點父節點為黑色,那么插入過程結束,因為紅色的節點不會影響紅黑樹的平衡if A節點父節點為紅色,那么此時要看A節點的父節點的兄弟節點,也就是A節點的叔叔節點:
    if A節點沒有叔叔節點,則進行紅黑樹的旋轉操作(左旋或右旋),最后的情況是,A節點的爺爺節點的位置由A節點的父節點替換了,A節點原來的爺爺節點在旋轉后成為了A節點的父節點的子節點,也就是A節點的爺爺節點成為了A節點的兄弟節點。注意,旋轉的過程中,不光A節點的父節點與爺爺節點的位置要變換,兩個節點的顏色也要變:

    插入14 →

    a
    if A節點有叔叔節點(可知A節點的叔叔節點顏色應該與A節點的父節點相同,即為紅色) 則將A節點的父節點和叔叔節點顏色全部置為黑色,而將A節點的爺爺節點的顏色置為紅色,以保證整個紅黑樹仍然是黑色平衡的。 此時A節點的爺爺節點為紅色,可能會導致不再滿足紅黑樹的約束,因此要對變成紅色的爺爺節點進行與插入A節點時相同的操作,來維持整個紅黑樹的平衡,這個過程可能是一個遞歸的過程。

    插入9 →


    六、總結
    2-3樹和2-3-4樹都是多路查找樹。每一個結點的孩子數可以多于兩個,且每一個結點處可以存儲多個元素。由于它是查找樹,所有元素之間存在某種特定的排序關系。
    2-3-4 樹是紅黑樹的一種等同,這意味著它們是等價的數據結構。


    我的微信公眾號:架構真經(id:gentoo666),分享Java干貨,高并發編程,熱門技術教程,微服務及分布式技術,架構設計,區塊鏈技術,人工智能,大數據,Java面試題,以及前沿熱門資訊等。每日更新哦!


    參考資料:

  • https://blog.csdn.net/qy844083265/article/details/80716065
  • https://www.cnblogs.com/ysocean/p/8032648.html
  • https://blog.csdn.net/yishizuofei/article/details/81660841
  • https://blog.csdn.net/MustangJy/article/details/87783323
  • 總結

    以上是生活随笔為你收集整理的树复制替换id_程序员的进阶课-架构师之路(12)-2-3-4树的全部內容,希望文章能夠幫你解決所遇到的問題。

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