درخت جستجوی دودویی درخت جستجوي دودويي: درخت دودويي صفر نود يا بيشتر

Slides:



Advertisements
Similar presentations
Queue theory.
Advertisements

سید احمد موسوی Line Maze Algorithm زمستان 90 بسمه تعالی.
معاونت درمان امور مامایی اردیبهشت 90. برای ثبت اطلاعات در برنامه نرم افزاری نظام مراقبت مرگ پریناتال ابتدا لازم است برنامه نرم افزار info-path وپرنیان.
Stranded Costs مقدمه 1 - آشنايی با پديده های غيرخطی ( ياد آوری و تکميل ) 2 - مبانی رياضی ( مهم )
1 آزمايشگاه سيستم های هوشمند ( Domain-specific Architecture.
الگوریتم ژنتیکی. تعریف  الگوریتم ژنتیکی، رویه ای تکراری است که راه حل های انتخابیش را بصورت رشته ای از ژنها که کروموزوم نامیده می شوند، بازنمایی می کند.
ارائه روشي براي شناسايي کاراکترهاي دستنويس، برپايه شبکه LVQ.
Decision Tree.
ارائه درس روباتيکز Extended Kalman Filter فريد ملازم استاد مربوطه دکتر شيري دانشگاه امير کبير – دانشکده کامپيوتر و فناوري اطلاعات.
ارائه دهنده: دکتر احمد عبدالله زاده تنظيم کننده:پرهام مرادي
ارائه کننده: آلاء شريعتی
روش تحقیق جلسه چهارم دانشگاه صنعتی اصفهان دانشکده کشاورزی
فارسی سازی يکپارچه در سيستم عاملهای OS/390 & Windows واحد 1 مهندسی سيستم Integrated Farsi support on OS/390 & Windows.
مرتضي صاحب الزماني 1 Data Structures. مرتضي صاحب الزماني 2 Corner Stitching.
Database Laboratory: Session #4 Akram Shokri. DB-Lab 2 Lab Activity You must already created all tables You have to have inserted proper data in tables.
1/34 Informed search algorithms Chapter 4 Modified by Vali Derhami.
روابط مجموعه ها سلیمی. دکتر سلیمانی. نظریه فازی در سال 1965 بوسیله یک دانشمند ایرانی بنام پروفسور لطفی زاده معرفی گردید. گرچه این نظریه در ابتدا با.
ساختمان داده‌ها پیمایش گراف. مرور °مشکل: چگونه تمام نودهای گراف را مشاهده کنیم؟ °جستجوی اول عمق دنبال کردن مسیرهای بین راسها. °جستجوی اول سطح دیدن تمام.
1 فصل دوم تبديلات. 2 فصل دوم سرفصل مطالب مقدمه ضرب بردارها دستگاه ‌ هاي مختصات دوران ‌ ها مختصات همگن دوران ‌ ها و انتقال ‌ ها تبديلات تركيبي همگن تبديل.
Arrangements of Lines C omputational Geometry By Samaneh shafi naderi
1/19 Informed search algorithms Chapter 4 Modified by Vali Derhami.
سيستم خبره مرکب ( ترکيب پيشرو و پسرو ) زماني که يک فرضيه احتمالي براي جواب داشته باشيم، روش backward مي تواند خيلي کاراتر و مناسبتر باشد. اگر هيچ احتمال.
آشنايي با سيستم اعداد.
Image Enhancement in the
Cost- Effectiveness Analysis
[c.
ساختمان داده ها و الگوريتم ها
نظریه رفتار برنامه ريزي شده Theory of Planned Behavior
ویژگی های DHCP جلوگیری از Conflict سرعت بخشیدن به کارها مدیریت متمرکز
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
مرتب سازي مقايسه اي مرتب سازي خطي
ANOVA: Analysis Of Variance
ليست هاي پيوندي.
ساختمان داده ها جداول درهم سازی
ساختمان داده‌ها الگوریتمهای کوتاهترین مسیر
ANOVA: Analysis Of Variance
روش حریصانه در طراحی الگوریتم
Odd-even merge sort مرتب سازی.
Quick Sort مرتب سازي سريع.
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
لغت نامه و جدول درهم سازي Dictionaries and Hash Tables
فصل دوم جبر بول.
Route configuration for 5400W ADSL Router
تکنیک دیماتل DEMATEL: decision making trial and evaluation laboratory.
معرفي درس ساختمان داده ها و الگوريتمها
Natural language Understanding James Allen
نمايش اعداد در کامپيوتر چهار عمل اصلي
Similarity transformation
Tree Sort.
ساختمان داده‌ها پیمایش درخت دودویی
سميرا قانوني زهرا معدني
فاطمه بهمن زیاری ، مریم امینی مدل های خطی 1 بهمن1393
هیدرولیک جریان در کانالهای باز
فيلتر كالمن معرفي : فيلتر كالمن تخمين بهينه حالت‌ها است كه براي سيستم‌هاي ديناميكي با اختلال تصادفي در سال 1960 بزاي سيستم‌هاي گسسته و در سال 1961 براي.
Bucket sort اكرم منوچهري زهرا منوچهري
نظریه رفتار برنامه ريزي شده Theory of Planned Behavior
با تشکر از دکتر جواد سلیمی
پشته و صف پیوندی Give qualifications of instructors: DAP
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
IN THE NAME OF GOD MATH SABA KARBALAEI
Angular Kinetics مهدی روحی بهار 85.
فصل ششم مدارهای ترتیبی.
ساختمان داده‌ها درختان و درختان دودویی
مراحل پیش رو : 1- الگوریتم عقبگرد برای مسئله کوله پشتی صفر و یک
ساختمان داده ها مرتب سازی درجی
پشته و صف پیوندی Give qualifications of instructors: DAP
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
ساختمان داده ها گرافها.
Presentation transcript:

درخت جستجوی دودویی درخت جستجوي دودويي: درخت دودويي صفر نود يا بيشتر اگر >0 نود: هر نود داراي يک کليد يکتا است. کليد تمام نودهاي زير درخت سمت چپ نود، ازخود نود کمتر است. کليد تمام نودهاي زير درخت سمت راست نود، ازخود نود بيشتر است. زير درختهاي سمت چپ و راست نيز درخت جستجوي دودويي هستند.

درخت جستجوی دودویی 60 30 70 5 40 2 80 65 کليدهاي يکتا نودهاي سمت چپ کمتر از ريشه نودهاي سمت راست بيشتر از ريشه زير درختهاي سمت چپ و راست نيز درخت جستجوي دودويي هستند. کليدهاي يکتا نودهاي سمت چپ کمتر از ريشه نودهاي سمت راست بيشتر از ريشه زير درختهاي سمت چپ و راست نيز درخت جستجوي دودويي هستند.

درخت جستجوی دودویی 20 15 25 12 22 درخت جستجوي دودويي نيست. فرزند سمت راست 25 ازخودش کمتر است. 18 کليدهاي يکتا نودهاي سمت چپ کمتر از ريشه نودهاي سمت راست بيشتر از ريشه زير درختهاي سمت چپ و راست درخت جستجوي دودويي نيستند.

دقت کنيد که شرط کامل بودن در تعريف درخت جستجوي دودويي حضور ندارد. درخت جستجوی دودویی دقت کنيد که شرط کامل بودن در تعريف درخت جستجوي دودويي حضور ندارد. لذا، پياده سازي لينک پيوندي بهتر است. تعريف بازگشتي درخت جستجوي دودويي = الگوريتمهاي بازگشتي

درخت جستجوی دودویی:جستجو جستجو: از خواص درخت جستجوي دودويي استفاده کنيد. از ريشه شروع کن اگر ريشه برابر صفر بود، پيغام بده که درخت خالي است. در غير اين صورت: x را با ريشه مقايسه کن. اگر x با کليد ريشه برابر بود، نود را برگردان. اگر x از کليد ريشه کمتر بود، زير درخت سمت چپ را بگرد. در غير اين صورت زير درخت سمت راست را بگرد.

درخت جستجوی دودویی: مثالی از جستجو 15 را پيدا کن. ريشه خالي است؟ نه 15 را با مقدار ريشه (30( مقايسه کن 15 < 30 لذا زير درخت سمت چپ را بگرد. 15 را با 5 مقايسه کن 15 > 5 لذا زير درخت سمت راست را بگرد. 15 را با 15 مقايسه کن 15 == 15 نود جاري را بر گردان 30 5 40 2 15

آنالیز درخت جستجوی دودویی در ريشه يک مقايسه انجام مي دهيم > Root يا < Root با توجه به نتيجه: به يکي از فرزندان مي رويم يک مقايسه انجام مي دهيم. حداکثر به اندازه ارتفاع درخت اين کار را انجام مي دهيم: لذا، پيچيدگي زماني جستجو، وابسته به شکل درخت است. خطی: O(n) متوازن: O (log 2 n)

درج در درخت جستجوی دودویی قوانين - الحاق بايد شرايط زير را برآورده کند: کليد يکتا فرزند سمت راست < پدر فرزند سمت چپ > پدر نودهاي مياني نيز بايد شرايط فوق را برآورده کنند. يکتا بودن را چگونه چک کنيم؟ به همه نودها نگاه کنيم؟

درج در درخت جستجوی دودویی نيازي نيست که به تمام نودها نگاه کنيم از اين حقيقت استفاده مي کنيم که قبل از الحاق نود جديد، درخت از نوع جستجوي دودويي است. لذا کافيست دنبال نود جديد در درخت بگرديم. Add 30 15 5 40 Search for 15 15 ? 30, 15 < 30 => Left 15 ? 5, 15 > 5 => Right 15 ? 15, 15 == 15 => Not Unique 2 15

درج در درخت جستجوی دودویی جستجوي نود جديد نه تنها مساله يکتا بودن را حل مي کند، بلکه ما را به جاي درست نود جديد رهنمون مي سازد. 30 Add 15 5 40 Search for 15 15 ? 30, 15 < 30 => Left 15 ? 5, 15 > 5 => Right No right child, so not present 2 15 Add 15 as right child of 5

عمده کار تابع الحاق، پياده سازي عمل جستجو است. آنالیز عمل درج عمده کار تابع الحاق، پياده سازي عمل جستجو است. وابسته به شکل درخت است. خود عمل الحاق داراي هزينه ثابت است. لذا، هزينه کل وابسته به پيچيدگي عمل جستجو است. در بدترين حالت: O(n) در حالت ميانگين: O(log2n)

ارتفاع درخت جستجوی دودویی ارتفاع درخت جستجوی دودویی در بدترين حالت ارتفاع درخت باينري برابر n است. درخت خطی 40 مسائل درخت جستجوي دودويي از لحاظ پيچيدگي وابسته به ارتفاع درخت هستند که در بدترين حالت O(n) هست. اگر داده ها مرتب يا نیمه مرتب باشند، درخت خطی خواهد گرديد. 30 5 2

ارتفاع درخت جستجوی دودویی ارتفاع درخت جستجوی دودویی Insert: 3, 4, 6, 5, 8 root 3 4 6 8 5

Binary Search Trees: Height اگر الحاقها به صورت تصادفي انجام گردند، ارتفاع درخت برابر O(log n) خواهد بود. در حالت عمومي الحاقها تصادفي هستند، لذا اغلب ارتفاع برابر O(log n) خواهد شد. راههاي وجود دارد که ارتفاعO(log n) را گارانتي نمود. بايد توابع الحاق و حذف را دستکاري نمود تا درخت متعادل شود.

نودهاي درخت جستجوي دودويي داراي نظم خاصي هستند. TreeSort: نودهاي درخت جستجوي دودويي داراي نظم خاصي هستند. تمام نودهاي سمت چپ از ريشه کوچکتر و تمام نودهاي سمت راست از آن بزرگتر هستند. اين مطلب براي تمام نودها صادق است. لذا، مي توان از پيمايش LVR براي توليد يک ليست مرتب استفاده کرد. 30 5 40 2 50 15 35 LVR Ordering: 2,5,15,30,35,40,50

TreeSort: آناليز TreeSort: بهترين حالت: درخت متعادل O(n * log 2 n) سپس LVR را اجرا مي کنيم. هميشهO(n) است. پس پيچيدگي TreeSort برابر است با: بهترين حالت: O(n * log 2 n) بدترين حالت: O(n2)

Binary Search Trees: Deletion قوانين - حذف بايد شرايط زير را برآورده کند: کليد يکتا نيازي به چک کردن ندارد. چون قبل از عمل حذف کليدها يکتا هستند. اما موارد زير بايد رعايت شوند: فرزند سمت راست < پدر فرزند سمت چپ > پدر نودهاي مياني نيز بايد شرايط فوق را برآورده کنند.

Binary Search Trees: Deletion 30 5 40 سه حالت: 1- حذف نود انتهايي (15) : نود انتهايي را حذف کن. اشاره گر پدر را برابر صفر قرار بده. 2 15 30 5 40 2

Binary Search Trees: Deletion 30 2- نود غير انتهايي، داراي يک فرزند(5): لينک نود پدر را که به نود حذف شونده اشاره دارد را به فرزند نود حذف شونده اشاره دهيد. 5 40 2 30 5 40 2

Binary Search Trees: Deletion 3- نود غير انتهايي داراي دو فرزند: مقدار نود حذف شونده را با بزرگترين المان سمت چپ يا کوچکترين المان سمت راست جابجا کنید. نودي را که جابجا کرده ايد را حذف کنيد. اين حذف کردن معادل يکي از حالتهاي 1 يا 2 خواهد بود. 30 5 40 toDelete 2 5 5 40 5 40 2 2

Binary Search Trees: Deletion قانون اصلي حذف: “با بزرگترين المان سمت چپ يا کوچکترين المان سمت راست جابجا کنيد” آيا اين روش هميشه درست است؟ بله – چون بزرگترين المان سمت چپ از تمام عناصر سمت چپ بزرگتر است. از تمام عناصر سمت راست کوچکتراست. کوچکترين المان سمت راست اينها، همان شرايطي هستند که ريشه زير درخت جستجوي دودويي نياز دارد.

اگر نود دو فرزند داشته باشد: (مثل نود ۱۰) حالت سوم حذف اگر نود دو فرزند داشته باشد: (مثل نود ۱۰) 3 1 10 5 14 4 7 16 15 20

بعد از حذف ۱۰ دو زیر درخت خواهیم داشت: ادامه ی حالت سوم حذف بعد از حذف ۱۰ دو زیر درخت خواهیم داشت: نمی توانیم یکی از این زیر درخت ها را بالا بیاوریم. اما می دانیم که تمام نودهای زیر درخت سمت چپ از خود نود کوچکتر هستند. و تمام نودهای زیر درخت سمت راست از خود نود بزرگتر هستند. 3 1 10 5 14 4 7 16 15 20

ادامه ی حالت سوم حذف چگونه دو زیر درخت را با هم یکی کنیم؟ بزرگترین عنصر سمت راست را پیدا کنید. زیر درخت سمت راست را به آن نود وصل کنید. 3 3 3 1 10 1 10 1 5 5 7 5 14 4 14 4 7 4 7 16 14 16 15 20 16 15 20 15 20

نودی که باید حذف شود را پیدا کنید. مراحل حذف: قدم اول: نودی که باید حذف شود را پیدا کنید. prev 3 node 1 10 5 14 4 7 16 15 20

مراحل حذف prev 3 node prev 1 10 3 node 5 1 10 4 5 14 tmp 14 4 16 16 قدم دوم: بزرگترین عنصر زیردرخت سمت چپ را پیداکنید. prev 3 node prev 1 10 3 node 5 1 10 4 7 5 14 tmp 14 4 7 16 16 tmp 15 20 15 20

مراحل حذف prev prev 3 node 3 node 1 5 1 10 4 5 14 16 4 14 15 16 15 قدم سوم: زیر درخت سمت راست نود را به این نود وصل کنید. prev prev 3 node 3 node 1 5 1 10 4 7 5 14 16 4 7 14 15 20 16 15 20

مراحل حذف prev 3 node 1 5 4 14 16 15 قدم چهارم: اگر ریشه را قرار هست حذف کنید. باید ریشه را به طور مناسب تنظیم کنید و یکی از فرزندان نود که جابجا نمی شود تبدیل به ریشه ی جدید می گردد. prev 3 node 1 5 4 7 14 16 15 20

کد حذف public void remove(int id) { BSTNode tmp, node, p=root, prev = null; // find the node p which needs to be removed while( p!=null && p.id!=id ) { prev = p; if( p.id<id ) p = p.right; else p = p.left; } node = p; prev 3 node 1 10 p 5 14 4 7 16 15 20

ادامه ی کد حذف if( p!=null && p.id==id ) { // case (1)/(2): node has no right child: // its left child ( if any ) is attached to its parent if( node.right==null ) node = node.left; // case (1)/(2): node has no left child: // its right child ( if any ) is attached to its parent else if( node.left==null ) node = node.right;

ادامه ی کد حذف else { // find the maximum node in the left subtree, // store the node to tmp tmp = node.left; while( tmp.right!=null ) tmp = tmp.right; // merge the right subtree to tmp's right child tmp.right = node.right; // lift node.left up node = node.left; }

ادامه ی کد حذف if( p==root ) root = node; else if( prev.left == p ) prev.left = node; else prev.right = node; } else if( root!=null ) System.out.println( "ID " + id + " is not in the database"); System.out.println( "The database is empty" );