2-3 tree 与2-3-4 tree.pptVIP

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2-3 tree 與2-3-4 tree 2-3 tree 一棵 2-3 樹必須符合下列幾項定義:  (1) 2-3 tree 中的節點可以存放一筆或兩筆資料。   (2) 若節點中存放了一筆資料 Ldata.key ,其必須存在兩個子節點-左子節點與中子節點。假設資料 Ldata 的鍵值為 Ldata.key ,則:     (a) 左子節點所存放的資料鍵值必須小於 Ldata.key 。     (b) 中子節點存放的資料鍵值必須大於 Ldata.key 。 2-3 tree (3) 若節點中存放了兩筆資料 Ldata 與 Rdata ,則會存在三個子節點-左子節點、中子節點與右子節點。假設資料 Ldata 、Rdata 的鍵值分別為 Ldata.key 與 Rdata.key,則:     (a) Ldata.key Rdata.key 。     (b) 左子節點所存放的資料鍵值必須小於 Ldata.key 。     (c) 中子節點所存放的資料鍵值必須大於 Ldata.key 和小於 Rdata.key 。     (d) 右子節點所存放的資料鍵值必須大於 Rdata.key 。 (4) 樹中的所有樹葉節點必須為同一階度 ( Level ) 。 2-3 tree特性 (1) 有 n 個元素的 2-3 tree 之高度介於 [ log3( n+1 ) ] 和 [ log2( n+1 ) ]。   (2) 在高度為 h 的 2-3 tree 中,元素的個數介於 2h - 1 到 3h - 1 。    (3) 在 n 個元素的 2-3 tree 中,插入和刪除需要時間為 O( log n ) 。 2-3 tree 2-3 tree的加入 從2-3 Tree的開始搜尋,假使加入的資料其鍵值在2-3 Tree中找不到,則加入2-3 Tree中: 1. 該節點只有一筆資料,則直接加入。 2. 該節點已存在兩筆資料,加入後不符合2-3 tree的定義,因此必須將此節點一分為二,並將中間的鍵值,往上提到父節點。 2-3 tree的加入 (2)承(1)加入90 ,由於g節點已有兩個鍵值 80與85,因此必須將g節點劃分為g, h 兩個節點,然後將85加入其父節點c中,因為85介於80和90之間 2-3 tree的加入 (3)承(2)加入55。 2-3 tree的加入 (4)承(3)加入15 2-3 tree的加入 (5)承(4)加入25 2-3 tree的加入 (6)承(5)加再加入17以同樣方法,其結果如下所示: 2-3 tree的刪除 2-3 Tree的刪除分成兩部份: 一為刪除的鍵值是在樹葉節點上(leaf node)。 刪除下圖中的10,85,90,80 二為刪除的鍵值是在非樹葉節點(non-leaf node)。 刪除下圖中的60,70,90,95,75 2-3 tree的刪除 1. 若刪除的鍵值是在樹葉節點上: (1)今欲刪除圖10-2中節點d的鍵值10,則 可直接刪除之,因為刪除後還有一個, 故還符合2-3 Tree的定義。 2-3 tree的刪除 (2)假設我們要刪除的是圖10-2中節點g的鍵值85,此時不可直接刪除之,我們必需向左或右兄弟節點借一個鍵值,一般而言我都先向右邊的節點借,若右邊節點沒有,再向左邊節點借,這不是絕對的順序。ok,若我們向右邊的節點h借,則需借一個最小的鍵值95(為什麼?),然後以g節點之父節點c中的鍵值90(挑介於 85和95之間的鍵值)取代刪除的85,並將95 往上提到c節點上。最後結果如下圖所示: 2-3 tree的刪除 2-3 tree的刪除 承上若繼續刪除90,則右兄弟節點沒有多餘的鍵值,而左兄弟節點有一個以上的鍵值,因此向左兄弟節點借一個最大值75,往上提至父節點,並將父節點的80(因為它介於75和90之間)取代90,最後結果如下圖所示: 2-3 tree的刪除 承上繼續刪除80的話,則因為它的左右兄弟節點皆無一個以上的鍵值,此時必需挑左或右兄弟與其父節點的某一鍵值合併: 2-3 tree的刪除 2. 刪除的鍵值在非樹葉節點上: 若此時欲刪除的圖10-2中a節點的鍵值60.則可以找此節點之右子樹中最小的鍵值來取代,或找左子樹中最大的鍵值來取代之,若以右子樹中最小的鍵值來取代的話,則f節點的70將取代60,如下圖所示: 2-3 tree的刪除 2-3 tree的刪除 承上再刪除70鍵值 2-3 tree的刪除 承上再刪除90 2-3 tree的刪除 承上再刪除95 2-3 tree的刪除 承上若再刪除75,若以右子樹中的80取代的話後,情形如下圖所示: 2-3 tree的刪除 若以左子樹中的50取代的話,則結果如下圖所示

文档评论(0)

1234554321 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档