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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AVL,B,B+,红黑

發(fā)布時間:2025/1/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AVL,B,B+,红黑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 為什么要有AVL樹
    • AVL的旋轉有哪幾種?
    • 為什么有了平衡樹還要有紅黑樹
    • 紅黑樹的特點
    • B 樹
    • B+ 樹
      • 1:treenode
      • 2:插入
      • 3:擴容
    • B+ 樹索引和 B樹索引

為什么要有AVL樹

  • 當出現(xiàn)極端的情況,樹的節(jié)點可能會近似與鏈表的形式,使得時間復雜度近似與 O(n)

AVL的旋轉有哪幾種?

  • 左左型 :節(jié)點都偏向左邊
    • 順時針旋轉兩個節(jié)點,使得自己的左子節(jié)點成為根節(jié)點,而自己成為右子節(jié)點
  • 右右型:節(jié)點都偏向右邊
    • 逆時針旋轉兩個節(jié)點,使得自己的右子節(jié)點成為根節(jié)點,而自己成為左子節(jié)點
  • 右左型:節(jié)點是偏向右邊,但是最底下的葉節(jié)點偏向左邊
    • 將它轉化為右右型號
    • 再進行右右型的旋轉
  • 左右型:節(jié)點是偏向左邊,但是最底下的爺節(jié)點是偏向右邊
    • 將他轉化為左左型號
    • 再進行左左型的旋轉

為什么有了平衡樹還要有紅黑樹

  • 平衡樹解決了在極端的情況下變成鏈表的情形,使得任意的兩個葉子節(jié)點的深度小于等于1。
  • 這個要求是在是太嚴格了,基本上每次新增插入,或者是刪除的時候,都會破壞這個要求
  • 使得每次都要進行左旋或者是右旋來調整,進而成為一顆平衡二叉樹
  • 如果是在刪除,插入場景很多的情況下,AVL樹的性能會大大的折扣

紅黑樹的特點

  • 是一種二叉搜索樹,任意的左子節(jié)點都比自己小,右子節(jié)點都比自己大
  • 根節(jié)點是黑色的
  • 每個葉子節(jié)點都是黑色的,并且里面不存數(shù)據(jù),為空
  • 任意兩個相鄰的節(jié)點不能是紅色的,也就是,紅節(jié)點是被黑節(jié)點分割開來
  • 每個節(jié)點,從該節(jié)點到其可達的葉子節(jié)點的所有路勁,都包括相同數(shù)量的黑色節(jié)點

B 樹

  • 每個節(jié)點中都存放著信息,所以查詢的時候,最快為O(1),最多為O(log n)
  • 他的葉節(jié)點沒有指針進行相連,不適合與范圍查詢

B+ 樹

  • B+ 樹是為了磁盤設計的一種平衡查找樹,所以的數(shù)據(jù)節(jié)點都放在同一層的葉節(jié)點中,并且各個葉節(jié)點有指針連接
  • 有K個字數(shù)的節(jié)點就含有K 個元素,每個元素不放數(shù)據(jù),只放索引,數(shù)據(jù)統(tǒng)一放在葉節(jié)點之中
  • 所有的葉節(jié)點包含了全部的數(shù)據(jù)信息,以及指向數(shù)據(jù)的指針,并且數(shù)據(jù)是按照從小到大依次進行排列的。
  • 所有的中間節(jié)點都同時存在于子節(jié)點中,在子節(jié)點是最大,最小元素
  • B+ 樹是從下到上查找,而B 樹是從下到上查找
  • 單一節(jié)點存儲更多的元素,使得樹變得矮胖了,樹下的分支變多了,減少I/O 的次數(shù)
  • 所有的查詢都要查詢到葉子節(jié)點,查詢性能穩(wěn)定
  • 所有的葉子節(jié)點都是按序連接的,適合與范圍查詢

1:treenode

  • treenode 是繼承了node結構,在node基礎上加了幾個字段
  • 指向父節(jié)點的,指向左子節(jié)點,指向右子節(jié)點,還有表示顏色的

2:插入

  • 找到一個合適的插入點,就是找到插入節(jié)點的父節(jié)點,紅黑樹滿足二叉搜索樹的特性,需要進行一次的平衡操作
  • 插入會打破平衡
  • 插入一定是紅色的節(jié)點,碰到父節(jié)點是黑色的,樹不會失衡

3:擴容

  • treenode保持著一個 next的字段,查詢的時候不適用
  • 但是新增或者是刪除節(jié)點的時候,仍然需要維護這個鏈表
  • 鏈表方便split拆分這個紅黑樹的時候,拆分為高位鏈和地位鏈
  • 高位鏈的數(shù)據(jù),最重要存放到新表中去
  • 拆分出來的鏈表,需要看一下他的長度

B+ 樹索引和 B樹索引

  • 由于關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫數(shù)據(jù)設計方式的不同,導致關系型數(shù)據(jù)庫常常用到數(shù)據(jù)的遍歷,而非關系型用到表的單一查詢
  • 所以在MySQL 數(shù)據(jù)庫中,使用B+ 樹作為索引,而在mongodb中,B 樹作為索引

總結

以上是生活随笔為你收集整理的AVL,B,B+,红黑的全部內容,希望文章能夠幫你解決所遇到的問題。

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