درخت دودويي و مرتب سازي با آن Binary Trees & Heap sort

Slides:



Advertisements
Similar presentations
BY Lecturer: Aisha Dawood. Heapsort  O(n log n) worst case like merge sort.  Sorts in place like insertion sort.  Combines the best of both algorithms.
Advertisements

Analysis of Algorithms
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu.
CS 253: Algorithms Chapter 6 Heapsort Appendix B.5 Credit: Dr. George Bebis.
Analysis of Algorithms CS 477/677
Tirgul 4 Sorting: – Quicksort – Average vs. Randomized – Bucket Sort Heaps – Overview – Heapify – Build-Heap.
Comp 122, Spring 2004 Heapsort. heapsort - 2 Lin / Devi Comp 122 Heapsort  Combines the better attributes of merge sort and insertion sort. »Like merge.
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 7 Heapsort and priority queues Motivation Heaps Building and maintaining heaps.
Data Structures Dynamic Sets Heaps Binary Trees & Sorting Hashing.
COMP 171 Data Structures and Algorithms Tutorial 5 Heapsort.
David Luebke 1 7/2/2015 Merge Sort Solving Recurrences The Master Theorem.
Computer Science and Software Engineering University of Wisconsin - Platteville 12. Heap Yan Shi CS/SE 2630 Lecture Notes Partially adopted from C++ Plus.
2IL50 Data Structures Spring 2015 Lecture 3: Heaps.
David Luebke 1 10/3/2015 CS 332: Algorithms Solving Recurrences Continued The Master Theorem Introduction to heapsort.
Better way for sorting – heap sort , , Department of Computer Science and Information Engineering, Chung Cheng University, Chayi, Taiwan.
Heaps, Heapsort, Priority Queues. Sorting So Far Heap: Data structure and associated algorithms, Not garbage collection context.
Binary Heap.
2IL50 Data Structures Fall 2015 Lecture 3: Heaps.
Chapter 21 Binary Heap.
Prepared by- Jatinder Paul, Shraddha Rumade
1 Algorithms CSCI 235, Fall 2015 Lecture 14 Analysis of Heap Sort.
David Luebke 1 12/23/2015 Heaps & Priority Queues.
Computer Algorithms Lecture 9 Heapsort Ch. 6, App. B.5 Some of these slides are courtesy of D. Plaisted et al, UNC and M. Nicolescu, UNR.
Max-Heapify Max_Heapify(A,i) { l=left(i) r=right(i) if(l A[i]) largest=l else largest=i if(r A[largest]) largest=r if(largest!=i) { exchange A[i] with.
CS223 Advanced Data Structures and Algorithms 1 Priority Queue and Binary Heap Neil Tang 02/09/2010.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΡΧΕΙΩΝ
CSC 413/513: Intro to Algorithms Solving Recurrences Continued The Master Theorem Introduction to heapsort.
Chapter 6: Heapsort Combines the good qualities of insertion sort (sort in place) and merge sort (speed) Based on a data structure called a “binary heap”
Lecture 8 : Priority Queue Bong-Soo Sohn Assistant Professor School of Computer Science and Engineering Chung-Ang University.
CSE 5392 Fall 2005 Week 4 Devendra Patel Subhesh Pradhan.
1 Heap Sort. A Heap is a Binary Tree Height of tree = longest path from root to leaf =  (lgn) A heap is a binary tree satisfying the heap condition:
David Luebke 1 2/5/2016 CS 332: Algorithms Introduction to heapsort.
Heapsort A minimalist's approach Jeff Chastine. Heapsort Like M ERGE S ORT, it runs in O(n lg n) Unlike M ERGE S ORT, it sorts in place Based off of a.
Sept Heapsort What is a heap? Max-heap? Min-heap? Maintenance of Max-heaps -MaxHeapify -BuildMaxHeap Heapsort -Heapsort -Analysis Priority queues.
6.Heapsort. Computer Theory Lab. Chapter 6P.2 Why sorting 1. Sometimes the need to sort information is inherent in a application. 2. Algorithms often.
1 Algorithms CSCI 235, Fall 2015 Lecture 13 Heap Sort.
Priority Queues and Heaps. John Edgar  Define the ADT priority queue  Define the partially ordered property  Define a heap  Implement a heap using.
Priority Queues A priority queue is an ADT where:
"Teachers open the door, but you must enter by yourself. "
Heaps, Heapsort, and Priority Queues
Heaps, Heap Sort and Priority Queues
Heapsort Chapter 6 Lee, Hsiu-Hui
Heap Sort Example Qamar Abbas.
Introduction to Algorithms
Priority Queues Linked-list Insert Æ Æ head head
Design and Analysis of Algorithms Heapsort
Heaps,heapsort and priority queue
مرتب سازی هرمی Heap Sort تهیه کنندگان: مریم هاشمی و ندا شیخی پاییز 88.
CS 583 Analysis of Algorithms
Heaps, Heapsort, and Priority Queues
CS200: Algorithm Analysis
Ch 6: Heapsort Ming-Te Chi
Counting (Pigeon Hole)
Priority Queue and Binary Heap Neil Tang 02/12/2008
Heaps 11/27/ :05 PM Heaps Heaps.
Heapsort.
"Teachers open the door, but you must enter by yourself. "
Heap Sort CSE 2011 Winter January 2019.
درختان 3.
Heap Sort.
Design and Analysis of Algorithms
Data Structures Lecture 29 Sohail Aslam.
Topic 5: Heap data structure heap sort Priority queue
HEAPS.
Heapsort Sorting in place
Solving Recurrences Continued The Master Theorem
Binary Heaps and Heapsort
Algorithms CSCI 235, Spring 2019 Lecture 14 Heap Sort Read: Ch. 6
Algorithms CSCI 235, Spring 2019 Lecture 15 Analysis of Heap Sort
CSE5311 Design and Analysis of Algorithms
Presentation transcript:

درخت دودويي و مرتب سازي با آن Binary Trees & Heap sort ساختمان داده ها والگوريتمها

درخت Tree درخت ساختمان داده اي مرکب از مجموعه اي از گرهها(Nodes) و مجموعه اي از لبه هاست(Edges) به شرطي که: هر گره يا ريشه درخت يا فرزند يک و تنها يک گره ديگر است. هر درخت تنها يک ريشه دارد، ريشه درخت فرزند هيچ گره ديگر نيست. هر گره مي تواند چندين فرزند داشته باشد ولي تنها يک پدر دارد. سطح گره Node Level : سطح گره بيانگر سطح رابطه فرزندي يک گره با ريشه درخت است  گره از نسل چندم است ؟ سطح ريشه، صفر است و سطح هر گره ديگر، يکي بيشتر از سطح پدر اوست. عمق درخت: عمق درخت برابر با ماکزيمم سطح گرهها است. گره برگ: گرهي است که هيچ فرزندي نداشته باشد. درخت ها را با تفصيل بيشتر، در آينده مطالعه خواهيم کرد

نمايش درخت معمولا، براي نمايش درخت، ريشه آن را در بالا و فرزندان آن را کمي پايين تر و در زير آن رسم مي کنند. رابطه پدر فرزندي را با پيکاني که نوک آن به سمت فرزند است، نمايش مي دهند.

درخت دودوي Binary Tree درخت دودويي، درختي است که هر گره آن حداکثر دو فرزند دارد اين نوع درخت کاربردهاي زيادي مانند مرتب سازي، جستجو، ارزيابي عبارات رياضي و ... دارد پياده سازي آن نيز آسان است

درخت دودويي کامل درخت دودوي کامل، درختي است که: همه برگهاي آن در يک سطح قرار دارند هر گره غير برگ دقيقا دو فرزند دارد

درخت دودويي تقريبا کامل درخت دودوي تقريبا کامل، درختي با عمق h است که تا سطح h- 1 کامل باشد.

ويژگيهاي درخت دودويي درخت دودويي در سطح k، حداکثر 2k گره دارد. Level 0:1 Node Level 1:2 Nodes Level 2:4 Nodes Level 3:3 Nodes (Incomplete Level) سطح گره k ام درخت برابر است با: حداکثر تعداد گرههاي يک درخت دودويي برابر است با:

ويژگيهاي درخت دودويي يادآوري: درخت دودويي با عمق h تقريبا کامل است اگر، تا عمق h-1 کامل باشد Level 0:1 Node Level 1:2 Nodes Level 2:4 Nodes Level 3:3 Nodes (Incomplete Level) اگر N تعداد گرههاي يک درخت دودويي تقريبا کامل باشد، گرههاي به بعد، برگ هستند ( فرزندي ندارند!)

Binary Tree ADT class BIN-TREE{ int numNodes ; // Number of tree nodes node treeNodes [1..numNodes] ; node getParent(node n) ; // get parent of a given node node getLeftChild(node n) ; //get left child of n node getRightChild(node n) ; //get right child of n int getKey(node n); // get value of sum node } // End of binary tree definition

پياده سازي درخت دودويي درخت دودوي T با آرايه A، بسادگي پياده سازي مي شود: ريشه درخت در A[0] قرار مي گيرد اگر گرهي در A[k] قرار داشته باشد،فرزند سمت چپ آن در A[2k +1] و فرزند سمت راست آن در A[2k + 2] قرار مي‌گيرد براي سادگي نمايش، از گره ويژه nil به جاي فرزنداني که وجود ندارند استفاده مي‌کنيم. 12 1 23 1 2 3 14 nil 7 5 3 4 6 12 1 23 3 14 nil 7 0 1 2 3 4 5 6

Max-Heap و Min Heap Max Heap درختي دودويي است که در آن ارزش هر گره بزرگتر يا مساوي ارزش فرزندان آن گره است. نتيجه فوري: ماکزيمم مقادير درخت در ريشه آن قرار دارد! Min Heap درختي دودويي است که در آن ارزش هر گره کوچکتر يا مساوي ارزش فرزندان آن گره است. در اينجا روي Max Heap متمرکز مي شويم. با کمي تغيير مي توان کليه مباحث مطرح شده را براي Min Heap هم استفاده کرد.

مثال Max Heap (a) (b)

مثال: ساخت Max Heap روش ساخت Max Heap

T(Max-Heapify(A,k)) = O(log n) تابع زير يک آرايه و انديس خاصي از آن را مي گيرد و سپس درختچه اي را که ريشه آن گره kام آرايه است، به درخت Heap تبديل مي کند Max-Heapify(A , k) //Create a max heap at A[k] nl = left(k) //left child nr = right(k) //right child if nl <= heap-length(A) and A[nl] > A[k] then largest = nl else largest = k if nr <= heap-length(A) and A[nr] > A[largest] then largest = nr if largest <> k then swap(A[k] , A[largest]) Max-Heapify(A, largest) اگر تعداد گرههاي درخت n باشد، اين دستور حداکثر به تعداد ارتفاع درخت يعني، log n اجرا مي شود T(Max-Heapify(A,k)) = O(log n) اين الگوريتم، خاصيت max heap را تنها براي گره خاصي برقرار مي کند. براي ساخت درخت heap‌اين الگوريتم بايد روي همه گرههاي غير برگ (چرا ؟) اجرا شود.

آناليز دقيقتر ‍ Create Heap max heap در هر گره هزينه اي از مرتبه O(h) دارد که در آن ، h ارتفاع درختچه شروع شده در گره مورد نظر است. الگوريتم بصورت bottom-up اجرا مي شود( چرا ؟) create-heap(A) for k= length(A) /2 downto 1 max-heapify(A , k) الگوريتم max-heapify کران بالايي برابر با log n دارد . پس مي توان گفت: create -heap کران بالايي برابر با n logn دارد. يعني T(create-heap(A[1..n]) = O(nlogn) اين نتيجه گيري درست است اما...

آناليز الگوريتم ساخت Heap d =عمق درخت سطح گره i ام =hi عمق درختچه i ام =di

آناليز الگوريتم Create Heap

مرتب سازي با استفاده از Max Heap heap-sort(A) heap-size(A) = length(A) create-heap(A) for k=length(A) downto 2 heap-size(A) = heap-size(A) -1 swap(A[1] , A[k]) max-heapify(A ,1)

create-max-heap(A) مثال Heap Sort 16 14 10 8 7 9 3 2 4 1 16 14 10 8 7 N= Heap Size = 10

Swap(A[1] , A[10]) N = N - 1 مثال Heap Sort 1 14 10 8 7 9 3 16 2 4 1 N=Heap Size = 9

maxheapify(A,1) مثال Heap Sort 14 8 10 4 7 9 3 2 1 14 8 10 4 7 9 3 2 1 16 N=Heap Size = 9

swap(A[1], A[9]) N = N - 1 مثال Heap Sort 1 8 10 4 7 9 3 14 2 1 8 10 4 16 N=Heap Size =8

maxheapify(A,1) مثال Heap Sort 10 8 9 4 7 1 3 2 10 8 9 4 7 1 3 2 14 16 N=Heap Size =8

swap(A[1], A[8]) N = N - 1 مثال Heap Sort 2 8 9 4 7 1 3 10 2 8 9 4 7 1 14 16 N=Heap Size =7

maxheapify(A,1) مثال Heap Sort 9 8 3 4 7 1 2 9 8 3 4 7 1 2 10 14 16 N=Heap Size =7

swap(A[1], A[7]) N = N - 1 مثال Heap Sort 2 8 3 9 4 7 1 2 8 3 4 7 1 9 10 14 16 N=Heap Size =6

maxheapify(A,1) مثال Heap Sort 8 7 3 4 2 1 8 7 3 4 2 1 9 10 14 16 N=Heap Size =6

swap(A[1], A[6]) N = N - 1 مثال Heap Sort 1 7 3 8 4 2 1 7 3 4 2 8 9 10 14 16 N=Heap Size =5

maxheapify(A,1) مثال Heap Sort 7 4 3 1 2 7 4 3 1 2 8 9 10 14 16 N=Heap Size =5

swap(A[1], A[5]) N = N - 1 مثال Heap Sort 2 4 3 7 1 2 4 3 1 7 8 9 10 14 16 N=Heap Size =4

maxheapify(A,1) مثال Heap Sort 4 2 3 1 4 2 3 1 7 8 9 10 14 16 N=Heap Size =4

swap(A[1], A[4]) N = N - 1 مثال Heap Sort 1 2 3 4 1 2 3 4 7 8 9 10 14 16 N=Heap Size =3

maxheapify(A,1) مثال Heap Sort 3 2 1 3 2 1 4 7 8 9 10 14 16 N=Heap Size =3

swap(A[1], A[3]) N = N - 1 مثال Heap Sort 1 3 2 1 2 3 4 7 8 9 10 14 16 N=Heap Size =2

maxheapify(A,1) مثال Heap Sort 2 1 2 1 3 4 7 8 9 10 14 16 N=Heap Size =2

swap(A[1], A[2]) N = N - 1 مثال Heap Sort 1 2 1 2 3 4 7 8 9 10 14 16 N=Heap Size =1

آناليز Heap sort HEAPSORT(A) 1 BUILD-MAX-HEAP(A) 2 for i ← length[A] downto 2 3 exchange A[1] ↔ A[i] 4 heap-size[A] ← heap-size[A] - 1 5 MAX-HEAPIFY(A, 1) O(n) (n-1) * O(log n) T(heapsort(A)) = O(n) + (n-1) O(log(n)) = O(n) + O(nlogn) = O(nlogn)

تمرين برنامه اي بنويسيد که عدد صحيح مثبت N را بگيرد و سپس آرايه اي تصادفي به طول N توليد کند. آنگاه اين آرايه را مرتب کرده و چاپ کند. خروجي برنامه شما بايد هم آرايه اصلي و هم آرايه مرتب را چاپ کند مسايل 6-1 تا 6-3 را حل کنيد