1 / 50

درختان

درختان. مثال. Willliam Bill Mary Curt Marjorie Richard Anne. آيتمها با شاخه ها به هم وصل شده اند معناي شاخه: والد. مثال. Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby. تعريف درخت.

nat
Download Presentation

درختان

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. درختان

  2. مثال Willliam Bill Mary Curt Marjorie Richard Anne • آيتمها با شاخه ها به هم وصل شده اند • معناي شاخه: والد

  3. مثال Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby

  4. تعريف درخت • درخت يک مجموعه محدود از نودها است که: • يکي از نودها ريشه درخت است • باقي نودها به n >= 0 مجموعه مجزاي T1, T2, .. Tn تقسيم مي شوند بطوريکه هر کدام يک درخت هستند. T1, T2, … Tn زير درختهاي ريشه ناميده ميشوند.

  5. مثال Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby ريشه: Curt Bill يک زير درخت Court است که خود نيز يک درخت هست.

  6. ادامه مثال Bill Alison Ashley William Laura Dylan ريشه: Bill Ashley يک زير درخت Bill است که خود نيز يک درخت هست. Dylan يک زير درخت Ashley است که خود نيز يک درخت هست.

  7. تعريف درخت • ترتيب زير درختها اهميتي ندارد • دو درخت زير هم ارزند. Curt Bill Carol Ronald Curt Ronald Bill Carol

  8. تعاريف درخت • تعريف درخت با تعريف ليستهاي پيوندي مشابه است • درجه هر نود تعداد زير درختهاي آن نود است • به نودهاي که داراي درجه صفر هستند برگ گفته مي شود • به نودهاي داراي درجه بزرگتر از صفر، نودهاي غير انتهايي گفته مي شود.

  9. مثال Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby درجه(Curt)=3 درجه (Bill)= 4 درجه (Ashley)= 1 درجه (William)= 0 نودهاي انتهايي : Alison, Dylan, William, Laura, Trey, Shelby, Jennifer, Todd, Ronald

  10. تعاريف درخت • به ريشه هاي زير درختان فرزند گفته مي شود • والد نودي است که يک يا چند فرزند دارد • فرزندان يک والد همزاد هستند.

  11. مثال Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby فرزندانCourt: Bill, Carol, Ronald والدJennifer: Carol همزادهايAshley: Alison, William, Laura

  12. تعاريف درخت • بهوالدوالد، جد گفتهميشود. • تمام نودهايي که روي مسير ريشه به سمت يک نود قرار دارند، نياکان آن نود هستند. • به تمام نودهايي که در زير درخت مربوط به يک نود قرار دارند، اعقاب آن نود گفتهميشود.

  13. مثال Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby جد(Dylan) = Bill نياکان(Dylan) = Ashley, Bill, Curt اعقاب(Bill) = Alison, Ashley, William, Laura, Dylan

  14. تعاريف درخت • درجه درخت: حداکثر درجه نودهاي درخت • سطح نود: • سطح ريشه = 1 • سطح نودهاي غير ريشه= تعداد لينکهاي بين نود و ريشه + 1 • ارتفاع يا عمق درخت: حداکثر سطح نودهاي درخت

  15. مثال Curt Bill Carol Ronald Alison Ashley William Laura Victoria Jennifer Todd Dylan Trey Shelby درجه درخت= 4( به خاطر Bill) سطح Curt = 1 ، سطحDylan = 4 ، سطح Ashley = 3 ارتفاع درخت= 4( به خاطر Dylan)

  16. Recursion and Trees • دقت کنيد که تعريف درخت بازگشتي است. • فرزندان يک نود ريشه هاي زيردرخت خودشان هستند. • اکثر اعمالي که روي درختان انجام مي شوند نيز بازگشتي هستند. • محاسبه ارتفاع • پيمايش درخت • جستجوي يک نود خاص

  17. Tree Representations • ايجاد يک ساختار داده براي درخت: • راه حل اول: • استفاده از نود ليست پيوندي: هر نود براي هر فرزند داراي يک اشاره گر باشد. • ملاحظات: • براي تمام فرزندان به اشاره گر نيازمنديم. • اگر تعداد فرزندان نودها مثل هم نباشد چکار کنيم؟

  18. Tree Representations • اگر ماکسيمم تعداد فرزندان نودهاي درخت برابر k باشد، هر نود بايد داراي k اشاره گر باشد. • تعداد زيادي از اين اشاره گر ها هدر خواهند رفت: • nk – n + 1 اشاره گر بدون استفاده • اگر درخت پر باشد اين روش مناسب است. Node for tree with max degree 4 DATA CHILD 1 CHILD 2 CHILD 3 CHILD 4

  19. Tree Representation • اثبات: • n نود که هر کدام k اشاره گر دارند، در نتيجه nk اشاره گر داريم. • به سمت هر نود غير از ريشه دقيقا يک اشاره گر داريم. پس n-1 اشاره گر را استفاده مي کنيم. • تعداد اشاره گر هاي بلا استفاده: nk – (n – 1)=nk – n + 1 • مثال: • درخت فاميلي: 4-ary, 14 nodes • 56 – 14 + 1 = 43 unused pointers (172 bytes wasted) • اکثر اشاره گر هاي اتلاف شده مربوط به برگها است.

  20. Tree Representation • نمايش درخت با دو اشاره گر براي هر نود • فرزند سمت چپ وهمزاد سمت راست Data Left Child Right Sibling

  21. Bill Carol Ronald Alison Victoria 0 0 0 Tree Representation Left Child, Right Sibling Family Tree Curt 0

  22. Specialized Trees • درخت دودويي: • در اين درخت درجه هر نود حداکثر دو است. • ترتيب نودها اهميت دارد. • ممکن است داراي صفر نود باشد. • تعريف رسمي: • يک درخت باينري مجموعه محدودي از نودها است که يا خالي است يا شامل ريشه و دو زير درخت متمايز دودويي است که به آنها زير درختان سمت راست و سمت چپ گفته مي شود.

  23. Specialized Trees اينها دو درخت معادل هستند. اما دو درخت دودويي معادل نيستند.

  24. Types of Binary Trees کامل – متعادل تر خطي - نامتعادل

  25. Properties of Binary Trees • خواص جالب درخت دودويي: • حداکثر تعداد نودها در سطح l برابر 2l-1است. • حداکثر تعداد نودها در درخت باينري با ارتفاع k ، برابر 2k– 1 است.

  26. Proofs • حداکثر تعداد نودها در سطح l برابر 2l-1است. • اثبات با استفاده از استقراء: • حالت پايه: • Level 1 = 21-1 = 20 = 1 • براي يک n > 1 • اگر سطح n داراي 2n-1نود باشد. • براي n+1 : • هرنود در سطح n ، حداکثر دو فرزند در سطح n+1 دارد. پس تعداد نودهاي سطح n+1 حداکثر برابر 2n-1 * 2 = 2n است.

  27. Proofs • حداکثر تعداد نودها در درخت باينري با ارتفاع k ، برابر 2k– 1 است. • مي توان ماکسيمم تعداد نودهاي هر سطح را با هم جمع زد. • بايد حاصل جمع 2k-11+2+4+…+ را بدست آوريم. • اين جمع برابر است با: 2k -1

  28. Properties of Binary Trees • يک درخت باينري پر با عمق K ، داراي 2k– 1 نود هست • تمام نودهاي غير انتهايي داراي دو فرزند هستند. • نودهاي انتهايي در آخرين سطح قرار دارند. 1 3 2 4 5 6 7

  29. Properties of Binary Trees • مي گوييم يک درخت باينري با n نود يک درخت کامل است اگر نودهاي آن با درخت پري که نودهاي آن از 1 تا n شماره گذاري شده اند، متناظر باشد. • ارتفاع يک درخت دودويي کامل با n نود برابر است با: (log2(n+1))

  30. Properties of Binary Trees • Complete trees 1 3 2 4 5 6 7 1 3 2 1 4 5 3 2

  31. Binary Tree Implementation • پياده سازي آرايه اي • هر نود با يک عنصر از آرايه متناظر مي گردد 1 3 2 4 5 6 7

  32. Binary Tree Implementation • پياده سازي آرايه اي: • parent(i) در محل i/2 قرار دارد (براي i!=1). • فرزند سمت چپ i در محل 2i و فرزند سمت راست در محل 2i+1 قرار دارد. • اگر 2i>n باشد، i فرزند سمت چپ ندارد. • اگر 2i+1>n باشد، i فرزند سمت راست ندارد. Array Index: 0 1 2 3 4 5 6 7 خالي Data1 Data2 Data3 Data4 Data5 Data6 Data7

  33. Binary Tree Implementation • مثل قبل، نمايش آرايه اي بهترين راه حل نيست. • اندازه حافظه ثابت است: • براحتي قابل گسترش نيست. • اگر درخت بالانس نباشد، حافظه هدر مي رود. • راه بهتر: استفاده از ايده لينک پيوندي. • مي شود از راه حل استفاده از همزاد دوري کرد، چون تعداد فرزندان ثابت است و فقط به دو اشاره گر نيازمنديم.

  34. Binary Tree Node class BinaryTree; // اعلان پيش از موقع class BinaryTreeNode { friend class BinaryTree; private: char data; BinaryTreeNode* leftChild; BinaryTreeNode* rightChild; };

  35. Binary Tree Class class BinaryTree {public: // public member methods private: BinaryTreeNode* root; };

  36. Binary Tree Node • تنها مشکل نمايش پيوندي اين است که به پدر دسترسي نداريم. • اشکالي ندارد: • بسياري از الگوريتمها نيازي به دانستن پدر ندارند. • اگر هم مهم باشد، وقتي که درخت را پيمايش مي کنيم، يک اشاره گر به پدر را نگهداري مي کنيم. • اگر خيلي مهم باشد، مي توان به تعريف نود اشاره گر پدر را اضافه نمود.

  37. Questions • در درخت باينري زير: • نودهاي انتهايي کدامند؟ • نودهاي غير انتهايي کدامند؟ • سطح هر نود چند است؟ D,E A,B,C A=1,B=2,CD=3,E=4 A B C D E

  38. Questions • حداکثر تعداد نودها در يک درخت k-ary با ارتفاع h چند است؟ • براي k=3 داريم : 1 + 3 + 9 + 27 + 81 … • براي k=4 داريم : 1 + 4 + 16 + 64 … • براي k=k داريم : 1 + k + k2 + k3… • مجموع فوق برابر است با: (kh-1) / (k-1) • اگر h=4 و k=3 : • (34– 1) / (3-1) = 80/2 = 40

  39. خالي A B خالي C D خالي خالي E خالي Questions نمايش آرايه اي درخت زير چيست؟ A B C D E

  40. Binary Tree Class class BinaryTree {public: BinaryTree(); // create empty tree BinaryTree(char data, BinaryTree bt1, BinaryTree bt2); //construct a new tree , setting root data to data and links to //other trees bool isEmpty(); // test whether empty BinaryTree leftChild(); // get left child of *this BinaryTree rightChild(); // get right child of *this char Data(); // return data in root node of *this };

  41. Binary Tree Functions • تمام عملگرهاي که روي درخت باينري کار مي کنند نيازمند حرکت روي درخت هستند: • ديدن نودها • اضافه کردن نود • حذف يک نود • محاسبه ارتفاع بصورت غير بازگشتي • لذا داشتن يک مکانيسم براي پيمايش درخت بسيار مفيد خواهد بود.

  42. Binary Tree Traversal • پيمايش درخت • هر نود فقط يک بار ديده شود. • تمام نودها ديده شوند. • يک يا چند عملگر روي درخت اجرا شود: • چاپ داده • جمع با حاصل جمع • چک کردن حداکثر ارتفاع • هر پيمايش يک ترتيب خطي از همه نودها را توليد خواهد کرد.

  43. Binary Tree Traversal • با درختان و زير درختان به يک صورت برخورد مي کنيم: • با ترتيب مساوي پيمايش را انجام مي دهيم • از بازگشت استفاده مي کنيم. • فرض کنيد براي پيمايش از حروف زير استفاده کنيم: • L يعني حرکت به فرزند سمت چپ • R يعني حرکت به فرزند سمت راست • V يعني ديدن نود ( يا انجام عمل مورد نظر)

  44. Binary Tree Traversal • شش حالت امکان پذير است: • LVR, LRV, VLR, VRL, RVL, RLV • ما فقط حالتهايي را که L قبل از R آمده است را مورد توجه قرار مي دهيم: LVR LRV VLR Inorder Postorder Preorder به ترتيبپس ترتيبپيش ترتيب

  45. Binary Tree Traversal Inorder: LVR A / B * C * D + E عبارت ميانوندي ديدن سمت چپ پيش از پدر + * E D * / C A B

  46. Binary Tree Traversal • پياده سازي Inorder: void BinaryTree::inorder() { inorder(root); } Void BinaryTree::inorder(BinaryTreeNode* node) { if (node) { inorder(node->leftChild); cout << node->data; // replace cout with inorder(node->rightChild); //arbitrary processing } }

  47. Binary Tree Traversal Postorder: LRV A B / C * D * E + عبارت پسوندي ديدن سمت چپ و راست پيش از پدر + * E D * / C A B

  48. Binary Tree Traversal • پياده سازي postorder: void BinaryTree::postorder() { postorder(root); } void BinaryTree::postorder(BinaryTreeNode* node) { if (node) { postorder(node->leftChild); postorder(node->rightChild); cout << node->data; } }

  49. Binary Tree Traversal Preorder: VLR + * * / A B C D E عبارت پيشوندي ديدن پدر پيش از فرزندان + * E D * / C A B

  50. Binary Tree Traversal • پياده سازي : Preorder void BinaryTree::preorder() { preorder(root); } Void BinaryTree::preorder(BinaryTreeNode* node) { if (node) { cout << node->data; preorder(node->leftChild); preorder(node->rightChild); } }

More Related