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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法数据结构(一)-B树

發布時間:2024/9/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法数据结构(一)-B树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

B樹的目的為了硬盤快速讀取數據(降低IO操作次樹)而設計的一種平衡的多路查找樹。目前大多數據庫及文件索引,都是使用B樹或變形來存儲實現。

目錄

  • 為什么B樹效率高
  • B樹存儲
  • B樹缺點
  • 為什么B樹效率高

    在大規模數據存儲操作中,由于無法一次性加載到內存里。所以避免不了發生內外存交換。所以次數越少,效率表現也越高。

    來看下面這張圖:

    這是個典型的b樹結構,初始因子為1000,高度僅為3的b樹,就可以存儲1002001000的數據了。

    假設要查詢最后一個數據:

    • 從硬盤加載根節點搜索,IO一次。
    • 根據根節點的指針信息,去加載第二層的節點, IO一次。
    • 重復2,IO一次。

    IO只用了3次,就查詢了需要的數據,所以說B樹效率是非常高的。

    B樹的節點,在硬盤里表現為:柱面里的頁(page)或盤塊(block) ,如果把索引持久化到內存,只需要一次就夠了。

    B樹的高效的前提是數據已排序。

    B樹結構

    ??

    這是B樹存儲在硬盤的邏輯結構圖。

    其中根節點中17,35在稱為關鍵字(key) ,實際中往往附帶更多復雜類型數據。

    可以看出一個節點包含 keys ?ChildNotePointer ?2部分信息。

    ?

    根據這張圖介紹下b樹的基礎定義:

    這是顆5階B樹的圖,階簡寫m。

    ? ? 1:樹中每個結點最多含有m個子節點(m>=2)。?

    ? ? 2:每個內節點至少?[ceil(m / 2)] 個子節點。 ?內節點即非根節點非頁子節點,也可以叫中間節點。

    ? ? 3: 關鍵字key的數量 ??[ceil(m / 2)-1]<= n <= m-1,關鍵字按遞增排序。

    ? ? 6:?每個葉節點具有相同的深度,即樹的高度h,而且不包含關鍵字信息。

    上圖也可稱為最小度數為3的b樹,(degree) ,簡寫t。 ?

    ? ? ? ? ? ??? t其實是上面第二條定義中 [ceil(m / 2)] 的值,即t=[ceil(m/2)], 3=ceil(5/2) 。?

    ?? ?1:每個非根節點至少有t-1個關鍵字,非根內節點至少有t個子節點。 t稱為度數(degree),t>=2 ?。

    ?. ?2:每個節點至多有2t-1關鍵字,每個內節點最多有2t個子節點。

    ? ? 3:每個葉節點具有相同的深度,即樹的高度h,而且不包含關鍵字信息。

    度和階都是描述子節點的數量的。

    算法導論譯版中是用度來描述的。

    數據結構與算法分析是用階來描述,網上大多也是。

    下面簡單的描述實現邏輯。

    搜索:從根節點搜索,找到返回,找不到遞歸子節點。一直搜索到葉子節點,找到返回,找不到則說明key不存在。

    1 2 3 4 5 6 7 8 9 10 11 12 13 //偽代碼 entry BTreeSearch(node, key) { ????if(node ==?null) ???????????return?null; ????for(int?i = 0; i < node.keys.length; i++) ????{ ????????if(node.keys[i] == key) ???????????????return?node.data[i]; ????} ????return?BTreeSearch(ChildrenNode[i].node,key); } var??entry = BTreeSearch(root, my_key);

    插入:根節點插入,不滿直接插入。節點滿進行分裂,再滿遞歸分裂。

    刪除:查詢到節點,然后進行刪除操作,不滿足B數節點的定義則進行節點合并。

    更新:查詢到子節點,更新數據。

    B樹缺點

    從上面的得知,在查詢單條數據是非常快的。但如果范圍查的話,b樹每次都要從根節點查詢一遍。

    所以在實際應用中,往往采用b樹的變形,b+樹來存儲,只有葉子節點存儲數據,每個葉子節點都指向下一個。

    參考博客 http://blog.csdn.net/v_JULY_v/article/details/6530142/


    來源:http://www.cnblogs.com/mushroom/p/4100087.html

    總結

    以上是生活随笔為你收集整理的算法数据结构(一)-B树的全部內容,希望文章能夠幫你解決所遇到的問題。

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