b98902HW 板


LINE

deletion真是ㄐㄅ的要命 我終於弄懂了...以下為我整理的 希望能救到大家 (快稱讚我人很好,這我可是弄很久的耶!無私的分享給大家啊!!XDD) 我真的弄了很久Q_______________Q ========= 一些簡寫註記(怕大家看不懂) 1.r = red, 紅色 2.b = black, 黑色 3.bh = blackhight 4.n.c = n的child 5.n.p = n的parent 6.bx = 老師投影片上的x, 加上b代表黑色的 7.b1,b2,... = 點1(black),點2(black)... 8.r1,r2,... = 點1(red),點2(red)... 9.w1 = 點1(white:不限定為紅或黑) 9.stuvwy = 不重要的子樹們 10.(1,w1,2) = w1左邊的黑值=1,w1右邊黑值=2 ========= delete(n): 1.沒有手/沒有child/degree=0/是leaf => 直接拿掉n (1)n=r: color-OK, bh-OK (2)n=b: adjust(n.p.nil) 2.有一隻手/degree=1 => 把n.child接到n.parent (1)n=r: color-OK, bh-OK (2)n=b: adjust(n.c) 3.有兩隻手 => 取左手最大(或右手最小)的點y來補, y變成n的顏色 (1)y=r: color-OK, bh-OK (2)y=b: adjust(y.c) <y沒有手:y.c=nil / y有左手(右手):即為y.c> ========= adjust(bx): [bx: x現在是b但x處還缺一個b / x處有2個b ] 1.bx=r: bx直接由r變b,return 2.bx=root: return 3-1.紅弟弟(爸爸必為黑):弟弟轉到爸爸位置,爸爸由黑變紅,弟弟紅變黑,繼續adjust(bx) b1 b2 / \ / \ bx r2 r1 v / \ / \ / \ s t u v bx u / \ s t <uv值2黑,bx值1黑,st值0黑> (1,b1,2) => (1,r1,2) => 繼續處理bx 3-2.黑弟弟+2個黑姪子/nil(爸爸顏色不定):弟弟由黑變紅,往上:adjust(w1) w1 w1 / \ / \ bx b2 bx r2 / \ / \ / \ / \ s t b3 b4 s t b3 b4 / \ / \ / \ / \ u v w y u v w y <bx值1黑;stuvwy值0黑> (1,w1,2) => (1,w1,1),但w1以下全部少1黑 => 往上處理w1 3-3.黑弟弟+與弟弟同一邊的姪子黑+另一邊姪子紅:黑弟弟轉向黑姪子,弟弟黑變紅,紅姪 子紅變黑,繼續adjust(bx) w1 w1 / \ / \ bx b2 bx b3 / \ / \ / \ / \ s t r3 b4 s t u r2 / \ / \ / \ u v w y v b4 / \ w y <bx,u,v值1黑;stwy值0黑> (1,w1,2) => (1,w1,2) => 繼續處理bx 3-4.黑弟弟+與弟弟同一邊的姪子紅+另一邊不重要:爸爸往你的方向轉下來,紅爸爸變黑, 紅姪子變爸爸原本的顏色,黑弟弟變紅 w1 w3 / \ / \ bx b3 b1 b2 / \ / \ / \ / \ s t u r2 bx u v w / \ / \ v w s t <bx,u,v,w值1黑;st值0黑> (1,w1,2) => (1,b1,1),(2,w3,2) => 終於adjust完了!!Q____Q ============= 範例: http://web.ncyu.edu.tw/~wangch/course/991/al/noterb2.pdf --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.143
1F:→ jenny2921:如果推文超過10,我就把我所有紅黑樹的整裡都貼上來!!! 01/13 21:57
2F:推 rod13824:先推一下 01/13 22:05
3F:推 LesMiserable:http://gauss.ececs.uc.edu/RedBlack/redblack.html 01/13 22:09
4F:→ LesMiserable:可以用這個網頁的applet試著加node減node,看怎麼變化 01/13 22:10
5F:推 andy74139:整理好多噢!!推推!! 01/13 22:10
6F:→ LesMiserable:不過還是要推一下,Jennya超認真! (大拇指) 01/13 22:10
7F:推 peteranny:雖然是單班 但推jennya人超好!!XDD 01/13 22:23
8F:推 ilovejun:推囉XD 01/13 22:35
9F:推 mikein125:人真好XDD 01/13 22:36
10F:推 rock1246:謝謝! 01/13 22:43
11F:→ k1923456:雖然我是單班得可以我還想看~~推一下 01/13 22:46
12F:推 s864372002:布魯斯推推~ 01/13 23:10
13F:推 barry800414:推一發 01/14 01:07
14F:推 ArInbl: Q__Q GG 01/14 01:13
15F:推 ArInbl: 春小懂 01/14 01:15
[紅黑樹] *是棵平衡的樹: 保證從root到某個leaf的simple path一定不會超過從root到任何其他 leaf的兩倍長 *operation可以都在O(log n)內完成 *operations: 1. 找 2. 插入某element 3. 殺掉某element 4. 找最大or找最小 element *使用extended binary tree: 沒有children的地方都補上external node, 又叫nil *規則們: 1.每個node不是黑就是紅 2.root是黑色的 3.每個leaf (external node, or nil)都是黑色 4.如果一個node是紅的, 則它的children都是黑的 5.對每個node來說, 從它到他的所有子孫葉子node的路徑上含有一樣數目的黑色node *Black height: bh(x) = 從x到任何一個它的子孫葉子node遇到的black node個數 (因為 都一樣, 所以可以是任何一個) / 不包含node x自己 / external node或nil(葉子node) 的black height為0 *一個有n個node的紅黑樹,最高為2log(n+1) 1.IN(x) >= 2^(bh(x))-1 (IN = internal node, IN(x)為x底下的IN,含x) (1)when h(x)=0, x is a leaf, bh(x)=0, IN(x)=2^0-1=0 (2)when h(x)>0, x has two children and x is an internal node, bh(x's child) = bh(x) <when child is red> or bh(x)-1 <when child is black>, 設IN(x's child) >= 2^(bh(x)-1)-1 (3)則IN(x) >= 2*{2^(bh(x)-1)-1}+1=2^(bh(x))-1 成立, 故得證 2.紅node的children必為黑 => 從任一node到leaf,至少有一半以上的node為黑 => bh(root) >= h/2 3.n=IN(root) >= 2^(bh(root))-1 >= 2^(h/2)-1 => 2log(底2)(n+1) >= h => h <= 2log(n+1) =>operation <1.找 4.找最大or找最小element> 可以在O(log n)內完成 * / / y left rotate(T,x) x / \ <= / \ x C => A y / \ right rotate(T,y) / \ A B B C *Insertion 1.用原本的binary search tree插入的方法 2.z的兩個children都指到nil node(nil is black) 3.z為紅色 4.處理不符合紅黑樹規則的部分: (1)不會違反規則們1.3.5.(不違反5.因為插入的是紅的取代掉一個黑nil,但紅點下又各 有2個黑nil) (2)若違反2.則表示整棵tree只有此node,將此node變黑即可. (3)若違反4.則表示此node's parent is red(紅爸爸) ===紅叔叔=== 叔叔和爸爸由紅變黑,爺爺由黑變紅,&繼續往上處理 ===黑叔叔=== <1>你跟你爸同一邊: 爸爸和爺爺轉,爸爸由紅變黑,爺爺由黑變紅,你還是紅的 <2>你跟你爸不同邊: 你跟你爸轉,你跟你爸還是一樣都紅色,再你跟你爺爺轉,你變黑 色,爺爺變紅色 5.最糟的狀況:紅叔叔一直重複發生,每次紅node往上移兩層, 執行時間最糟要花跟高度成 正比的時間= O(log n) 6.如果是黑叔叔的話: O(1) (因為最多只要rotate2次,不會重複發生) *Deletion ========= delete(n) 1.沒有手/沒有child/degree=0/是leaf => 直接拿掉n (1)n=r: color-OK, bh-OK (2)n=b: n=root: OK (tree will be empty) else: color-OK, bh-NOK, adjust(n.p.nil) 2.有一隻手/degree=1 => 把n.child接到n.parent (1)n=r: color-OK, bh-OK (2)n=b: adjust(n.c) 3.有兩隻手 => 取左手最大(或右手最小)的點y來補, y變成n的顏色 (1)y=r: color-OK, bh-OK (2)y=b: adjust(y.c) <y沒有手:y.c=nil / y有左手(右手):即為y.c> ========= adjust(x): [x: x現在是b但x處還缺一個b / x現在是r但x處還缺一個b ] 1.x=r: x直接由r變b,return //因為這邊少1個b的話,r變b剛剛好 //以下x皆為b,故以bx代稱 2.bx=root: return //因為在root地方b少1的話也沒差了 3-1.紅弟弟(爸爸必為黑):弟弟往上轉到爸爸位置,爸爸由黑變紅,弟弟由紅變黑,繼續 adjust(bx) b1 b2 / \ / \ bx r2 r1 v / \ / \ / \ s t u v bx u / \ s t <uv值2黑,bx值1黑,st值0黑> (1,b1,2) => (1,r1,2) => 繼續處理bx 3-2.黑弟弟+2個黑姪子/nil(爸爸顏色不定):弟弟由黑變紅,往上:adjust(w1) w1 w1 / \ / \ bx b2 bx r2 / \ / \ / \ / \ s t b3 b4 s t b3 b4 / \ / \ / \ / \ u v w y u v w y <bx值1黑;stuvwy值0黑> (1,w1,2) => (1,w1,1),但w1以下全部少1黑 => 往上處理w1 3-3.黑弟弟+與弟弟同一邊的姪子黑+另一邊姪子紅:黑弟弟轉向黑姪子,弟弟黑變紅,紅姪 子紅變黑,繼續adjust(bx) w1 w1 / \ / \ bx b2 bx b3 / \ / \ / \ / \ s t r3 b4 s t u r2 / \ / \ / \ u v w y v b4 / \ w y <bx,u,v值1黑;stwy值0黑> (1,w1,2) => (1,w1,2) => 繼續處理bx 3-4.黑弟弟+與弟弟同一邊的姪子紅+另一邊不重要:爸爸往你的方向轉下來,紅爸爸變黑, 紅姪子變爸爸原本的顏色,黑弟弟變紅 w1 w3 / \ / \ bx b3 b1 b2 / \ / \ / \ / \ s t u r2 bx u v w / \ / \ v w s t <bx,u,v,w值1黑;st值0黑> (1,w1,2) => (1,b1,1),(2,w3,2) => 終於adjust完了!!Q____Q ========= http://web.ncyu.edu.tw/~wangch/course/991/al/noterb2.pdf 複雜度: O(3-2)=O(log n) / O(其他)=O(1) => O(log n) ※ 編輯: jenny2921 來自: 140.112.221.4 (01/14 03:05)
16F:推 peer4321:推jennya人超好!! 01/14 08:22
17F:推 paul112004:推! 01/14 08:56
18F:推 rock1246:推!! 不過考完了QQ 01/14 13:20







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP