توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : سوال ساختمان داده
بانوثریا
3rd September 2011, 04:55 PM
سلام خسته نباشید لطفا اگه در مورد درخت قرمز- سیاه اطلاعاتی دارید از نحوه ایجاد تا نحوه حذف بهم اطلاعات بدید ممنون
e.einitabar
3rd September 2011, 08:26 PM
سلام
دوست من اینارو با سرچ واست گیرآوردم
امیدوارم که به دردت بخوره
درخت سرخ-سیاه
در علم رایانه، ساختمان داده (http://www.njavan.com/wiki/%D8%B3%D8%A7%D8%AE%D8%AA%D9%85%D8%A7%D9%86_%D8%AF% D8%A7%D8%AF%D9%87) درخت قرمز-سیاه، یک نوع درخت جستجوی دودویی (http://www.njavan.com/wiki/%D8%AF%D8%B1%D8%AE%D8%AA_%D8%AC%D8%B3%D8%AA%D8%AC% D9%88%DB%8C_%D8%AF%D9%88%D8%AF%D9%88%DB%8C%DB%8C) خود متوازن کننده است. این ساختمان داده را ابتدا رودولف بایر (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3D%25D8%25B1%25D9%2588%25D8 %25AF%25D9%2588%25D9%2584%25D9%2581_%25D8%25A8%25D 8%25A7%25DB%258C%25D8%25B1%26action%3Dedit%26redli nk%3D1%26preload%3D%25D8%25A7%25D9%2584%25DA%25AF% 25D9%2588%3A%25D8%25A7%25DB%258C%25D8%25AC%25D8%25 A7%25D8%25AF%2B%25D9%2585%25D9%2582%25D8%25A7%25D9 %2584%25D9%2587%2F%25D8%25A7%25D8%25B3%25D8%25AA%2 5D8%25AE%25D9%2588%25D8%25A7%25D9%2586%25E2%2580%2 58C%25D8%25A8%25D9%2586%25D8%25AF%25DB%258C%26edit intro%3D%25D8%25A7%25D9%2584%25DA%25AF%25D9%2588%3 A%25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25A F%2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9% 2587%2F%25D8%25A7%25D8%25AF%25DB%258C%25D8%25AA%25 E2%2580%258C%25D9%2586%25D9%2588%25D8%25AA%25DB%25 8C%25D8%25B3%26summary%3D%25D8%25A7%25DB%258C%25D8 %25AC%25D8%25A7%25D8%25AF%2B%25DB%258C%25DA%25A9%2 B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%258 7%2B%25D9%2586%25D9%2588%2B%25D8%25A7%25D8%25B2%2B %25D8%25B7%25D8%25B1%25DB%258C%25D9%2582%2B%25D8%2 5A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%25DA%2 5AF%25D8%25B1%26nosummary%3D%26prefix%3D%26minor%3 D%26create%3D%25D8%25AF%25D8%25B1%25D8%25B3%25D8%2 5AA%2B%25DA%25A9%25D8%25B1%25D8%25AF%25D9%2586%2B% 25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2587% 2B%25D8%25AC%25D8%25AF%25DB%258C%25D8%25AF) در سال ۱۹۷۲ با نام «درخت دودویی B متقارن» ابداع کرد ولی نام جدید آن از پایان نامهٔ لیو.جی.گیباس (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3D%25D9%2584%25DB%258C%25D9 %2588.%25D8%25AC%25DB%258C.%25DA%25AF%25DB%258C%25 D8%25A8%25D8%25A7%25D8%25B3%26action%3Dedit%26redl ink%3D1%26preload%3D%25D8%25A7%25D9%2584%25DA%25AF %25D9%2588%3A%25D8%25A7%25DB%258C%25D8%25AC%25D8%2 5A7%25D8%25AF%2B%25D9%2585%25D9%2582%25D8%25A7%25D 9%2584%25D9%2587%2F%25D8%25A7%25D8%25B3%25D8%25AA% 25D8%25AE%25D9%2588%25D8%25A7%25D9%2586%25E2%2580% 258C%25D8%25A8%25D9%2586%25D8%25AF%25DB%258C%26edi tintro%3D%25D8%25A7%25D9%2584%25DA%25AF%25D9%2588% 3A%25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25 AF%2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9 %2587%2F%25D8%25A7%25D8%25AF%25DB%258C%25D8%25AA%2 5E2%2580%258C%25D9%2586%25D9%2588%25D8%25AA%25DB%2 58C%25D8%25B3%26summary%3D%25D8%25A7%25DB%258C%25D 8%25AC%25D8%25A7%25D8%25AF%2B%25DB%258C%25DA%25A9% 2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%25 87%2B%25D9%2586%25D9%2588%2B%25D8%25A7%25D8%25B2%2 B%25D8%25B7%25D8%25B1%25DB%258C%25D9%2582%2B%25D8% 25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%25DA% 25AF%25D8%25B1%26nosummary%3D%26prefix%3D%26minor% 3D%26create%3D%25D8%25AF%25D8%25B1%25D8%25B3%25D8% 25AA%2B%25DA%25A9%25D8%25B1%25D8%25AF%25D9%2586%2B %25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2587 %2B%25D8%25AC%25D8%25AF%25DB%258C%25D8%25AF) و رابرت سجویک (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3D%25D8%25B1%25D8%25A7%25D8 %25A8%25D8%25B1%25D8%25AA_%25D8%25B3%25D8%25AC%25D 9%2588%25DB%258C%25DA%25A9%26action%3Dedit%26redli nk%3D1%26preload%3D%25D8%25A7%25D9%2584%25DA%25AF% 25D9%2588%3A%25D8%25A7%25DB%258C%25D8%25AC%25D8%25 A7%25D8%25AF%2B%25D9%2585%25D9%2582%25D8%25A7%25D9 %2584%25D9%2587%2F%25D8%25A7%25D8%25B3%25D8%25AA%2 5D8%25AE%25D9%2588%25D8%25A7%25D9%2586%25E2%2580%2 58C%25D8%25A8%25D9%2586%25D8%25AF%25DB%258C%26edit intro%3D%25D8%25A7%25D9%2584%25DA%25AF%25D9%2588%3 A%25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25A F%2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9% 2587%2F%25D8%25A7%25D8%25AF%25DB%258C%25D8%25AA%25 E2%2580%258C%25D9%2586%25D9%2588%25D8%25AA%25DB%25 8C%25D8%25B3%26summary%3D%25D8%25A7%25DB%258C%25D8 %25AC%25D8%25A7%25D8%25AF%2B%25DB%258C%25DA%25A9%2 B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%258 7%2B%25D9%2586%25D9%2588%2B%25D8%25A7%25D8%25B2%2B %25D8%25B7%25D8%25B1%25DB%258C%25D9%2582%2B%25D8%2 5A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%25DA%2 5AF%25D8%25B1%26nosummary%3D%26prefix%3D%26minor%3 D%26create%3D%25D8%25AF%25D8%25B1%25D8%25B3%25D8%2 5AA%2B%25DA%25A9%25D8%25B1%25D8%25AF%25D9%2586%2B% 25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2587% 2B%25D8%25AC%25D8%25AF%25DB%258C%25D8%25AF) گرفته شدهاست. این ساختمان داده پیچیده است با این حال اعمال مربوط به آن حتی دربدترین حالت نیز زمان اجرای خوبی دارند، در واقع زمان جستجو، حذف، و درج برای این درخت مانند درخت AVL (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3D%25D8%25AF%25D8%25B1%25D8 %25AE%25D8%25AA%25E2%2580%258C%25D9%2587%25D8%25A7 %25DB%258C_AVL%26action%3Dedit%26redlink%3D1%26pre load%3D%25D8%25A7%25D9%2584%25DA%25AF%25D9%2588%3A %25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF %2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2 587%2F%25D8%25A7%25D8%25B3%25D8%25AA%25D8%25AE%25D 9%2588%25D8%25A7%25D9%2586%25E2%2580%258C%25D8%25A 8%25D9%2586%25D8%25AF%25DB%258C%26editintro%3D%25D 8%25A7%25D9%2584%25DA%25AF%25D9%2588%3A%25D8%25A7% 25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%2B%25D9%25 85%25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2F%25D8 %25A7%25D8%25AF%25DB%258C%25D8%25AA%25E2%2580%258C %25D9%2586%25D9%2588%25D8%25AA%25DB%258C%25D8%25B3 %26summary%3D%25D8%25A7%25DB%258C%25D8%25AC%25D8%2 5A7%25D8%25AF%2B%25DB%258C%25DA%25A9%2B%25D9%2585% 25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2B%25D9%25 86%25D9%2588%2B%25D8%25A7%25D8%25B2%2B%25D8%25B7%2 5D8%25B1%25DB%258C%25D9%2582%2B%25D8%25A7%25DB%258 C%25D8%25AC%25D8%25A7%25D8%25AF%25DA%25AF%25D8%25B 1%26nosummary%3D%26prefix%3D%26minor%3D%26create%3 D%25D8%25AF%25D8%25B1%25D8%25B3%25D8%25AA%2B%25DA% 25A9%25D8%25B1%25D8%25AF%25D9%2586%2B%25D9%2585%25 D9%2582%25D8%25A7%25D9%2584%25D9%2587%2B%25D8%25AC %25D8%25AF%25DB%258C%25D8%25AF) لگاریتمی است ( O(log(n)) که n تعداد گرههای موجود در درخت است). مزیت عمده این ساختمان داده نسبت به درخت AVL (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3D%25D8%25AF%25D8%25B1%25D8 %25AE%25D8%25AA_AVL%26action%3Dedit%26redlink%3D1% 26preload%3D%25D8%25A7%25D9%2584%25DA%25AF%25D9%25 88%3A%25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8 %25AF%2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%2 5D9%2587%2F%25D8%25A7%25D8%25B3%25D8%25AA%25D8%25A E%25D9%2588%25D8%25A7%25D9%2586%25E2%2580%258C%25D 8%25A8%25D9%2586%25D8%25AF%25DB%258C%26editintro%3 D%25D8%25A7%25D9%2584%25DA%25AF%25D9%2588%3A%25D8% 25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%2B%25 D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2F %25D8%25A7%25D8%25AF%25DB%258C%25D8%25AA%25E2%2580 %258C%25D9%2586%25D9%2588%25D8%25AA%25DB%258C%25D8 %25B3%26summary%3D%25D8%25A7%25DB%258C%25D8%25AC%2 5D8%25A7%25D8%25AF%2B%25DB%258C%25DA%25A9%2B%25D9% 2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2B%25 D9%2586%25D9%2588%2B%25D8%25A7%25D8%25B2%2B%25D8%2 5B7%25D8%25B1%25DB%258C%25D9%2582%2B%25D8%25A7%25D B%258C%25D8%25AC%25D8%25A7%25D8%25AF%25DA%25AF%25D 8%25B1%26nosummary%3D%26prefix%3D%26minor%3D%26cre ate%3D%25D8%25AF%25D8%25B1%25D8%25B3%25D8%25AA%2B% 25DA%25A9%25D8%25B1%25D8%25AF%25D9%2586%2B%25D9%25 85%25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2B%25D8 %25AC%25D8%25AF%25DB%258C%25D8%25AF) این است که اعمال درج و حذف با تنها یک بار پیمایش درخت از بالا به پایین و تغییر رنگ گرهها انجام میشوند و در نتیجه پیاده سازی این درخت از درخت AVL سادهتر است .
محتویات
[نهفتن (http://www.njavan.com/forum/#)]
۱ ویژگیها (http://www.njavan.com/forum/#.D9.88.DB.8C.DA.98.DA.AF.DB.8C.E2.80.8C.D9.87.D8. A7)
۲ شباهت به درختهای بی مرتبه 4 (http://www.njavan.com/forum/#.D8.B4.D8.A8.D8.A7.D9.87.D8.AA_.D8.A8.D9.87_.D8.A F.D8.B1.D8.AE.D8.AA.E2.80.8C.D9.87.D8.A7.DB.8C_.D8 .A8.DB.8C_.D9.85.D8.B1.D8.AA.D8.A8.D9.87_4)
۳ کاربردها و ساختمان دادههای مرتبط (http://www.njavan.com/forum/#.DA.A9.D8.A7.D8.B1.D8.A8.D8.B1.D8.AF.D9.87.D8.A7_ .D9.88_.D8.B3.D8.A7.D8.AE.D8.AA.D9.85.D8.A7.D9.86_ .D8.AF.D8.A7.D8.AF.D9.87.E2.80.8C.D9.87.D8.A7.DB.8 C_.D9.85.D8.B1.D8.AA.D8.A8.D8.B7)
۴ عملگرها (http://www.njavan.com/forum/#.D8.B9.D9.85.D9.84.DA.AF.D8.B1.D9.87.D8.A7)
۵ اضافه کردن (http://www.njavan.com/forum/#.D8.A7.D8.B6.D8.A7.D9.81.D9.87_.DA.A9.D8.B1.D8.AF .D9.86)
۶ منابع (http://www.njavan.com/forum/#.D9.85.D9.86.D8.A7.D8.A8.D8.B9)
۷ پیوند به بیرون (http://www.njavan.com/forum/#.D9.BE.DB.8C.D9.88.D9.86.D8.AF_.D8.A8.D9.87_.D8.A 8.DB.8C.D8.B1.D9.88.D9.86)
۷.۱ پیش نمایش (http://www.njavan.com/forum/#.D9.BE.DB.8C.D8.B4_.D9.86.D9.85.D8.A7.DB.8C.D8.B4 )
[ویرایش (http://www.njavan.com/w/index.php?title=%D8%AF%D8%B1%D8%AE%D8%AA_%D8%B3%D8 %B1%D8%AE-%D8%B3%DB%8C%D8%A7%D9%87&action=edit§ion=1)] ویژگیها
http://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Red-black_tree_example.svg/500px-Red-black_tree_example.svg.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_example.svg) http://bits.wikimedia.org/skins-1.17/common/images/magnify-clip.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_example.svg)
نمونهٔ یک درخت قرمز-سیاه
درخت قرمز-سیاه یک درخت جستجوی دودویی (http://www.njavan.com/wiki/%D8%AF%D8%B1%D8%AE%D8%AA_%D8%AC%D8%B3%D8%AA%D8%AC% D9%88%DB%8C_%D8%AF%D9%88%D8%AF%D9%88%DB%8C%DB%8C) است که ویژگیهای زیر را دارد:
هرگره با یکی از دو رنگ سیاه (http://www.njavan.com/wiki/%D8%B3%DB%8C%D8%A7%D9%87) یا قرمز (http://www.njavan.com/wiki/%D9%82%D8%B1%D9%85%D8%B2) رنگ آمیزی میشود .
ریشه همیشه به رنگ سیاه است .
اگر گرهای قرمز باشد فرزندان آن باید سیاه باشند.
تمامی مسیرها از یک گره به برگها (گرههای null) باید دارای تعداد مساوی گره سیاه باشند.
تمامی برگها سیاه هستند.(برگ گرهای است که فرزندی نداشته باشد- همان گرههای null)
ویژگیهای بالا موجب این خصوصیت مهم درختهای قرمز-سیاه میشوند:
اگر یک درخت قرمز سیاه n گره غیر null داشته باشد ارتفاع درخت حداکثر 2log(n + 1) خواهد بود.
ویژگی فوق باعث میشود تا درختهای قرمز-سیاه کارایی مناسبی در اعمال جستجو، درج، و حذف داشته باشند.
همچنین به خاطر این که در تمام مسیرهای از ریشه به برگ، تعداد گرههای سیاه برابر است (ویژگی ۴) و ممکن نیست دو گره قرمز پشت سر هم قراربگیرند(ویژگی ۳)، در این نوع درختها طول بلندترین مسیر از ریشه تا برگ هیچ وقت بزرگتر از دو برابر طول کوتاهترین مسیر ریشه تا برگ نمیشود.
با توجه به ویژگیهای بالا درختهای قرمز-سیاه (بر خلاف درختهای جستجوی دودویی (http://www.njavan.com/wiki/%D8%AF%D8%B1%D8%AE%D8%AA_%D8%AC%D8%B3%D8%AA%D8%AC% D9%88%DB%8C_%D8%AF%D9%88%D8%AF%D9%88%DB%8C%DB%8C) معمولی) هیچ وقت دچار عدم توازن شدید نمیشوند و زمان اجرای لگاریتمی اعمال در این درختها تضمین شده است.
[ویرایش (http://www.njavan.com/w/index.php?title=%D8%AF%D8%B1%D8%AE%D8%AA_%D8%B3%D8 %B1%D8%AE-%D8%B3%DB%8C%D8%A7%D9%87&action=edit§ion=2)] شباهت به درختهای بی مرتبه 4
http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Red-black_tree_example_%28B-tree_analogy%29.svg/500px-Red-black_tree_example_%28B-tree_analogy%29.svg.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_example_(B-tree_analogy).svg) http://bits.wikimedia.org/skins-1.17/common/images/magnify-clip.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_example_(B-tree_analogy).svg)
درخت قرمز-سیاه مثال فوق، مانند یک درخت بی است.
یک درخت قرمز-سیاه ار نظر ساختار شبیه یک درخت بی (http://www.njavan.com/wiki/%D8%AF%D8%B1%D8%AE%D8%AA_%D8%A8%DB%8C) مرتبه 4 است که در آن هر گره میتواند 1 تا 3 مقدار وهمچنین 2 تا 4 اشاره گر به فرزندانش داشته باشد. در هر درخت بی، هر گره تنها یک مقدار دارد که برابر مقدار گره سیاه در درخت قرمز-سیاه است، و یک مقدار دلخواه دارد که و/یا بعد از آن در همان گره آمده است، که هر دوی آنها مساوی گره قرمز در درخت قرمز-سیاه هستند. یک راه دیدن این برابری این است که در گرههای قرمز درخت قرمز-سیاه در یک نمایش گرافیکی به سمت بالا حرکت کنیم، بطوریکه با پدر سیاهشان در یک ردیف قرار بگیرند و یک دسته افقی را تشکیل دهند. در درخت بی، یا در نمایش گرافیکی تغییر یافته درخت قرمز-سیاه که گفته شد، همه برگها عمق یکسانی دارند. در این حالت درخت قرمز-سیاه، از نظر ساختار با درخت بی مرتبه 4 برابر است که حداقل میزان پرشدن در یک دسته برابر 33% است. این نوع درخت بی، عمومی تر از درخت قرمز-سیاه است اما هنگام تبدیل به درخت قرمز-سیاه، ابهاماتی دارد چون از یک درخت بی مرتبه 4، چندین درخت قرمز-سیاه ساخته میشود. اگر یک دسته در درخت بی تنها 1 مقدار را شامل شود، این مقدار کمینه است، گره مربوطه سیاه است و دو اشاره گر به فرزندانش دارد. اگر یک دسته شامل 3 مقدار شود، مقدار وسطی در یک گره سیاه قرار میگیرد و گرههای کناری آن باید قرمز باشند. اگر دسته شامل 2 مقدار باشد، هر کدام از آنها میتواند در درخت قرمز-سیاه، سیاه باشد و دیگری باید قرمز باشد. بنابراین درخت بی مرتبه 4، مشخص نمیکند که کدامیک از مقادیر در هر دسته ریشه سیاه کل آن دسته و پدر بقیه مقادیر دسته است. با وجود این، عملیات در درختهای قرمز-سیاه از نظر زمان بهینه تر هستند چون نیازی به نگهداشتن برداری از مقادیر نیست. این نگهداری زمانی که مقادیر مستقیما در هر گره ذخیره شده اند، نسبت به وقتی که تنها مرجع آنها نگهداری شده است، پر هزینه است. البته گرههای درخت بی از نظر حافظه به صرفه تر هستند چون لازم نیست برای آنها صفت رنگ نگهداری شود. در عوض باید مشخص شود کدام بخش از دسته استفاده شده است. میتوان شباهت هایی با درختهای بی مرتبههای بالاتری که از نظر ساختار شبیه درخت دودویی رنگ شده باشند هم ایجاد کرد چون تنها به رنگهای بیشتری نیاز است. مثلا فرض کنید آبی را هم استفاده کنیم. در نتیجه درخت آبی-قرمز-سیاه مثل درخت قرمز-سیاه تعریف میشود اما با این محدودیت اضافه که دو گره متوالی از نظر مقدار نباید آبی باشند و همه گرههای آبی باید فرزندان گره قرمز باشند. چنین درختی معادل یک درخت بی میشود که دستههای آن حداکثر 7 مقدار و با این رنگها دارند :آبی، قرمز، آبی، سیاه، آبی، قرمز، آبی(هر گروه حداکثر 1 گره سیاه، 2 گره قرمز و 4 گره آبی دارد). برای تعدیل کردن حجم مقادیر، درج و حذف در یک درخت دودویی سریعتر از درختهای بی است چون درختهای رنگ شده تلاشی برای بیشینه کردن مقدار پر شدن در یک دسته افقی از گرهها نمیکنند.(تنها کمینه مقدار پرشدن در درختهای دودویی رنگ شده تضمین شده است ).جرخش در درختهای بی سریع تر است( چون چرخشها اغلب در دسته یکسان رخ میدهند به جای اینکه در چند گره مجزا در یک درخت دودویی رنگ شده انجام شوند). با این وجود برای مرتب سازی حجم زیادی از داده ها، درختهای بی بسیار سریعتر هستند چون با گروهی کردن چند فرزند در یک دسته و امکان دسترسی محلی، فشرده تر شده اند. همه بهینه سازیهای ممکن در درختهای بی برای افزایش متوسط میزان پرشدن گروهها در درختهای دودویی رنگ شده هم ممکن است. بیشینه کردن میزان پرشدن در یک درخت بی، مانند کم کردن ارتفاع درخت چند رنگ است که با افزایش تعداد گرههای غیر سیاه انجام میشود. بدترین حالت زمانی رخ میدهد که همه گرهها در یک درخت دودویی رنگ شده، سیاه باشند. بهترین حالت زمانی است که تنها یک سوم آنها سیاه باشند( و دو سوم بقیه، قرمز باشند).
[ویرایش (http://www.njavan.com/w/index.php?title=%D8%AF%D8%B1%D8%AE%D8%AA_%D8%B3%D8 %B1%D8%AE-%D8%B3%DB%8C%D8%A7%D9%87&action=edit§ion=3)] کاربردها و ساختمان دادههای مرتبط
درختهای قرمز-سیاه، ضمانتی برای بدترین حالت زمان درج، حذف و جستجو میدهند. این نکته نه تنهاباعث ارزشمندی آنها در کاربردهایی که زمان برای آنها حیاتی است مانند real-time application (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3DReal-time_computing%26action%3Dedit%26redlink%3D1%26pre load%3D%25D8%25A7%25D9%2584%25DA%25AF%25D9%2588%3A %25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF %2B%25D9%2585%25D9%2582%25D8%25A7%25D9%2584%25D9%2 587%2F%25D8%25A7%25D8%25B3%25D8%25AA%25D8%25AE%25D 9%2588%25D8%25A7%25D9%2586%25E2%2580%258C%25D8%25A 8%25D9%2586%25D8%25AF%25DB%258C%26editintro%3D%25D 8%25A7%25D9%2584%25DA%25AF%25D9%2588%3A%25D8%25A7% 25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%2B%25D9%25 85%25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2F%25D8 %25A7%25D8%25AF%25DB%258C%25D8%25AA%25E2%2580%258C %25D9%2586%25D9%2588%25D8%25AA%25DB%258C%25D8%25B3 %26summary%3D%25D8%25A7%25DB%258C%25D8%25AC%25D8%2 5A7%25D8%25AF%2B%25DB%258C%25DA%25A9%2B%25D9%2585% 25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2B%25D9%25 86%25D9%2588%2B%25D8%25A7%25D8%25B2%2B%25D8%25B7%2 5D8%25B1%25DB%258C%25D9%2582%2B%25D8%25A7%25DB%258 C%25D8%25AC%25D8%25A7%25D8%25AF%25DA%25AF%25D8%25B 1%26nosummary%3D%26prefix%3D%26minor%3D%26create%3 D%25D8%25AF%25D8%25B1%25D8%25B3%25D8%25AA%2B%25DA% 25A9%25D8%25B1%25D8%25AF%25D9%2586%2B%25D9%2585%25 D9%2582%25D8%25A7%25D9%2584%25D9%2587%2B%25D8%25AC %25D8%25AF%25DB%258C%25D8%25AF) شده است بلکه آنها را سازنده باارزش بلوکها در سایر ساختمان دادههای استفاده شده در هندسه محاسباتی (http://www.njavan.com/wiki/%D9%87%D9%86%D8%AF%D8%B3%D9%87_%D9%85%D8%AD%D8%A7% D8%B3%D8%A8%D8%A7%D8%AA%DB%8C) که ضمانت بدترین زمان اجرا دارند، کرده است. درخت متوازن (http://www.njavan.com/wiki/%D8%AF%D8%B1%D8%AE%D8%AA_%D9%85%D8%AA%D9%88%D8%A7% D8%B2%D9%86) ساختار دیگری است که جستجو، درج و حذف را در زمان اجرای O(log n)پشتیبانی میکند. این درخت بیشتر از درخت قرمز-سیاه مرتب شده است که منجر به درج و حذف آهسته تر اما بازیابی سریعتر میشود. درختهای قرمز-سیاه بویژه در برنامه نویسی تابعی (http://www.njavan.com/wiki/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%86%D9%88% DB%8C%D8%B3%DB%8C_%D8%AA%D8%A7%D8%A8%D8%B9%DB%8C) ارزشمند هستند که یکی از رایجترین انواعساختار پایدار دادههای (http://www.njavan.com/wiki/%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%A7% DB%8C%D8%AF%D8%A7%D8%B1_%D8%AF%D8%A7%D8%AF%D9%87) استفاده شده برای ساختن آرایههای اشتراکی و مجموعهها (http://www.njavan.com/wiki/%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87) است. نسخه پایدار درختهای قرمز-سیاه علاوه بر زمان، نیازمند فضایی به اندازه O(log n) برای هر درج یا حذف است. درختهای قرمز-سیاه یک ایزومتری از درختهای 2-4 هستند. به عبارت دیگر، برای هر درخت 2-4، یک درخت قرمز-سیاه همتا که عناصر دادهای آن از همان مرتبه است، وجود دارد. عملیات درج و حذف در درختهای 2-4 هم معادل تغییر رنگ و چرخش در درختهای قرمز-سیاه هستند. این باعث میشود درختهای 2-4 ابزار مهمی برای درک منطق درختهای قرمز-سیاه باشند؛ و این همان دلیلی است که بسیاری از متنهای معرفی الگوریتم ها، درختهای 2-4 را قبل از درختهای قرمز-سیاه معرفی میکنند باوجود اینکه درختهای 2-4 معمولاً در عمل استفاده نمیشوند. در سال 2008، رابرت سجویک یک نسخه ساده تر از درختهای قرمز-سیاه را معمرفی کرد که Left-Leaning Red-Black Trees (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Fwww.cs.princeton.e du%2F%7Ers%2Ftalks%2FLLRB%2FRedBlack.pdf) نامیده شد که با حذف کردن درجه آزادی نا مشخص در پیاده سازی بوجود آمده بود. LLRB یک ویژگی اضافه دارد که همه رئوس قرمز باید هنگام درجها و حذفها در سمت چپ درخت قرار بگیرند. درختهای قرمز-سیاه میتوانند برای هر مجموعهای از عملیات، به درختهای 2-3 یا درختهای 2-4 ایزومتریک باشند . درخت 2-4 ایزومتری در سال 1987 توسط سجویک معرفی شد. با درختهای 2-4، ایزومتری با یک "تغییر رنگ" حل شده است که در آن رنگ قرمز هر دو گره فرزند، به پدر منتقل میشود.
[ویرایش (http://www.njavan.com/w/index.php?title=%D8%AF%D8%B1%D8%AE%D8%AA_%D8%B3%D8 %B1%D8%AE-%D8%B3%DB%8C%D8%A7%D9%87&action=edit§ion=4)] عملگرها
عملگرهای فقط خواندنی نسبت به درختهای دودویی ساده نیاز به تغییر دارند چراکه یک حالت خاص از آنها میباشند و حذف و اضافهٔ معمولی میتواند تاثیراتی از قبیل خارج شدن از شروط اولیهٔ درختهای قرمز- سیاه داشته باشد که برای بازگردانی آن ویژگیها نیاز به تغییر رنگ و چرخش درخت دارد .اگرچه این نوع حذف واضافه پیچیدگی بسیاری دارد ولی بازهم نرخ جسجتجوی آن همچنان (O(logn میباشد .
[ویرایش (http://www.njavan.com/w/index.php?title=%D8%AF%D8%B1%D8%AE%D8%AA_%D8%B3%D8 %B1%D8%AE-%D8%B3%DB%8C%D8%A7%D9%87&action=edit§ion=5)] اضافه کردن
اضافه کردن به وسیلهٔ پیاده سازی انجام شده در درختهای دودویی و رنگ آمیزی آنها با رنگ قرمز انجام میشود . اتفاقی که بعداً میافتد بستگی به شیوهٔ رنگ آمیزی گرههای مجاور بستگی دارد عبارت گره عمو به برادر گره والد اشاره دارد، همانند آن چه که در روابط خانوادگی مطرح است . توجه به موارد زیر لازم است :
. ویژگی ۵ (همهٔ برگها سیاه هستند( گرههای nullهم سیاه محسوب میشوند) ) همیشه باید حفظ شود .
.ویژگی ۳ (فرندان گره قرمز سیاه هستند) با اضافه کردن گره قرمز و تغییر رنگ گره به سیاه یا چرخش تهدید میگردد .
.ویژگی ۴ (همهٔ مسیرها باید دارای تعداد مساوی گره سیاه باشند ) با اضافه کردن یک گره سیاه تغییر رنگ فرمز به سیاه و یا چرخش تهدید میشود
توجه کنید : برچسبهای N برای گره اضافه شده ، P برای والد گره اضافه شده،G برای پدربزرگ گره اضافه شده و U برای عموی گره اضافه شده مورد استفاده میشود . هر مثال شامل شرحی در زیان سی++ (http://www.njavan.com/wiki/%D8%B3%DB%8C%2B%2B) میباشد :
class RBT{...BinaryNode * grandParent(BinaryNode *n){if((n!=null) &&( n->parent!=null)) return n->parent->parent; else return NULL;}BinaryNode * uncle(BinaryNode *n){BinaryNode *g=grandparent(n);if(n->pareant==g->left) return g->right;else return g->left;}}
حالت ۱ :گره جدید N ریشهٔ درخت باشد . در این حالت با تغییر رنگ به سیاه( بخاطر ویژگی ریشه باید سیاه باشد)و در هرمسیر باید یگ گره سیاه وجود داشته باشد اعتبار درخت را حفظ میکند .
void insert_case1(BinaryNode *n){if(n->parent==null) n->col=Black;else insert_case2(n);}
حالت ۲: اگر گره والد سیاه باشد هیج کدام از دو ویژگی (هردو فرزند قرمز، سیاه هستند و تعداد راههای از هر مسیر به برگ دارای تعداد یکسان گره سیاه دارند) مورد تهدید واقع نمیشوند ولی فقط وجود دوگره قرمز اعتبار درخت را زیر سوال میبرد (حالت ۳).
void insert_case2(BinaryNode *n){if(n->parent->col==Black) return;//درخت همچنان هر پنج ویژگی را دارد.else insert_case3(n);}
http://upload.wikimedia.org/wikipedia/commons/c/c8/Red-black_tree_insert_case_3.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_insert_case_3.png)
حالت ۳:اگر هردو گره والد و عمو قرمز باشد، هردو به رنگ سیاه در میآیند و پدر آنها قرمز در میآید.(برابر ویژگی ۴). گره قرمز جدید دارای والد سیاه است . تا آن زمان که هر راه از والد /عمو که به طور قطع از پدر بزرگ نیز عبور میکند همچنان معتبر میباشد . با این وجود G(پدر والد و عمو و پدربزرگ N) باید بررسی شود که آیا ریشهاست یا خیر(تا به رنگ سیاه درآید( ویژگی ۲) این کار را میتوان با یک متد بازگشتی انجام داد . حتی میتوان آن را به صورت یک حلقه نوشت که البته ثابت میشود این حلقه دارای تعداد مشخصی انجام عملیات چرخش است.
void insert_case3(BinaryNode *n){ BinaryNode u=uncle(n);if((u!=null)&& )u->col==Red){ n->parent->col=Black; u->col=Black; g=grandparent(n); g->col=Red; insert_case1(g);}else insert_case4(n);}
http://upload.wikimedia.org/wikipedia/commons/5/56/Red-black_tree_insert_case_4.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_insert_case_4.png)
حالت ۴:اگر والد (p) قرمز باشد ولی عمو سیاه باشد همچنان گره جدید سمت راست p است و p فرزند سمت چپ G است . در این حالت، یک دوران به چپ که نقش گره جدید N را با والدش ؛ P تغییر میدهد، قابلیت اجرا پیدا میکند که در آن والد قبلی با فرزندش جابجا میشود سپس والد قبلی که اکنون دوباره برچسب گذاری شده با ویژگی همه مسیرها دارای تعدا مساوی گره سیاه هستند؛ سر و کار دارد . چون بر طبق ویژگی 4 (هر دو فرزند گره قرمز سیاه هستند) همچنان مورد تهدید بی اعتبارشدن درخت همراه است . دوران باعث میگردد تا در بعضی از مسیرها (از جمله مسیری که از زیر درخت برچسب گذاری شدهٔ 1)عبور می نماید از گره جدیدی که قبلا مطرح نبوده است، عبور میکند ولی چون این گره مانند گره قبلی قرمز است، ویژگی 4 با دوران اعتبار درخت را از بین نمیبرد .
به همین ترتیب اگر والد (p) قرمز باشد ولی عمو سیاه باشد همچنان گره جدید سمت چپ p است و p فرزند سمت راست G است . در این حالت، یک دوران به راست روی والد(p) انجام می شود.
void insert_case4(BinaryNode *n){ BinaryNode g=grandparent(n); if((n==n->parent->right) && (n->parent==g->left)){rotate_left(n->parent);}else if((n==n->parent->left) && (n->parent==g->right)){ rotate_right(n->parent); n=n->right; } insert_case5(n);}
http://upload.wikimedia.org/wikipedia/commons/6/66/Red-black_tree_insert_case_5.png (http://www.njavan.com/wiki/%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87:Red-black_tree_insert_case_5.png)
حالت ۵:والد قرمز است ولی عمو سیاه میباشد و گره جدید N فرزند چپ والد P است و P فرزند چپ پدربزرگ(G)است . در این حالت رو ی پدر بزرگ(g) دوران به راست اجرا میگردد .درختی که نتیجه میشود دارای والد ی به نام P برای هردو گره G و N است .G، به عن.ان ریشه، سیاه است و این تا آن زمان که فرزندش قرمز باشد پابرجاست .با تغییر رینگ P و G درخت نهایی حاصل میگردد که همهی ویژگیهای فوق از جمله تعداد مساوی گره سیاه در هر مسیر ( به این شکل که تمامی مسیر هایی که از این سه گره عبور میکند که قبلا از G عبور میکرده و اکنون از P عبور میکند ) پابرجاست .
به همین ترتیب اگر والد قرمز است ولی عمو سیاه میباشد و گره جدید N فرزند راست والد P است و P فرزند راست پدربزرگ(G)است . در این حالت رو ی پدر بزرگ(g) دوران به چپ اجرا میگردد .
void insert_case5(BinaryNode *n){ BinaryNode *g = grandparent(n); n->parent->color = BLACK; g->color = RED; if ((n == n->parent->left) && (n->parent == g->left)) { rotate_right(g); } else { /*یعنی : * (n == n->parent->right) && (n->parent == g->right). */ rotate_left(g); }}
[ویرایش (http://www.njavan.com/w/index.php?title=%D8%AF%D8%B1%D8%AE%D8%AA_%D8%B3%D8 %B1%D8%AE-%D8%B3%DB%8C%D8%A7%D9%87&action=edit§ion=6)] منابع
دنیای ریاضی :درخت قرمز-سیاه (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Fmathworld.wolfram. com%2FRed-BlackTree.html)
دانشگاه ایالتی سن دیگو کلاس 660 :نکتههایی دربارهٔ درختهای قرمز-سیاه (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Fwww.eli.sdsu.edu%2 Fcourses%2Ffall95%2Fcs660%2Fnotes%2FRedBlackTree%2 FRedBlack.html%23RTFToC2) , by Roger Whitney
Charles E. Leiserson, Ronald L. Rivest, Thomas H. Cormen and Clifford Stein. «Chapter 13». Introduction to Algorithms (http://www.njavan.com/forum/redirector.php?url=http%3A%2F%2Ffa.wikipedia.org%2 Fw%2Findex.php%3Ftitle%3DIntroduction_to_Algorithm s%26action%3Dedit%26redlink%3D1%26preload%3D%25D8% 25A7%25D9%2584%25DA%25AF%25D9%2588%3A%25D8%25A7%25 DB%258C%25D8%25AC%25D8%25A7%25D8%25AF%2B%25D9%2585 %25D9%2582%25D8%25A7%25D9%2584%25D9%2587%2F%25D8%2 5A7%25D8%25B3%25D8%25AA%25D8%25AE%25D9%2588%25D8%2 5A7%25D9%2586%25E2%2580%258C%25D8%25A8%25D9%2586%2 5D8%25AF%25DB%258C%26editintro%3D%25D8%25A7%25D9%2 584%25DA%25AF%25D9%2588%3A%25D8%25A7%25DB%258C%25D 8%25AC%25D8%25A7%25D8%25AF%2B%25D9%2585%25D9%2582% 25D8%25A7%25D9%2584%25D9%2587%2F%25D8%25A7%25D8%25 AF%25DB%258C%25D8%25AA%25E2%2580%258C%25D9%2586%25 D9%2588%25D8%25AA%25DB%258C%25D8%25B3%26summary%3D %25D8%25A7%25DB%258C%25D8%25AC%25D8%25A7%25D8%25AF %2B%25DB%258C%25DA%25A9%2B%25D9%2585%25D9%2582%25D 8%25A7%25D9%2584%25D9%2587%2B%25D9%2586%25D9%2588% 2B%25D8%25A7%25D8%25B2%2B%25D8%25B7%25D8%25B1%25DB %258C%25D9%2582%2B%25D8%25A7%25DB%258C%25D8%25AC%2 5D8%25A7%25D8%25AF%25DA%25AF%25D8%25B1%26nosummary %3D%26prefix%3D%26minor%3D%26create%3D%25D8%25AF%2 5D8%25B1%25D8%25B3%25D8%25AA%2B%25DA%25A9%25D8%25B 1%25D8%25AF%25D9%2586%2B%25D9%2585%25D9%2582%25D8% 25A7%25D9%2584%25D9%2587%2B%25D8%25AC%25D8%25AF%25 DB%258C%25D8%25AF). 2nd Edition. MIT Press and McGraw-Hill، 2001، ISBN 0-262-03293-7 (http://www.njavan.com/wiki/%D9%88%DB%8C%DA%98%D9%87:%D9%85%D9%86%D8%A7%D8%A8% D8%B9_%DA%A9%D8%AA%D8%A7%D8%A8/0262032937)، 273-301.
e.einitabar
4th September 2011, 06:50 PM
سلام خسته نباشید لطفا اگه در مورد درخت قرمز- سیاه اطلاعاتی دارید از نحوه ایجاد تا نحوه حذف بهم اطلاعات بدید ممنون
سلام خانم دانیالی جواب های زیادی واسه سوالاتی که پرسیدن هست
یکم دامنه سرچتونو بالا ببرید جوابهای بهتری بدست میارین
در پناه حق
استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است
استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد
vBulletin® v4.2.5, Copyright ©2000-2025, Jelsoft Enterprises Ltd.