Presentation is loading. Please wait.

Presentation is loading. Please wait.

ساختمان داده ها و الگوريتم ها

Similar presentations


Presentation on theme: "ساختمان داده ها و الگوريتم ها"— Presentation transcript:

1 ساختمان داده ها و الگوريتم ها
Red-Black Trees ساختمان داده ها و الگوريتم ها

2 Red-Black Trees (RBT) درختهاي قرمز و سياه (Red/Black Trees) نوعي درخت جستجوي دودويي (Binary Search Tree) است که هر گره آن علاوه بر فيلدهاي ديگر، يک بيت رنگ نيز دارد بيت رنگ دوحالته (قرمز يا سياه) است هدف از اين بيت، تضمين توازن نسبي درخت است در درخت جستجوي دودويي، عمليات جستجو ، افزودن و حذف گره هزينه اي متناسب با عمق درخت دارند. عمق درخت متوازن با N گره از مرتبه O(log N) است. عمق درخت نامتوازن با N ‌ گره از مرتبه O(N) ‌است.

3 Red-black Tree(RBT) RBT = BST + 1 color bit بقيه مشخصات همانند BST است ارث بري Inheritance key, left, right, p. هر گره درخت دقيقا دو فرزند دارد به جاي فرزند نداشته، null استفاده مي کنيم تمام برگهاي تهي ( فرزنداني که وجود ندارند،) به رنگ سياه هستند براي مشخص نمودن برگهاي تهي ، يک گره کمکي nil مي سازيم و از آن به جاي تمام فرزندان تهي درخت استفاده مي کنيم. مشابه گره first ‌ در ليستهاي پيوندي

4 Red-black Properties هر گره درخت يا سياه است يا قرمز ريشه درخت سياه است هر گره تهي(null) سياه است اگر گرهي قرمز باشد، هر دو فرزند آن سياه هستند همه مسيرهايي که از يک گره شروع شده و به برگ مي رسند، دقيقا داراي تعداد مساوي گره سياه هستند.

5 مثال RBT توجه: هر گره درخت دقيقا دو فرزند دارد؛ به جاي فرزند نداشته، null استفاده مي کنيم 26 17 41 null[T] 30 47 38 50

6 ارتفاع (عمق) درخت RBT ارتفاع گره h(x) : ارتفاع يک گره برابر با طول بزرگترين مسير گره به برگهاي درخت است. ارتفاع سياه گره x bh(x) : تعداد گرههاي سياه در هر يک از مسيرهايي است که از اين گره شروع مي شوند و به برگ null(T) ختم مي شوند برگ null(T) جزء مسير محسوب مي شود خود گره x جزء مسير محسوب نمي شود ارتفاع سياه يک درخت RBT برابر با ارتفاع سياه ريشه آن است

7 Height of a RBT 26 h: ارتفاع bh:ارتفاع سياه bh(x) ≤ h(x) ≤ 2 bh(x)
طول بلندترين مسير از يک گره به برگي از درخت، حداکثر دو برابر طول کوتاهترين مسير از همان گره به برگهاي درخت است. 17 41 h=2 bh=1 h=2 bh=1 30 47 h=1 bh=1 38 h=1 bh=1 50 null[T]

8 لم1 : ارتفاع درخت RBT لم1: طول بزرگترين مسير از يک گره به برگ حداکثر دو برابر طول کوتاهترين مسير است: اثبات: تعداد گرههاي‌ سياه روي مسيرهاي که از گره x‌شروع شده و به برگي مي رسند برابر bh(x) است ( خاصيت 5) اگر طول کوتاهترين مسير را با s(x)‌نشان دهيم، bh(x) <= s(x) بنابر خاصيت چهارم، روي مسيرهاي مذکور گرههاي قرمز متوالي وجود ندارند و همه مسيرها هم به گره سياه تمام مي شوند. بنابراين روي بلندترين مسير، ترتيب گرههاي قرمز و سياه حداکثر يک در ميان و به تعداد مساوي است: h(x) <= 2bh(x) درنهايت h(x) <= 2s(x)

9 تعداد گرههاي RBT لم 2: تعداد گرههاي داخلي درختچه واقع در گره x ‌حداقل برابر است با:2bh(x)–1. اثبات ( با استفاده از استقرا رياضي) اگر h(x)=0 ‌، آنگاه x‌برگ است.‌ و ارتفاع سياه آن نيز صفر است. در نتيجه تعداد گرههاي درختچه برابر = 0 است اگر h(x) =h>0 ‌ و فرض کنيم ارتفاع سياه گره x‌برابر bh(x) = b باشد: هر کدام از فرزندان x ارتفاعي برابر با h-1 خواهند داشت. اگر فرزند درخت قرمز باشد، ارتفاع سياه آن b و در غير اين صورت b-1 ‌خواهد بود بنابر فرض استقرا هر درختچه شروع شده از فرزند x حداقل-1 2bh(x) -1 گره خواهد داشد و درنتيجه، درختچه واقع در x حداقل 2(2bh(x) ) + 1‌گره خواهد داشت  2 (2bh(x) – 1 – 1)+1= 2bh(x) – 1 تعداد گرههاي درختچه واقع در x

10 حد ارتفاع RBT لم1: طول بزرگترين مسير از يک گره به برگ حداکثر دو برابر طول کوتاهترين مسير است h(x) <= 2bh(x) لم 2: تعداد گرههاي داخلي درختچه واقع در گره x ‌حداقل برابر است با:2bh(x)–1. لم 3: حداکثر ارتفاع يک درخت RBT با n گره، برابر است با: 2 log (n+1) اثبات لم دوم: , n  2bh – 1 لم اول: bh h/2  n  2h/2 – 1  h  2 lg(n + 1).

11 عمليات روي RBT همانند BST ، تمام عمليات با O (log n)‌قابل انجام هستند

12 Left Rotation P(x) P(x) A A α α B β γ B β γ

13 Left Rotation P(x) P(x) A A B α α B β γ β γ

14 Left Rotation … … γ B A α β A α B β γ  Left Rotation  Right Rotation
y A α β A x α B β γ

15 Left Rotation Example

16 Insert a node 11 2 14 1 7 15 5 8 4 Insert (4) Tree color violation

17 Insert a node 11 2 14 1 7 15 5 8 4 y=right(p(p(z)) if color[y] = RED
then color[p[z]] ← BLACK color[y] ← BLACK color[p[p[z]]] ← RED z ← p[p[z]] 4 z FIX-UP Color violation

18 Insert a node 11 2 1 14 7 8 15 5 4 z if z = right[p[z]] then z ← p[z]
LEFT-ROTATE(T, z) color[p[z]] ← BLACK color[p[p[z]]] ← RED RIGHT-ROTATE(T, p[p[z]]) 4 FIX-UP Color violation

19 Insert a node 11 14 7 15 2 8 5 1 4 z if z = right[p[z]] then z ← p[z]
LEFT-ROTATE(T, z) color[p[z]] ← BLACK color[p[p[z]]] ← RED RIGHT-ROTATE(T, p[p[z]]) 4 FIX-UP Color violation

20 Insert a node 7 2 11 14 5 1 8 15 4 z if z = right[p[z]] then z ← p[z]
LEFT-ROTATE(T, z) color[p[z]] ← BLACK color[p[p[z]]] ← RED RIGHT-ROTATE(T, p[p[z]]) FIX-UP Color violation

21 Delete a node 11 2 14 1 7 15 5 8 z Delete Node 7
RB Tree Coloring violation

22 Delete Node 11 2 14 1 7 15 5 8 nil Delete Node z = 7 z y = succssor(z)
x nil

23 Delete Node 11 2 14 1 7 15 5 8 nil z y = successor(z) x
Copy Node 8 data to node 7

24 Delete Node 11 2 14 z 1 8 15 5 8 x nil If color(y) = black, then fix-up color violation at x

25 Delete Node 11 2 14 z 1 8 15 5 x nil گره x يا فرزند گره حذف شده است يا گره nil(T)

26 Delete Node 11 2 14 1 7 15 5 8 nil Delete Node z = 2 z y = succssor(z)
x nil

27 Delete Node 11 2 14 1 7 15 5 8 nil Delete Node z = 2 z y = succssor(z)
x nil

28 Delete Node 11 5 14 1 7 15 5 8 nil Delete Node z = 2 z y = succssor(z)
x nil

29 Delete Node 11 Delete Node z = 5 z 5 14 y 1 7 15 x 8 nil

30 Delete Node 11 Delete Node z = 5 z 7 14 y 1 7 15 x 8 nil

31 Delete Node 11 Delete Node z = 5 z 7 14 y 1 7 15 x 8 nil

32 Delete Node 11 Delete Node z = 5 z 7 14 y 1 15 x 8 nil Color Violation

33 نقض شرايط RBT اگر y (گره حذف شده) سياه باشد، در حالات زير خاصيت RBT نقض مي شود:( x گرهي است که قبلا فرزند y بوده است. اگر y فرزندي نداشته باشد، x گره nil درخت است.) y ريشه درخت بوده و فرزند جایگزین شده قرمز است  x، ريشه جديد، قرمز شده است (نقض 1) p(y)=p(x) قرمز است  x ,p(x) هر دو قرمزند ( نقض 4) هر مسيري که قبلا شامل گره y بود، حالا يک گره سياه کمتر از بقيه دارد( نقض 5) حل: فرض مي کنيم گره x داراي يک نشان سياه اضافي است خاصيت 1 نقض مي شود با يک سري عمليات باسازي و تغيير رنگ، خواص مورد نظر تامين مي شوند

34 اصلاح درخت انتقال گره x به سطوح بالاتر تا جايي که:

35 Delete Node y گره حذف شده و x گرهي است که قبلا فرزند y بوده است. اگر y فرزندي نداشته باشد، x گره nil درخت است. RB-DELETE-FIXUP(T, x) while x ≠ root[T] and color[x]= BLACK do if x = left[p[x]] then w ← right[p[x]] //Four different cases else (same as then clause with "right" and "left" exchanged) color[x] ← BLACK

36 اصلاح رنگ درخت بعد از حذف يک گره
RB-Delete-Fixup(T, x) while x  root[T ] and color[x] = BLACK do if x = left[p[x]] then w  right[p[x]] if color[w] = RED then color[w]  BLACK // Case 1 color[p[x]]  RED // Case 1 LEFT-ROTATE(T, p[x]) // Case 1 w  right[p[x]] // Case 1

37 اصلاح رنگ - ادامه RB-Delete-Fixup(T, x) (Contd.)
/* x is still left[p[x]] */ if color[left[w]] = BLACK and color[right[w]] = BLACK then color[w]  RED // Case 2 x  p[x] // Case 2 else if color[right[w]] = BLACK then color[left[w]]  BLACK // Case 3 color[w]  RED // Case 3 RIGHT-ROTATE(T,w) // Case 3 w  right[p[x]] // Case 3 color[w]  color[p[x]] // Case 4 color[p[x]]  BLACK // Case 4 color[right[w]]  BLACK // Case 4 LEFT-ROTATE(T, p[x]) // Case 4 x  root[T ] // Case 4 else (same as then clause with “right” and “left” exchanged) color[x]  BLACK

38 حالت اول: w قرمز است p[x] B D w x B E A D x A C C E   new w    
فرزندان w سياه هستند رنگ w‌ ‌و p(x) را باهم عوض کن ( دقت کنيد: p(x) حتما سياه است! (چرا؟)) left rotate(T , p(x)) برادر جديد x سياه است. زيرا يکي از فرزندان پيشين w است نهايتا گره x‌ داراي دو سياه و گره w داراي يک سياه است يکي از حالات 2- 4 اتفاق مي افتد

39 حالت دوم: w و فرزندانش سياه هستند
p[x] c new x c B B w x A D A D C E C E w و فرزندانش سياه هستند از گره x و w يک سياه کم کرده و به پدر اين دو يک سياه اضافه کن حالا گره x‌ داراي يک سياه است و يک گره عادي است p(x) داراي يک مشخصه سياه اضافي است  الگوريتم را از x جديد، p(x) ادامه بده اگر p(x) قرمز بوده و از حالت اول به اين حالت آمده ايم رنگ p(x) را سياه کن  الگوريتم خاتمه پيدا مي کند

40 حالت سوم: w و فرزند راست سياه هستند و فرزند چپ قرمز است
c c B B w x x new w A D A C D C E E w و فرزند راست سياه هستند و فرزند چپ قرمز است رنگ w‌ و فرزند چپ را باهم عوض کن right rotate(w) w سياه است و حالا فرزند راست آن قرمز است  چند تغيير رنگي ساده لازم است!

41 حالت چهارم: w سياه و فرزند راست آن قرمز است
c B D w x B E A D x c’ A C C E حالت چهارم: w سياه و فرزند راست آن قرمز است w را مشابه p(x) رنگ کن p(x) و فرزند راست w را سياه رنگ کن left rotate p[x]. سياه اضافي گره x را حذف کن  پايان الگوريتم! براي پايان الگوريتم ، x جديد به ريشه درخت اشاره مي کند!

42 آناليز الگوريتم حذف گره : O ( log n ) تامين خاصيت رنگي
تنها حالت دوم ممکن است تکرار شود در هر تکرار گره x‌ يک سطح در درخت بالاتر مي رود حداکثر تکرار اين مرحله از الگوريتم ارتفاع درخت است هزينه نهايي O ( log n )

43 جمع بندي RBT درخت جستجوي دودويي با مشخصه اضافه “رنگ” است
با مديريت خواص RBT‌مي توان تمام عمليات درخت جستجوي دودويي را با هزينه O(log n) انجام داد که در آن n تعداد گرههاي درخت است عمليات حذف و اضافه کردن گره به درخت ممکن است سبب نقض خواص رنگي RBT شوند. در اين صورت بايد درخت را از نظر رنگي اصلاح کرد

44 تمرين الگوريتمي بنويسيد که يک درخت جستجوي دوديي رنگ شده را بگيرد و تعيين کند آيا اين درخت يک درخت سياه و قرمز است يا نه! آيا مي توانيد الگوريتمي در حالت کلي ارائه دهيد که هر درخت دلخواهي را به درخت RBT تبديل کند ؟مرتبه اجرايي الگوريتم شما چيست ؟


Download ppt "ساختمان داده ها و الگوريتم ها"

Similar presentations


Ads by Google