Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Ταξινόμησης Heapsort και WeakHeapsort. Αναγνώστου Χρήστος Μεταπτυχιακός Φοιτητής. ιπλωματική Εργασία

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Ταξινόμησης Heapsort και WeakHeapsort. Αναγνώστου Χρήστος Μεταπτυχιακός Φοιτητής. ιπλωματική Εργασία"

Transcript

1 Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Αναγνώστου Χρήστος Μεταπτυχιακός Φοιτητής ιπλωματική Εργασία Επιβλέπων: Παπαρρίζος Κωνσταντίνος, Καθηγητής Τμήμα Εφαρμοσμένης Πληροφορικής Πρόγραμμα Μεταπτυχιακών Σπουδών Ειδίκευσης Πανεπιστήμιο Μακεδονίας Θεσσαλονίκη Ιανουάριος 2009 Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής

2 Θα ήθελα να ευχαριστήσω θερμά τον επιβλέποντα καθηγητή μου και καθηγητή του τμήματος Εφαρμοσμένης Πληροφορικής του Πανεπιστημίου Μακεδονίας, κ. Παπαρρίζο Κωνσταντίνο τόσο για την πολύτιμη βοήθειά του κατά τη διάρκεια εκπόνησης της εργασίας αυτής όσο και για τη γενικότερη καθοδήγησή του. Επίσης, θα ήθελα να ευχαριστήσω την οικογένεια και τους φίλους μου που με βοήθησαν σε όλη αυτή την προσπάθεια. Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής

3 Περιεχόμενα 1 Περίληψη Εισαγωγή Αντικείμενο της εργασίας Διάρθρωση Της Εργασίας Αλγόριθμοι ταξινόμησης Σωροί (Heaps) Γενικά Δομή σωρού μεγίστων (max heap) Δομή σωρού ελαχίστων (min heap) Κατασκευή Σωρού Heapsort Εισαγωγή Κώδικας του αλγορίθμου Heapsort Ανάλυση λειτουργίας κώδικα Ανάλυση πολυπλοκότητας Υλοποίηση σε Java Weakheapsort Η δομή Weak-Heap Κώδικας του αλγορίθμου Weak-Heapsort Υλοποίηση σε Java Ανάλυση Πολυπλοκότητας Υπολογιστική μελέτη Εισαγωγή Υλοποίηση της Υπολογιστικής Μελέτης Εφαρμογές Εφαρμογές του Αλγορίθμου Ταξινόμησης Heapsort Εφαρμογές του Αλγορίθμου Ταξινόμησης WeakHeapsort Συμπεράσματα Αναφορές...87 Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής

4 1 Περίληψη Η διερεύνηση της υπολογιστικής συμπεριφοράς των αλγορίθμων αποτελεί ένα από τα πιο θεμελιώδη ζητήματα στην επιστήμη της πληροφορικής. Η επιστημονική έρευνα στο γνωστικό αντικείμενο των αλγορίθμων έχει να κάνει με την ανάπτυξη νέων αλγορίθμων ή με τη βελτίωση ήδη υπαρχόντων. ύο πολλοί γνωστοί αλγόριθμοι ταξινόμησης είναι ο Ηeapsort και ο Weakheapsort. O αλγόριθμος Heapsort χρησιμοποιεί μια δομή δεδομένων που ονομάζεται σωρός με σκοπό να ταξινομήσει ένα σετ από τιμές. Είναι ένας comparison-based αλγόριθμος ταξινόμησης και ανήκει στην οικογένεια αλγορίθμων ταξινόμησης επιλογής(selection sort). Αν και είναι σχετικά αργός αλγόριθμος σε κάποιες μηχανές έχει το πλεονέκτημα πολυπλοκότητας χειρότερης περίπτωσης(worst_case) Θ(n log n). Ο Heapsort είναι ένας in-place αλγόριθμος, αλλά δεν είναι σταθερός(stable sort).η μέθοδος αυτή προτάθηκε από τον Williams το 1964.Στη μέθοδο αυτή εργάστηκε επίσης και ο Floyd(1962,1964). Ο Dutton(1993) παρουσίασε έναν νέο αλγόριθμο τον Weakhapsort. Ο αριθμός συγκρίσεων χειρότερης περίπτωσης είναι n [log n] - 2log n + n - [log n]< n log n + 0.1n και οι σωροί Weakheaps μπορούν να υλοποιηθούν με n-1 συγκρίσεις. Στόχος αυτής της εργασίας είναι να αναλύσει σε βάθος το θεωρητικό υπόβαθρο των αλγορίθμων Heapsort και Weakheapsort και αφού υλοποιηθούν σε κάποια γλώσσα προγραμματισμού, να εξάγει συμπεράσματα για την υπολογιστική τους συμπεριφορά. 1

5 2 Εισαγωγή 2.1 Αντικείμενο της εργασίας Οι αλγόριθμοι ταξινόμησης είναι αλγόριθμοι που τοποθετούν τα στοιχεία μίας λίστας με συγκεκριμένη σειρά. Η ταξινόμηση τους στην πληροφορική γίνεται με βάση διάφορα κριτήρια όπως την υπολογιστική πολυπλοκότητα των συγκρίσεων, την υπολογιστική πολυπλοκότητα των ανταλλαγών, την επαναληπτικότητα και την σταθερότητα. Στη συγκεκριμένη εργασία θα ασχοληθούμε με τους αλγορίθμους Heapsort και Weakheapsort. Αντίθετα με άλλους αλγορίθμους ταξινόμησης όπως ο mergesort και ο quicksort, ο heapsort δεν απαιτεί πολλαπλούς πίνακες για να δουλέψει και η χρονική πολυπλοκότητα του είναι O(n log(n)). Χρησιμοποιεί μια ειδική δομή δεδομένων που ονομάζεται σωρός (heap). Ο σωρός είναι ένας πίνακας αντικειμένων που μπορεί να αντιμετωπισθεί ως ένα σχεδόν πλήρες δυαδικό δέντρο. Έτσι το αριστερό παιδί ενός στοιχείου a[i] είναι το a[2*i]. Ομοίως, το δεξί παιδί ενός στοιχείου a[i] είναι το a[2i+1]. Και ο πατέρας του είναι το στοιχείο a[i/2 ]. Υπάρχουν δύο είδη δυαδικών σωρών, οι max-heaps και οι minheaps. Και στα δύο είδη, οι τιμές στους κόμβους ικανοποιούν μια προτεραιότητα σωρού, οι λεπτομέρειες των οποίων εξαρτώνται από το είδος σωρού. Σε ένα max-heap,το οποίο χρησιμοποιείται σε έναν αλγόριθμο heapsort ο κανόνας είναι ότι κάθε κόμβος a[i] είναι μικρότερος από τον πατέρα του. Κατά συνέπεια, το μεγαλύτερο στοιχείο σε ένα max-heap αποθηκεύεται στη ρίζα. Ο heapsort αρχίζει «χτίζοντας» έναν σωρό από ένα σετ δεδομένων και έπειτα ανταλλάσει τη ρίζα (μεγαλύτερο στοιχείο) με το τελευταίο στοιχείο του σωρού. Στη συνέχεια αφαιρείται το τελευταίο στοιχείο από το σωρό. Μετά την αφαίρεση του τελευταίου στοιχείου, αναδημιουργεί το σωρό. Αυτό επαναλαμβάνεται έως ότου δεν υπάρχει κανένα στοιχείο στο σωρό. A(Max-) Weak-Heap δημιουργείται χαλαρώνοντας τον όρο σωρών ως εξής: Κάθε κλειδί στο δεξί υποδένδρο κάθε κόμβου είναι μικρότερο ή ίσο με το κλειδί του κόμβου του. 2

6 Η ρίζα δεν έχει κανένα αριστερό παιδί. Τα φύλλα βρίσκονται στα τελευταία δύο επίπεδα του δέντρου μόνο. Για την αναπαράσταση του πίνακα καθορίζουμε το αριστερό παιδί του δείκτη i ως 2i + r(i) και το δεξί παιδί ως 2i r(i) όπου 0 < i < n-1.οι διάδοχοι από έναν κόμβο στον αριστερό κλάδο του δεξιού υποδένδρου ονομάζονται grandchildren. Για τη σύγκριση των αλγορίθμων Heapsort και Weakheapsort απαιτείται να γίνει μια υπολογιστική μελέτη. Τα κριτήρια αυτής της σύγκρισης είναι: Ο χρόνος επεξεργασίας Ο αριθμός των επαναλήψεων Η μέτρηση των βασικών πράξεων 2.2 ιάρθρωση Της Εργασίας Στο τρίτο κεφάλαιο γίνεται μια σύντομη περιγραφή των πιο γνωστών αλγορίθμων ταξινόμησης και μια συνολική παρουσίασή τους σε έναν πίνακα. Το τέταρτο κεφάλαιο αναφέρεται στους σωρούς. Πιο συγκεκριμένα παρουσιάζονται οι σωροί μεγίστων και ελαχίστων και οι αλγόριθμοι διαγραφής και εισαγωγής κόμβων. To πέμπτο κεφάλαιο αναφέρεται στον αλγόριθμο Heapsort. Αφού γίνει μια ιστορική αναδρομή του αλγορίθμου ακολουθεί η παρουσίαση του κώδικα και η επεξήγηση της λειτουργίας του. Στη συνέχεια γίνεται η ανάλυση πολυπλοκότητας και τέλος παρουσιάζεται η υλοποίηση του κώδικα σε Java. 3

7 Το έκτο κεφάλαιο αναφέρεται στον Αλγόριθμο Weak- Heapsort. Αφού γίνει μια αναφορά στη δομή Weak-heap παρουσιάζεται ο κώδικας σε γλώσσα Java, η επεξήγηση της λειτουργίας του και η ανάλυση της πολυπλοκότητάς του. Στο έβδομο κεφάλαιο γίνεται υπολογιστική μελέτη των δύο αλγορίθμων. Στο όγδοο κεφάλαιο παρουσιάζονται παραδείγματα των δύο αυτών αλγορίθμων. Στο ένατο κεφάλαιο παρουσιάζονται τα συμπεράσματα της μελάτης. 4

8 3 Αλγόριθμοι ταξινόμησης Οι αλγόριθμοι ταξινόμησης είναι αλγόριθμοι που τοποθετούν τα στοιχεία μίας λίστας με συγκεκριμένη σειρά, από τις οποίες οι πιο γνωστές είναι η αριθμητική και η λεξικογραφική σειρά. Όσον αφορά την ταξινομημένη λίστα που προκύπτει πρέπει να τηρούνται δύο κανόνες: Τα στοιχεία της λίστας πρέπει να είναι τοποθετημένα σε αύξουσα σειρά. Το αποτέλεσμα να περιέχει όλα τα στοιχεία της αρχικής λίστας, μόνο που είναι σε διαφορετική σειρά. Οι αλγόριθμοι ταξινόμησης που χρησιμοποιούνται πληροφορική ταξινομούνται με βάση : στην Την υπολογιστική πολυπλοκότητα (worst, average and best behaviour) των συγκρίσεων των στοιχείων από την άποψη του μεγέθους της λίστας(n). Για χαρακτηριστικούς αλγόριθμους ταξινόμησης η καλή συμπεριφορά είναι O(n log n) και η κακή συμπεριφορά είναι Ω(n 2 ). Η ιδανική συμπεριφορά για μία ταξινόμηση είναι O(n). Αλγόριθμοι ταξινόμησης οι οποίοι χρησιμοποιούν μόνο ένα αφηρημένο κλειδί για λειτουργίες σύγκρισης χρειάζονται πάντα τουλάχιστον Ω(n log n) συγκρίσεις κατά μέσον όρο. Την υπολογιστική πολυπλοκότητα των ανταλλαγών (για "in place" αλγορίθμους). Την χρήση μνήμης και άλλων υπολογιστών πόρων. Ειδικότερα, μερικοί αλγόριθμοι ταξινόμησης are "in place", έτσι ώστε μόνο O(1) ή O(log n) μνήμη απαιτείται πέρα από τα στοιχεία που ταξινομούνται, ενώ άλλοι πρέπει να δημιουργήσουν τις βοηθητικές θέσεις για τα στοιχεία που αποθηκεύονται προσωρινά. Την επαναληπτικότητα. Μερικοί αλγόριθμοι είναι είτε επαναλαμβανόμενοι είτε μη επαναλαμβανόμενοι, ενώ άλλοι μπορούν να είναι και τα δύο. 5

9 Την σταθερότητα. Οι σταθεροί αλγόριθμοι ταξινόμησης διατηρούν τη σχετική σειρά των αρχείων με τα ίσα κλειδιά (π.χ. τιμές). Την γενική μέθοδο: insertion, exchange, selection, merging, etc. Exchange sorts include bubble sort and quicksort. Selection sorts include shaker sort and heapsort. Η αποδοτική ταξινόμηση είναι σημαντική και για άλλες κατηγορίες αλγορίθμων που προαπαιτούν την ταξινόμηση της λίστας για να εφαρμοστούν (όπως π.χ. ο δυαδικός αλγόριθμος). Για αυτό το λόγο αλλά και για την μεγάλη πολυπλοκότητα που έχουν οι αλγόριθμοι αυτής της κατηγορίας, έχουν αναπτυχθεί πολλοί αλγόριθμοι ταξινόμησης. Στη συνέχεια περιγράφονται εν συντομία οι πιο γνωστοί αλγόριθμοι ταξινόμησης. Αλγόριθμος φυσαλίδας (bubble sort) Ένας από τους πιο ευρέως χρησιμοποιούμενους αλγόριθμους αναζήτησης είναι ο αλγόριθμος φυσαλίδας (bubble sort), ο οποίος είναι ένας απλός και ευθύς αλγόριθμος για την ταξινόμησης συλλογών από δεδομένα. Ο αλγόριθμος αυτός ξεκινά από την αρχή της λίστας και συγκρίνει τα πρώτα δύο στοιχεία. Αν το πρώτο στοιχείο είναι το μεγαλύτερο, τότε εναλλάσσει τη θέση των δύο στοιχείων. Έπειτα συνεχίζει να συγκρίνει τα υπόλοιπα ζεύγη, δηλαδή το δεύτερο στοιχείο με το τρίτο και ούτω καθεξής. Όταν φτάσει στο τέλος της λίστας, ξεκινά πάλι από την αρχή δουλεύοντας με τον ίδιο τρόπο και σταματά όταν σε ένα πέρασμα της λίστας δε γίνει καμία εναλλαγή στοιχείων. Αν και απλός, ο αλγόριθμος φυσαλίδας είναι πολύ αναποτελεσματικός σπάνια χρησιμοποιείται στην εκπαίδευση. Η πολυπλοκότητα καλύτερης περίπτωσης του συγκεκριμένου αλγόριθμου είναι O(n) και της χειρότερης περίπτωσης O(n 2 ), όπου n είναι πάλι το μέγεθος της λίστας. 6

10 Αλγόριθμος επιλογής (selection sort) Ένας άλλος απλός αλγόριθμος ταξινόμησης είναι ο αλγόριθμος επιλογής (selection sort) που έχει βελτιωμένη απόδοση σε σχέση με τον αλγόριθμο φυσαλίδας. Ο αλγόριθμος αυτός αρχικά βρίσκει το μικρότερο σημείο της λίστας και το εναλλάσσει με το πρώτο στοιχείο της λίστας. Στη συνέχεια βρίσκει το μικρότερο από τα άλλα στοιχεία, το εναλλάσσει με το δεύτερο στοιχείο της λίστας και ούτω καθεξής. Η επίδοση του αλγόριθμου επιλογής δεν επηρεάζεται από την προηγούμενη σειρά τοποθέτησης των στοιχείων της λίστας και εκτελεί τον ίδιο αριθμό επαναλήψεων εξαιτίας της απλής δομής του. Ο αλγόριθμος επιλογής απαιτεί n εναλλαγές, με αποτέλεσμα Θ(n) εγγραφές στη μνήμη, η οποία είναι και η βέλτιστη περίπτωση για κάθε αλγόριθμο ταξινόμησης. Για αυτό το λόγο είναι πολύ ελκυστικός όταν η πιο «ακριβή» λειτουργία είναι η εγγραφή στη μνήμη. Σε άλλη περίπτωση, όμως, άλλοι αλγόριθμοι ταξινόμησης πιο περίπλοκοι είναι πιο αποτελεσματικοί. Αλγόριθμος εισαγωγής (insertion sort) Ο αλγόριθμος εισαγωγής (insertion sort) είναι ένας απλός αλγόριθμος ταξινόμησης που είναι σχετικά αποτελεσματικός σε μικρές λίστες και σχεδόν ταξινομημένες λίστες και συνήθως χρησιμοποιείται ως μέρος άλλων πιο περίπλοκων αλγόριθμων. Ο αλγόριθμος παίρνει ένα ένα τα στοιχεία της λίστας και τα τοποθετεί σε μια νέα λίστα σε ταξινομημένη σειρά. Η λειτουργία της εισαγωγής είναι, όμως, «ακριβή» γιατί απαιτεί τη μετατόπιση των υπόλοιπων στοιχείων μία θέση αριστερά (shift left). Ο εν λόγω αλγόριθμος έχει πολυπλοκότητα καλύτερης περίπτωσης Ο(n) και χειρότερης περίπτωσης Ο(n 2 ). 7

11 Αλγόριθμος συνένωσης (merge sort) Ο αλγόριθμος συνένωσης (merge sort) έχει ως πλεονέκτημα την ευκολία που παρουσιάζει η συνένωση ήδη ταξινομημένων λιστών σε μια νέα ταξινομημένη λίστα. Αρχίζει συγκρίνοντας κάθε ζευγάρι στοιχείων της λίστας (δηλαδή το πρώτο με το δεύτερο, το τρίτο με το τέταρτο και ούτω καθεξής) και εναλλάσσει τα στοιχεία αν το πρώτο είναι μεγαλύτερο του δεύτερου. Στη συνέχεια συνενώνει τα ζευγάρια των ταξινομημένων λιστών των δύο στοιχείων σε ταξινομημένες λίστες των τεσσάρων στοιχείων, στη συνέχεια των οχτώ και ούτω καθεξής, μέχρι να συνενωθούν δύο λίστες στην τελική ταξινομημένη λίστα. Ο εν λόγω αλγόριθμος έχει θεωρητική πολυπλοκότητα Ο(n log n). Αλγόριθμος heapsort Ένας άλλος γνωστός αλγόριθμος ταξινόμησης είναι ο αλγόριθμος heapsort (heap sort), που αποτελεί μια βελτιωμένη παραλλαγή του αλγόριθμου επιλογής, που περιγράφηκε προηγουμένως. Όπως και ο αλγόριθμος επιλογής, έτσι και αυτός ο αλγόριθμος δουλεύει ψάχνοντας το μεγαλύτερο (ή μικρότερο) στοιχείο της λίστας, τοποθετώντας το στο τέλος (ή στην αρχή) και συνεχίζει με το υπόλοιπο της λίστας. Η διαφορά είναι, όμως, ότι ο αλγόριθμος heapsort εκτελεί αυτή τη διαδικασία πιο αποτελεσματικά χρησιμοποιώντας ένα τύπο δεδομένων που ονομάζεται heap, που ουσιαστικά είναι ένας ειδικός τύπος δυαδικού δέντρου. Μόλις τα στοιχεία της λίστας σχηματίσουν το heap, η ρίζα του δέντρου είναι το μεγαλύτερο στοιχείο. Τότε αφαιρείται και τοποθετείται στο τέλος της λίστας και σχηματίζεται ξανά το heap με αποτέλεσμα η ρίζα του δέντρου να είναι πάλι το μεγαλύτερο στοιχείο. Χρησιμοποιώντας το heap για να βρεθεί το μεγαλύτερο στοιχείο της λίστας απαιτείται Ο(log n) χρόνος αντί για Ο(n) που χρειάζεται για μια σειριακή σάρωση στον απλό αλγόριθμο επιλογής. Αυτό επιτρέπει στον heapsort να εκτελείται σε χρόνο Ο(n log n). 8

12 Aλγόριθμος quick sort Ο αλγόριθμος «quick sort» είναι ένα παράδειγμα αλγορίθμου διαίρει και βασίλευε που στηρίζεται σε μια λειτουργία partition. Για το partition ενός πίνακα, επιλέγουμε ένα στοιχείο, επονομαζόμενο ως βήμα (pivot), και μετακινούμε όλα τα μικρότερα στοιχεία πριν το στοιχείο βήμα και τα μεγαλύτερο μετά από αυτό. Η λειτουργία αυτή μπορεί να γίνει αποτελεσματικά σε γραμμικό χρόνο. Στη συνέχεια επαναληπτικά ταξινομούμε τις μικρότερες και μεγαλύτερες υπολίστες. Ο εν λόγω αλγόριθμος είναι ένας από τους ταχύτερους αλγόριθμους ταξινόμησης και μάλιστα απαιτεί Ο(log n) μνήμη. Το πιο περίπλοκο θέμα σε αυτόν τον αλγόριθμο είναι η επιλογή του στοιχείου βήματος. Λανθασμένες επιλογές αυτού του στοιχείου μπορούν να κοστίσουν σε δραματική μείωση της επίδοσης σε Ο(n 2 ). Αν, όμως, σε κάθε βήμα διαλέγουμε το μεσαίο στοιχείο της λίστας τότε ο αλγόριθμος εκτελείται σε Ο(n log n). Aλγόριθμος radix sort Ένας άλλος γνωστός αλγόριθμος ταξινόμησης είναι ο αλγόριθμος «radix sort». Ο συγκεκριμένος αλγόριθμος ταξινομεί μία λίστα αριθμών μεταχειριζόμενος τους αριθμούς σαν δυαδικούς. Υπάρχουν δύο παραλλαγές αυτού του τύπου του αλγορίθμου: i) η πρώτη παραλλαγή ταξινομεί τους αριθμούς αρχίζοντας από το πιο σημαντικό ψηφίο και ii) η δεύτερη παραλλαγή από το λιγότερο σημαντικό ψηφίο. Έτσι για παράδειγμα, η πρώτη παραλλαγή του αλγορίθμου ταξινομεί τους αριθμούς σύμφωνα με το πρώτο ψηφίο τους χρησιμοποιώντας κάποιον άλλον απλό αλγόριθμο ταξινόμησης, συνεχίζει με το επόμενο ψηφίο και στο τέλος η λίστα είναι ταξινομημένη. Ο αλγόριθμος radix sort έχει θεωρητική πολυπλοκότητα Ο(n*k), όπου n είναι ο αριθμός των στοιχείων της λίστας και k το μέγεθος σε bit της αναπαράστασης των αριθμών. 9

13 Αλγόριθμος shaker sort Ένας τελευταίος αλγόριθμος ταξινόμησης είναι ο αλγόριθμος του «shaker sort». Ο αλγόριθμος αυτός είναι μια παραλλαγή του αλγόριθμου φυσαλίδας, που εξετάστηκε στην ενότητα αυτή. Η διαφορά του με τον αλγόριθμο της φυσαλίδας είναι ότι αντί να διασχίζει τη λίστα από την αρχή προς το τέλος, τη διασχίζει εναλλάξ από την αρχή προς το τέλος και μετά από το τέλος προς την αρχή και ούτω καθεξής. Με τη διαφοροποίηση αυτή ο αλγόριθμος αυτός πετυχαίνει ελαφρά βελτιωμένη απόδοση σε σχέση με τον κλασικό αλγόριθμο φυσαλίδας, γιατί ο αλγόριθμος φυσαλίδας διασχίζει τη λίστα προς μία κατεύθυνση και μπορεί να μετακινεί στοιχεία της λίστας ένα βήμα προς τα πίσω σε κάθε επανάληψη. Η θεωρητική πολυπλοκότητα του αλγορίθμου αυτού είναι στη χειρότερη και στη μέση περίπτωση Ο(n 2 ), ενώ πλησιάζει το Ο(n) στην καλύτερη περίπτωση, που συμβαίνει όταν η αρχή της λίστας είναι ταξινομημένη. Στον πίνακα 1 παρουσιάζονται η μέση πολυπλοκότητα(average), η πολυπλοκότητα χειρότερης(worst) και καλύτερης(best) περίπτωσης, υπό την προϋπόθεση ότι το μήκος κάθε κλειδιού είναι σταθερό, και ότι όλες οι συγκρίσεις, ανταλλαγές, και άλλες αναγκαίες διαδικασίες μπορούν να προχωρήσουν σε σταθερό χρόνο. Η Memory δείχνει το ποσό της βοηθητικής αποθήκευσης που απαιτείται πέρα από αυτό που χρησιμοποιείται από τον ίδιο τον κατάλογο, στις ίδιες περιπτώσεις. 10

14 Name Best Average Worst Memory Stable Method Bubble sort O(n) O(n 2 ) O(1) Yes Exchanging Cocktail sort O(n) O(n 2 ) O(1) Yes Exchanging Comb sort O(n log n) O(n log n) O(n log n) O(1) No Exchanging Gnome sort O(n) O(n 2 ) O(1) Yes Exchanging Selection sort O(n 2 ) O(n 2 ) O(n 2 ) O(1) No Selection Insertion sort O(n) O(n + d) O(n 2 ) O(1) Yes Insertion Shell sort O(n 1.5 ) O(1) No Insertion Binary tree sort O(n log n) O(n log n) O(n 2 ) O(n) Yes Insertion Library sort O(n) O(n log n) O(n 2 ) O(n) Yes Insertion Merge sort O(n log n) O(n log n) O(n log n) O(n) Yes Merging In-place merge sort O(n log n) O(n log n) O(n log n) O(1) Yes Merging Heapsort O(n log n) O(n log n) O(n log n) O(1) No Selection Smoothsort O(n) O(n log n) O(1) No Selection Quicksort O(n log n) O(n log n) O(n 2 ) O(log n) No Partitioning Introsort O(n log n) O(n log n) O(n log n) O(log n) No Hybrid Patience sorting O(n) O(n 2 ) O(n) No Insertion Πίνακας 1 11

15 4 Σωροί (Heaps) 4.1 Γενικά Ο σωρός είναι μια δενδρική δομή και χρησιμοποιείται για την δημιουργία ουρών προτεραιότητας(priority queues). Η ρίζα του δέντρου περιλαμβάνει το μικρότερο-μεγαλύτερο στοιχείο του αναλόγως αν έχουμε σωρό ελαχίστων ή μεγίστων. Τα επόμενα δύο στοιχεία του δένδρου είναι τα παιδιά του. Γενικότερα αν ο πατέρας είναι στη θέση i τα παιδιά του θα είναι στην θέση 2i(αριστερό παιδί) και 2i+1(δεξί παιδί) αντίστοιχα. Αν i η θέση ενός παιδιού i/2 είναι η θέση του πατέρα του. Κάθε σωρός με n στοιχεία έχει ύψος log 2 n. Ο σωρός, όπως και τα δέντρα γενικότερα, μπορεί να υλοποιηθεί με πίνακα, στον οποίο εισάγονται τα κλειδιά του σωρού από αριστερά προς τα δεξιά και από πάνω προς τα κάτω. Υπάρχουν δύο είδη σωρών Οι σωροί μεγίστου (maxheap) Οι σωροί ελαχίστων(minheap) Στην εικόνα 1 φαίνεται ένας σωρός και η αντίστοιχη υλοποίησή του σε πίνακα [4, 1, 3, 2, 16, 9, 10, 14, 8, 7] Εικόνα 1 ομή Σωρού 12

16 Οι βασικές λειτουργίες ενός σωρού είναι: Η εισαγωγή(insert) ενός στοιχείου στον σωρό Η διαγραφή(delete) ενός στοιχείου από τον σωρό 4.2 ομή σωρού μεγίστων (max heap) Σωρός μεγίστων είναι ένα δένδρο, το οποίο ικανοποιεί δύο συνθήκες: Η τιμή του κλειδιού κάθε κόμβου είναι μεγαλύτερη ή ίση από τις τιμές των κλειδιών των παιδιών του. Είναι ένα συμπληρωμένο δέντρο, που σημαίνει ότι μπορεί να προκύψει από ένα πλήρες δέντρο αφαιρώντας έναν αριθμό στοιχείων από το τέλος. Στην εικόνα 2 παρουσιάζεται ένας σωρός μεγίστων Εικόνα 2 Σωρός μεγίστων Οι διαδικασίες της εισαγωγής και της διαγραφής υλοποιούνται με τους ακόλουθους τρόπους: 13

17 Εισαγωγή(Insert) Όταν εισάγουμε ένα καινούργιο στοιχείο στο σωρό αυτό τοποθετείται στην επόμενη διαθέσιμη θέση στο τελευταίο επίπεδο. Αν η τιμή του σωρού δεν παραβιάζει την ιδιότητα του σωρού (δηλαδή η τιμή του είναι μικρότερη η ίση από αυτή του γονέα του) τότε το στοιχείο μένει στη θέση του. Σε διαφορετική περίπτωση παιδί και γονέας ανταλλάσσουν θέσεις. Αυτή η διαδικασία συνεχίζεται μέχρι το καινούργιο στοιχείο να βρει μια θέση τέτοια ώστε να ικανοποιείται η ιδιότητα του σωρού. Έτσι κάθε στοιχείο που εισάγεται στο σωρό θα πρέπει να διασχίσει ένα μονοπάτι από το φύλλο στο οποίο βρισκόταν αρχικά μέχρι κάποιον κατάλληλο εσωτερικό κόμβο. Στη χειρότερη περίπτωση το μονοπάτι θα είναι ως τη ρίζα του δέντρου. Ο χρόνος εισαγωγής ενός στοιχείου στο δέντρο είναι O(logn) όπου n το πλήθος των στοιχείων του σωρού. Στη χειρότερη περίπτωση θα χρειαστούν τόσα βήματα όσο και το ύψος του δέντρου. ιαγραφή(delete) Το μεγαλύτερο στοιχείο βρίσκεται πάντα στη ρίζα αλλά όταν το απομακρύνουμε δημιουργείται ένα κενό. Το κενό πρέπει να καλυφτεί με τέτοιο τρόπο ώστε ο σωρός να τηρεί την ιδιότητα του σωρού. Μετά την απομάκρυνση του μεγαλύτερου στοιχείου τοποθετείται στη ρίζα το τελευταίο στοιχείο του σωρού και το τρέχον μέγεθος μειώνεται κατά ένα. Αν το στοιχείο που περιέχει τώρα η ρίζα είναι μεγαλύτερο ή ίσο με τα παιδιά του μένει ως έχει. Σε διαφορετική περίπτωση το μεγαλύτερο παιδί παίρνει τη θέση του γονέα και αυτό συνεχίζεται μέχρι το στοιχείο που ήταν στη ρίζα να βρεθεί σε μία θέση στο σωρό που οι τιμές των παιδιών του να μην είναι μεγαλύτερες από τη δικιά του. Και σε αυτήν τη περίπτωση ο χρόνος διαγραφής είναι O(logn) όπου n το πλήθος των στοιχείων του σωρού. 14

18 4.3 ομή σωρού ελαχίστων (min heap) Σωρός ελαχίστων είναι ένα δένδρο, το οποίο ικανοποιεί δύο συνθήκες: Η τιμή του κλειδιού κάθε κόμβου είναι μικρότερη ή ίση από τις τιμές των κλειδιών των παιδιών του. Είναι ένα συμπληρωμένο δέντρο, που σημαίνει ότι μπορεί να προκύψει από ένα πλήρες δέντρο αφαιρώντας έναν αριθμό στοιχείων από το τέλος. Στην εικόνα παρουσιάζεται ένας σωρός ελαχίστων Εικόνα 3 Σωρός ελαχίστων Οι διαδικασίες της εισαγωγής και της διαγραφής υλοποιούνται με τους ακόλουθους τρόπους: Εισαγωγή στοιχείου(insert) Για να εισάγουμε ένα στοιχείο στο σωρό, αρχικά το προσθέτουμε στο τέλος του. Αν το στοιχείο που εισάγουμε είναι μικρότερο από τον γονιό του, τότε αλλάζουν θέση. Επαναλαμβάνουμε αυτή τη διαδικασία μέχρι να μην παραβιάζεται ο κανόνας αυτός. Παρακάτω φαίνεται ένα παράδειγμα εισαγωγής στοιχείου στον σωρό. 15

19 16

20 ιαγραφή ελάχιστου στοιχείου (deletemin) Για να διαγράψουμε το ελάχιστο στοιχείο του σωρού ακολουθούμε την εξής μέθοδο. Πρώτα διαγράφουμε το στοιχείο της κορυφής και βάζουμε στη θέση του το τελευταίο στοιχείο του σωρού. Στη συνέχεια κάνουμε τις κατάλληλες αλλαγές, εφόσον αυτές απαιτούνται για να μην παραβιάζεται ο 1ος κανόνας του σωρού ελαχίστων. Παρακάτω φαίνεται ένα παράδειγμα διαγραφής στοιχείου από τον σωρό. 17

21 18

22 4.4 Κατασκευή Σωρού Ο σωρός μπορεί να κατασκευαστεί χρησιμοποιώντας τον παρακάτω αλγόριθμο, ο οποίος καλεί τον αλγόριθμο εισαγωγής ενός στοιχείου. Θεωρούμε ότι τα στοιχεία έρχονται με μια σειρά και δεν είναι γνωστά εκ των προτέρων. BUILDHEAP (Α) { } for ί = 1 to n do Insert (Α,i]) end for Παρακάτω φαίνεται ένα παράδειγμα κατασκευής σωρού Ας υποθέσουμε ότι έχουμε την ακολουθία στοιχείων 1,2,3,4. Η διαδικασία κατασκευής του σωρού φαίνεται στο παρακάτω σχήμα: Εισαγωγή 1 Εισαγωγή 2 Εισαγωγή 3 Στην χείριστη περίπτωση, κάθε στοιχείο που εισάγεται θα ξεκινήσει από φύλλο του σωρού και θα καταλήξει στην ρίζα, άρα αν εισάγεται στο βήμα i, τότε θα χρειαστεί O(log i) βήματα. Άρα με τη διαδοχική εισαγωγή n στοιχείων, ο χρόνος του αλγορίθμου εκφράζεται ως: O(log1) + O(log2) O(log n) = O(n log n) 19

23 Ωστόσο μπορούμε να επιτύχουμε καλύτερο χρόνο για την κατασκευή του σωρού αν γνωρίζουμε από την αρχή όλη την ακολουθία εισόδου και την έχουμε αποθηκευμένη σε έναν πίνακα. Τότε θα θεωρήσουμε ότι ο αρχικός πίνακας εισόδου Α είναι η αναπαράσταση ενός αταξινόμητου σωρού και εμείς θα επιβάλλουμε την ιδιότητα του σωρού στον πίνακα αυτόν, ξεκινώντας από τους χαμηλότερους εσωτερικούς κόμβους και πηγαίνοντας προς την ρίζα. Για τον σκοπό αυτό, χρησιμοποιούμε την ακόλουθη συνάρτηση διατήρησης της ιδιότητας του σωρού σε ένα υποδένδρο. heapify (A,i) { Ζ = 2 i R=2 i+1 if l < n and a[l] > a[i] max = l if l < n and a[lj > a[i]. max = l else max = i if r < n and a[r] > a [max] max=r if i = max then swap (a[i],a{max}) } Θεωρούμε τώρα ότι στην αταξινόμητη ακολουθία όλα τα στοιχεία που είναι φύλλα του σωρού είναι υποσωροί που πληρούν την ιδιότητα του σωρού. Έπειτα για κάβε επόμενο εσωτερικό κόμβο (από κάτω προς τα πάνω, δηλαδή από n/2 ως 1) επιβάλλουμε την συνέπεια με την ιδιότητα σωρού χρησιμοποιώντας την παραπάνω ρουτίνα ως εξής: 20

24 BuitdHeap (A,i) { for i = [n/2] to 1 do heapify (A, i) end for } Η πολυπλοκότητα μίας κλήσης της συνάρτησης Heapify είναι O(h) όταν καλείται από έναν κόμβο που έχει ύψος h. Άρα η συνολική πολυπλοκότητα της builtheap είναι: n h Oh ( ) On ( h 2 2 ) lg n lg n h 1 h 0 h 0 oo h 0 h 1/2 k 2 (1 1/2) 2 2 Κατά συνέπεια, ο χρόνος υλοποίησης του BUILD-MAX- HEAP μπορέστε να υπολογιστεί ως lg n oo h h On ( On ( ) On h 2 2 ( ) h h 0 h 0 Στο σχήμα 2 φαίνεται η εκτέλεση του αλγορίθμου κατασκευής του σωρού, όταν ο πίνακας εισόδου είναι ο [5, 6,1,4,8,7,3, 2, 9] 21

25 Σχήμα 2 22

26 5 Heapsort 5.1 Εισαγωγή O αλγόριθμος Heapsort είναι ένας comparison-based αλγόριθμος ταξινόμησης και ανήκει στην οικογένεια αλγορίθμων ταξινόμησης επιλογής( selection sort). Αν και είναι σχετικά αργός αλγόριθμος σε κάποιες μηχανές έχει το πλεονέκτημα πολυπλοκότητας χειρότερης περίπτωσης(worst_case) Θ(n log n). Ο Heapsort είναι ένας inplace αλγόριθμος, αλλά δεν είναι σταθερός( stable sort).η μέθοδος αυτή προτάθηκε από τον Williams το 1964.Στη μέθοδο αυτή εργάστηκε επίσης και ο Floyd(1962,1964).Έχουν προταθεί κάποιες παραλλαγές του αλγορίθμου Heapsort. O BOT-TOM-UP-HEAPSORT είναι μια παραλλαγή του Heapsort που εκτελεί 1.5n log n+o(n) βασικές συγκρίσεις στη χειρότερη περίπτωση. Η ιδέα είναι να αναζητηθεί η πορεία προς το φύλλο ανεξαρτήτως της θέσης του στοιχείου της ρίζας. εδομένου ότι το αναμενόμενο βάθος είναι υψηλό αυτή η πορεία διαπερνιέται bottom-up. Ο Fleischer (1991) όπως και ο Schaffer και ο Sedgewick (1993) θεωρούν ότι ο αλγόριθμος αυτός απαιτεί τουλάχιστον 1.5n logn o(n log n) συγκρίσεις. Κάποιος μπορεί να συμπεράνει ότι ο μέσος αριθμός συγκρίσεων σε αυτήν την παραλλαγή είναι οριακός κοντά στο n log n + O(n). Ο MDR-HEAPSORT προτάθηκε από τον McDiarmid και τον Reed (1989). Ο αλγόριθμος αυτός εκτελεί λιγότερες από nlogn + cn comparisons στη χειρότερη περίπτωση και επεκτείνεται τον BOT-TOM-UP HEAPSORT με τη χρησιμοποίηση ενός bit για να κωδικοποιήσει σε ποιο κλάδο μπορεί να βρεθεί το μικρότερο στοιχείο και ένα άλλο για να χαρακτηρίσει εάν αυτή η πληροφορία είναι άγνωστη. Ο αλγόριθμος WEAK-HEAPSORT είναι πιο κομψός και πιο γρήγορός. Αντί για δύο bits ανά στοιχείο ο WEAK-HEAPSORT χρησιμοποιεί μόνο ενα. Ο ULTIMATE-HEAPSORT προτάθηκε από τον Katajainen το Ο αλγόριθμος αυτός αποφεύγει τα χειρότερα παραδείγματα περίπτωσης του BOT-TOM-UP-HEAPSORT με τον περιορισμό του συνόλου σωρών σε σωρούς δύο στρωμάτων. Είναι 23

27 δυσκολότερο να εγγυηθεί αυτή η περιορισμένη μορφή. Ο αλγόριθμος αυτός πετυχαίνει μικρότερο αριθμό συγκρίσεων χειρότερης περίπτωσης και ο αριθμός των συγκρίσεων στη μέση περίπτωση είναι μεγαλύτερος του BOT-TOM-UP-HEAPSORT. 5.2 Κώδικας του αλγορίθμου Heapsort { } Heapify(A, i) l <- left(i) r <- right(i) if l <= heapsize[a] and A[l] > A[i] then largest <- l else largest <- i if r <= heapsize[a] and A[r] > A[largest] then largest <- r if largest!= i then swap A[i] <-> A[largest] Heapify(A, largest) { } Buildheap(A) heapsize[a] <- length[a] for i <- length[a]/2 down to 1 do Heapify(A, i) Heapsort(A) { Buildheap(A) for i <- length[a] down to 2 do swap A[1] <-> A[i] heapsize[a] <- heapsize[a] - 1 Heapify(A, 1) } 24

28 5.3 Ανάλυση λειτουργίας κώδικα Ο Heap Sort αρχικά λειτουργεί μετατρέποντας τον αρχικό πίνακα σε ένα σωρό. Ο αλγόριθμος HeapSort χρησιμοποιεί μια διαδικασία αποκαλούμενη Heapify για να ολοκληρώσει την εργασία του. Ο αλγόριθμος Heapify, λαμβάνει ένα δυαδικό δέντρο ως είσοδο και το μετατρέπει σε ένα σωρό. Η ρίζα συγκρίνεται έπειτα με δύο άμεσα παιδιά του, και το μεγαλύτερο παιδί ανταλλάσσεται με αυτήν. Αυτό μπορεί να οδηγήσει σε ένα από το αριστερό ή το δεξιό υποδένδρο. Συνεπώς, ο αλγόριθμος Heapify εφαρμόζεται κατ' επανάληψη στο κατάλληλο υποδένδρο του οποίου η τιμή ανταλλάχθηκε με τη ρίζα και η διαδικασία συνεχίζεται μέχρις ότου είτε φτάσουμε σε ένα στοιχείο του φύλου είτε καθοριστεί ότι η προτεραιότητα του σωρού ικανοποιείται στο συγκεκριμένο υποδένδρο. Ολόκληρη η μέθοδος HeapSort αποτελείται από δύο σημαντικά βήματα: ΒΗΜΑ 1:Κατασκευή του αρχικού σωρού χρησιμοποιώντας και ρυθμίζοντας (N/2) φορές όλα τα στοιχεία που δεν είναι φύλλα. ΒΗΜΑ 2 :Ταξινόμηση ανταλλάσοντας και ρυθμίζοντας τον σωρό (N-1) φορές. Στο βήμα 2, από τη στιγμή που το μεγαλύτερο στοιχείο του σωρού είναι πάντα στη ρίζα, αφού κατασκευαστεί ο αρχικός σωρός, η τιμή της ρίζας ανταλλάσσεται με το μικρότερο πιο δεξί στοιχείο. Αυτός ο κόμβος αντιστοιχεί στο τελευταίο στοιχείο του πίνακα και έτσι μετά από την ανταλλαγή το πιο δεξί στοιχείο του πίνακα έχει την μεγαλύτερη τιμή. Από την στιγμή που η τιμή του χαμηλότερου πιο δεξιού στοιχείου έχει μετακινηθεί προς τη ρίζα, η προτεραιότητα του υπόλοιπου σωρού έχει διαταραχθεί. Συνεπώς, τώρα η διαδικασία Heapify εφαρμόζεται στον υπόλοιπο σωρό. Μόλις ο υπόλοιπος σωρός μετατραπεί πάλι σε έναν κατάλληλο σωρό, η διαδικασία ανταλλαγής,όπως περιγράφηκε στην προηγούμενη παράγραφο, εφαρμόζεται πάλι ακολουθούμενη από τη διαδικασία Heapify. 25

29 5.4 Ανάλυση πολυπλοκότητας Έστω T(n) ο χρόνος που χρειάζεται ο αλγόριθμος Heapsort για να εφαρμοστεί σε έναν πίνακα μεγέθους n. O χρόνος που χρειάζεται ο αλγόριθμος για να ολοκληρωθεί είναι Τ(n)= T buildheap + Τ Heapify (k) +Θ(n-1) HEAPIFY T heapify (n) = Θ(1) + T heapify ( size of subtree ) Έτσι πρέπει να ξέρουμε πόσο μεγάλα μπορεί να είναι τα υποδένδρα του σωρού με n στοιχεία. Μια πρώτη προσέγγιση θα έδειχνε ότι ένα υποδένδρο θα μπορούσε να είναι το μισό του δένδρου μιας και ο σωρός είναι δυαδικό δένδρο. Σε ένα πλήρες δυαδικό δέντρο, κάθε μια από τις περιοχές που παρουσιάζονται έχει περίπου τον ίδιο αριθμό κόμβων. Σε ένα σωρό, η περιοχή IV μπορεί να είναι κενή ενώ η περιοχή III είναι πλήρης. Από τη στιγμή που το αριστερό υποδένδρο αποτελείται από τις περιοχές I και III, έχει περίπου τα 2/3 από τους κόμβους του σωρού. I II ΙΙΙ ΙV Αυτό το επιχείρημα μπορεί να τυποποιηθεί. Έστω L είναι το βάθος και n ο αριθμός των κόμβων του σωρού Α. 26

30 2 L n < 2 L+1 To δεξί υποδένδρο του σωρού A δεν μπορεί να είναι μεγαλύτερο από το αριστερό υποδένδρο. Ένα πλήρες δέντρο ύψους h έχει 2 h+1 1 κόμβους. Οι περιοχές I και II στο διάγραμμα έχουν η καθεμία 2 L-1 1 κόμβους. Η περιοχή III έχει 2 L-1 κόμβους, και το μέγεθος από το αριστερό υποδένδρο είναι 2 L 1. Έστω n = 2 L + k, όπου 0 k < 2 L. Το αριστερό υποδένδρο περιέχει 2 L-1 + j κόμβους όπου 0 j < 2 L-1. Αν i = k j, 0 i 2 L-1, τότε το n = 2 L + j + i και (size of left subtree/n) =(2 L-1 + j)/ (2 L + j)=< =(2 L-1 + j)/ (2*2 L + j)=f(j) Έστω ότι α=2 L-1 f(j)=(α+j)/(2*a+ j) f(0)= (α+0)/(2*α+ 0)=1/2 f(α)=(α+α)/(2*α+α)=2/3 f (j)=α/(2*α+ j) 2 >=0 Η f είναι μια αύξουσα συνάρτηση που παίρνει ένα μέγιστο στο αριστερό σημείο τέλους, και η μέγιστη τιμή είναι 2/3. Έτσι καταλήγουμε στο εξής θεώρημα: Αν ένας σωρός A έχει μέγεθος n, τα υποδένδρα του έχουν μέγεθος μικρότερο ή ίσο με 2n/3. Άρα T heapify (n) = T heapify (2/3) + Θ(1)= Θ(lg n). 27

31 BUILDHEAP Ο χρόνος που απαιτείται από την συνάρτηση MAX-HEAPIFY όταν καλείται σε έναν κόμβο του ύψους h είναι O(h). Έτσι μπορούμε εκφράσουμε το συνολικό κόστος της συνάρτησης BUILD-MAX- HEAP ως n h Oh ( ) On ( h 2 2 ) lg n lg n h 1 h 0 h 0 oo h 0 h 1/2 k 2 (1 1/2) 2 2 Κατά συνέπεια, ο χρόνος υλοποίησης του BUILD-MAX-HEAP μπορέστε να υπολογιστεί ως lg n oo h h On ( On ( ) On h 2 2 ( ) h h 0 h 0 Αρα η πολυπλοκότητα της κατασκευής του σωρού φράσσεται από O(n). Άρα τελικά η πολυπλοκότητα του αλγορίθμου HEAPSORT είναι: T(n) = Tbuildheap(n) +Σ Theapify(k) + Θ(n 1)= Θ(n) + Σ lg k +Θ(n 1)= Θ(n lg n) 28

32 5.5 Υλοποίηση σε Java package javaapplication102; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.util.arrays; import java.util.collections; public class HeapSort { public static void main(string[] args) throws IOException { long start, stop; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("How many elements you want to add to the list: "); int n = Integer.parseInt(in.readLine()); int array[] = new int[n]; for(int i = 0; i < n; i++){ array[i] = i; } Collections.shuffle(Arrays.asList(array)); start = System.currentTimeMillis(); HeapSort hsort=new HeapSort(); hsort.heapsorting(array); stop = System.currentTimeMillis(); System.out.println("Cputime: " + (stop-start)); //System.out.println(Arrays.toString(arry_int)); } public void HeapAdjust(int[] arr, int s,int m) { int temp=arr[s]; for(int j=2*s+1;j<m;j=j*2+1) { if(j+1<m && arr[j]>arr[j+1]) ++j; if(temp<arr[j])break; 29

33 } } arr[s]=arr[j]; s=j; arr[s]=temp; public void HeapSorting(int[] arr) { } } for(int i=(arr.length/2-1);i>=0;--i) { HeapAdjust(arr,i,arr.length); } for(int j=arr.length-1;j>0;--j) { int temp=arr[0]; arr[0]=arr[j]; arr[j]=temp; HeapAdjust(arr,0,j); } 30

34 6 Weakheapsort 6.1 Η δομή Weak-Heap A(Max-) Weak-Heap δημιουργείται χαλαρώνοντας τον όρο σωρών ως εξής: Κάθε κλειδί στο δεξί υποδένδρο κάθε κόμβου είναι μικρότερο ή ίσο με το κλειδί του κόμβου του Η ρίζα δεν έχει κανένα αριστερό παιδί. Tα φύλλα βρίσκονται στα τελευταία δύο επίπεδα του δέντρου μόνο Στο σχήμα 3 φαίνεται η δομή μιας Weak-heap Σχήμα 3 31

35 Η ελλοχεύουσα δομή για να περιγράψει τη δομή δέντρων είναι ένας συνδυασμός δύο πινάκων. Κατ' αρχάς, έχουμε τον πίνακα a στον οποίο τα αντικείμενα βρίσκονται και δεύτερον, τον πίνακα των bits αντιστροφής που αναπαριστούν εάν το δέντρο που συνδέεται με έναν κόμβο περιστρέφεται ή όχι. Για την αναπαράσταση του πίνακα καθορίζουμε το αριστερό παιδί του δείκτη i ως 2i + r(i) και το δεξί παιδί ως 2i r(i) όπου 0 < i < n-1. Κατά συνέπεια αντιστρέφοντας το r(i) ανταλλάσσουμε τους δείκτες από τα δεξιά και αριστερά παιδιά. Tο υποδένδρο του i περιστρέφεται. Παραδείγματος χάριν, μια αναπαράσταση πίνακα σύμφωνα με την εικόνα είναι η εξής a = [14,11, 9,13, 8,10,12, 7,0,4, 5, 2,1, 6, 3] r =[0,1,1,1,1,1,1, 0,1,1,1,1,1,1,1]. Οι διάδοχοι από έναν κόμβο στον αριστερό κλάδο του δεξιού υποδένδρου ονομάζονται grandchildren. Στην εικόνα τα grandchildren από τη ρίζα είναι το 11, 13, 7,3. Η λειτουργία αντίστροφής Gparent(x) ορίζεται ως Gparent(Parent(x)) στην περίπτωση που x είναι ένα αριστερό παιδί και Parent(x) αν x είναι ένα δεξί παιδι. 6.2 Κώδικας του αλγορίθμου Weak-Heapsort WeakHeapSort(n) function Gparent(j) while odd(j) = Reverse[j/2] do j =[j/2] return[j/2] end Gparent 32

36 Merge(i,j) if h[i] < h[j] then Swap(i,j) Reverse[j] = not (Reverse{j]) end if end Merge MergeForest(m) x=1 Reverse[ [m/2] = false If m > 3 then do x = 2*x + {Reverse[x]} until 2 * x + {Reverse[x]} > m while x > 0 do Merge(m, x) X=[x/2] end while end MergeForest for i = n - 1 downto 1 do Merge(Gparent(i),i) h[n] =h[0] for i = n - 1 downto 2 do MergeForest(i) end WeakHeapSort Η διαδικασία περιγράφεται παρακάτω. Αρχικά η διαδικασία WeakHeapify κατασκευάζει εναν weak-heap από ένα δεδομένο σύνολο αυθαίρετων τιμών. Κατόπιν όσο ο weak-heap δεν είναι κενός, αφαιρείται η ρίζα και συγχωνεύεται το προκύπτον δάσος των σωρών weak-heaps. 33

37 WeakHeapSort(n) WeakHeapify(n) for i = n - 1 downto 2 do MergeForest(i) Ο αλγόριθμος υποθέτει ότι όλες οι τιμές του δυαδικού πίνακα αντιστροφής έχει τεθεί false και έχει δωθεί ένας αρχικός πίνακας h[0... n - 1] από αυθαίρετες τιμές.στη συνέχεια οι τιμές αυτές αναδιανέμονται σε έναν πίνακα h[1...n] σε διάταξη ανόδου. Οι διαδικασίες WeakHeapify και MergeForest επικαλούνται δύο άλλες διαδικασίες,την Gparent και την Merge,οι οποίες περιγράφονται στη συνέχεια. Ο αλγόριθμος Gparent ενεργεί ως λειτουργία που επιστρέφει τον Grandparent, Gparent(j) while odd(j) = Reverse[j/2] do j = [j/2] return(j/2]) Στον επόμενο αλγόριθμο, οι weak-heaps που βρίσκονται στο i και το j συγχωνεύεται σε μία weak-heap που βρίσκεται στο i. Merge(i,j) If h[i]< h[j] then Swap(i,j) Reverse[j] = not(reverse[j]) end if WeakHeapify(n) For j = n - 1 downto 1 do Merge(Gparent(j)) Από τη στιγμή που κάθε κλήση της Merge εκτελεί μια σύγκριση στοιχείων και η λειτουργία Gparent δεν χρησιμοποιεί καμία, η διαδικασία WeakHeapify απαιτεί ακριβώς n- 1 συγκρίσεις. Η διαδικασία MergeForest επικαλείται τις τιμές του πίνακα h[1... m] αναπαριστώντας ένα δάσος από weak-heaps. Η δήλωση do-until 34

38 προχωράει το χ μέσω των κόμβων στο S0 {m} στον πιο αριστερό κόμβο. Κάθε κόμβος που μετράται, εκτός από τον κόμβο 1, ειναι ο(weak-heap) αριστερός γιος του πατέρα του. Ο κόμβος m συγχωνεύεται αρχικά με τον κόμβο χ ώστε το ελλοχεύον δυαδικό δέντρο να παραμείνει ισορροπημένο. Αυτό επίσης εγγυάται ότι τα ζευγάρια των weak-heaps που συγχωνεύονται, καθώς περπατάμε πίσω μέχρι τη ρίζα, είναι συμβατοί σωροί weak-heaps. Όπως περιγράφεται ως εδώ η διαδικασία, η MergeForest θα άφηνε την παραγόμενη weak-heap σε έναν πίνακα h[0... m - 1]. Τότε ο WeakHeapSort θα πρέπει να κινήσει την τιμή από το h[0] στο h[n] πριν την επόμενη κλήση της MergeForest. Για να αποβάλει αυτή την περιττή μεταφορά δεδομένων, η MergeForest απλά εξετάζει τον κόμβο m ως τη ρίζα της weak-heap που κατασκευάζεται από την δήλωση while. MergeForest(m) x=1 Reverse[ [m/2] = false If m > 3 then do x = 2*x + {Reverse[x]} until 2 * x + {Reverse[x]} > m while x > 0 do Merge(m, x) X=[x/2] end while end MergeForest Αν ο πίνακας h{1... m] αντιπροσωπεύει ένα δάσος από weak-heaps, τότε η διαδικασία MergeForest προκαλεί είτε log(m + 1)-1 είτε log(m + 1)+1 συκρίσεις δεδομένων για να εκτελεστεί. Όταν το m είναι μια δύναμη του δύο, log(m + 1)-1 πάντα κρατά, διαφορετικά και οι δύο τιμές είναι δυνατές. Η σημασία αυτού είναι αυτή ότι, κατά τη διάρκεια της διαδικασίας ταξινόμησης, είμαστε εγγυημένοι ότι τουλάχιστον μια φορά σε κάθε επίπεδο μια σύντομη διαδρομή θα ανακαλυφθεί από την MergeForest. Κατά συνέπεια, δεδομένου ότι υπάρχουν n- 1 κλήσεις της MergeForest και log(n) 35

39 επίπεδα, η διαφορά μεταξύ του ελάχιστου και μέγιστου αριθμού συγκρίσεων είναι ακριβώς n-1-log(n). Αφού επιστρέψουμε από το WeakHeapify, η μεγαλύτερη τιμή, h[0], κινείται αμέσως προς το h[n]. Αυτό αποτελεσματικά "αφαιρεί " τη ρίζα της weak-heap. Κατόπιν, η MergeForest reweakheapifies και μετακινεί την καινούρια ρίζα στο h[i]. Εμείς επανειλημμένα μειώνουμε το i και επικαλούμαστε την MergeForest, μέχρι το i < 2. Σε εκείνο το σημείο, μια τιμή παραμένει, η μικρότερη, και αυτή είναι η h[1]. 6.3 Υλοποίηση σε JAVA package javaapplication94; abstract class item { item() {} public abstract boolean greater (item o); public abstract void assign(item c); public abstract String tostring(); } class intitem extends item { int i ; // key intitem() { i = Integer.MIN_VALUE; } intitem(int i){ this.i = i; } public void assign(item c) { this.i = ((intitem)c).i; } public boolean greater(item c){ return i > ((intitem)c).i; } public String tostring() { StringBuffer st = new StringBuffer(""+i); return st.tostring(); } } abstract class Sort { item a[]; int c; int s; void init(item arr[]) { c = s = 0; a = new item[arr.length]; for(int j=0;j<arr.length;j++) a[j]=arr[j]; } 36

40 void swap(int i, int j) { item o=a[0]; assign(o,a[i]); assign(a[i],a[j]); assign(a[j],o); } void assign(item i, item j) { s++; i.assign(j); } boolean greater(item i, item j) { c++; return i.greater(j); } public abstract void sort (); public String tostring() { StringBuffer st = new StringBuffer(); for (int j=1;j<a.length;j++) st.append(a[j]+" "); st.append("\n Comparisons:"+c+" Assignments:"+s); return st.tostring(); } } class weakheapsort extends Sort { int r[]; weakheapsort(item arr[]) { init(arr); r = new int[arr.length]; } int gparent(int j) { while ((j & 1) == r[j/2]) j /= 2; return (j/2); } void merge(int i, int j) { if (greater(a[j],a[i])) { r[j] = 1-r[j]; swap(i,j); } } public void mergeforest(int m) { int x=1; while (2* x + r[x] < m) x = 2*x + r[x]; while (x>0) { merge(0,x); x /= 2; } } void heapify() { for (int i=a.length-1;i>=1;i--) merge(gparent(i),i); } public void sort() { heapify(); for (int i = a.length-1;i>=2;i--) { swap(0,i); mergeforest(i); } if (a.length>1) swap(0,1); } } public class SortTest { static intitem t[]; static void shuffle(int l) { t = new intitem[l+1]; for (int j=0;j<l;j++) t[j+1] = new intitem(j); t[0] = new intitem(0); for(int j=l;j>=2;j--) { 37

41 int ri = 1+(int) (Math.random() * j); intitem temp = t[ri]; t[ri] = t[j]; t[j] = temp; } //for (int j=0;j<=l;j++) System.out.println(t[j]+" "); } public static void main(string args[]) { long start, stop; int l = Integer.valueOf(900000).intValue(); shuffle(l); start = System.currentTimeMillis(); Sort w = new weakheapsort(t); w.sort(); stop = System.currentTimeMillis(); System.out.println("Weakheapsort: "+w); System.out.println("Cputime: " + (stop-start)); } } 6.4 Ανάλυση Πολυπλοκότητας Το μέτρο της πολυπλοκότητας θα είναι ο αριθμός συγκρίσεων στοιχείων με δύο τρόπους. Αγνοούμε τις διαιρέσεις και τους πολλαπλασιασμούς ακέραιων αριθμών δια δύο που απαιτούνται για να περπατήσει πάνω-κάτω ένα δυαδικό δέντρο. Εκείνες οι μερίδες από το πρόγραμμα θα μπορούσαν να κωδικοποιηθούν σε μια γλώσσα χαμηλότερου επιπέδου έτσι ώστε οδηγίες καταλόγων μετατόπισης να χρησιμοποιηθούν για να γίνουν αυτές οι διαδικασίες μικρότερες κατά έναν παράγοντα στο χρόνο εκτέλεσης. Επίσης, όταν τα στοιχεία των δεδομένων είναι πιο σύνθετα, αυτές οι διαδικασίες γίνονται λιγότερο σημαντικές από τους χειρισμούς στοιχείων. Ο μέγιστος αριθμός συγκρίσεων στοιχείων που απαιτείται από τον WeakHeapSort για οποιοδήποτε αριθμό n > 1 τιμών είναι λιγότερος από (n-1)log(n) n. Παράγουμε αρχικά ένα ανώτερο όριο στον ελάχιστο αριθμό συγκρίσεων που απαιτούνται. 38

42 Κατόπιν υποστηρίζουμε ότι ο μέγιστος αριθμός συγκρίσεων είναι το πολύ n-log(n)-1 περισσότερος από αυτό το αποτέλεσμα. Καμία σύγκριση δεν εμφανίζεται όταν n=1. Έτσι μπορούμε να υποθέσουμε ότι 2 k-1 < n < 2 k, για θετικό ακέραιο αριθμό k. Κατόπιν, k = log(n) είναι ο αριθμός επιπέδων των κόμβων στο κατώτατο σημείο του δέντρου με τη ρίζα στο επίπεδο 0, τον δεξιό γιο του στο επίπεδο 1 κλπ. Καθώς οι κόμβοι ρίζας αφαιρούνται, επικαλείται η MergeForest με τις εναπομείναντες τιμές να καλούνται διαδοχικά n-1, n-2,...,2. Καθώς το i μειώνεται από n-1 ως το 2, ο ελάχιστος συνολικός αριθμός συγκρίσεων, αποκλειστικά της WeakHeapify, είναι Από τη στιγμή που η WeakHeapify χρησιμοποιεί ακριβώς n- 1 συγκρίσεις δεδομένων, ο γενικός αριθμός συγκρίσεων καλύτερης περίπτωσης είναι nk -2 k + 1. Από τα προηγούμενα σχόλια, ο συνολικός αριθμός συγκρίσεων χειρότερης περίπτωσης είναι ο αριθμός καλύτερης περίπτωσης συν n-1-[logn] δηλαδή ένα σύνολο από nk-2 k +n-k. Για οποιουσδήποτε n > 1, υπάρχουν μερικοί πραγματικοί αριθμοί x, όπου 0<χ<1, έτσι ώστε k=logn+χ. Κατόπιν, nk-2 k +n-k = nlog n + nx- n2x + n-log π -x = (n- 1)log n +n(x-2 x + 1) -x. Η λειτουργία x-2 x +1 φράσσεται άνω από το και είναι μηδέν όταν χ= 0. Κατά συνέπεια, ο συνολικός αριθμός συγκρίσεων είναι αυστηρά λιγότερος από (n - 1)logn n. Όσον αφορά τον αλγόριθμο WeakHeapsort, και για τους ίδιους λόγους, μια ανάλυση μέσης περίπτωσης φαίνεται δύσκολη και είναι άλυτη αυτή εώς αυτή τη στιγμή. Προσομοιώσεις με τυχαία παραγμένα στοιχεία εμφανίζει να είναι περίπου 0.1% από τη μέση από την καλύτερη και χειρότερη περίπτωση, η οποία είναι, nk - 2k + (n - k + 1)/2 < (n - 0.5) logn n. 39

43 7 Υπολογιστική μελέτη 7.1 Εισαγωγή Κάθε φορά, όμως, που αναπτύσσεται ένας νέος αλγόριθμος, για να συγκριθεί ως προς την υπολογιστική αποτελεσματικότητά του με τους ήδη υπάρχοντες απαιτείται μια χρονοβόρα και επίπονη διαδικασία. Η διαδικασία αυτή αναφέρεται ως υπολογιστική μελέτη. Πολλές εργασίες έχουν γραφτεί για το πως πρέπει να σχεδιάζονται τα πειράματα και πως πρέπει να διενεργούνται οι υπολογιστικές μελέτες [Hooker (1994)], [Rardin. (2001)]. Για την υπολογιστική σύγκριση διαφόρων αλγορίθμων, απαραίτητη είναι η πολλαπλή εκτέλεση όλων των αλγορίθμων σε συλλογές από δεδομένα. Για την εξαγωγή ασφαλών συμπερασμάτων σχετικά με τη συμπεριφορά των αλγορίθμων, τα δεδομένα αυτά πρέπει να πληρούν ορισμένες προϋποθέσεις. Συγκεκριμένα, πρέπει να είναι μεγάλης διάστασης, να δημιουργούνται από γεννήτριες τυχαίων αριθμών και για κάθε διάσταση να λύνονται από τους αλγορίθμους 10 ή και περισσότερα στιγμιότυπα. Περισσότερες πληροφορίες σχετικά με τη δημιουργία τυχαίων συλλογών από δεδομένα μπορούν να βρεθούν στην αναφορά [Hall (2001)]. Η επιλογή των κατάλληλων δεικτών απόδοσης είναι ένας κρίσιμος παράγοντας σε μια υπολογιστική μελέτη [Crowder (1979)]. Οι δείκτες απόδοσης πρέπει να είναι, όσο το δυνατόν, πιο ανεξάρτητοι από την υπολογιστική μελέτη. είκτες απόδοσης που έχουν χρησιμοποιηθεί περισσότερο στις υπολογιστικές μελέτες είναι: 40

44 Ο χρόνος επεξεργασίας Ο αριθμός των επαναλήψεων Η μέτρηση των βασικών πράξεων Αν χρησιμοποιηθεί σε μια υπολογιστική μελέτη ο χρόνος επεξεργασίας ως δείκτης απόδοσης, πρέπει να περιλαμβάνονται μέθοδοι για την όμοια τυποποίηση των αποτελεσμάτων. Αναλυτικότερες οδηγίες για τον τρόπο διενέργειας υπολογιστικών μελετών καθώς και για τα συχνότερα εμφανιζόμενα λάθη, μπορεί κανείς να βρει στην εργασία [Coffin κ.ά. (2000)] 7.2 Υλοποίηση της Υπολογιστικής Μελέτης Ο υπολογιστής που χρησιμοποιήθηκε για την υλοποίηση της συγκεκριμένης υπολογιστικής μελέτης είχε: Επεξεργαστή coreduo 1.86 Ghz 3 Gbyte RAM Λογισμικό Vista Home Premium Service Pack 1 H υπολογιστική μελέτη του αλγορίθμου Heapsort και του WeakHeapsort έγινε σε Java jdk1.6.0 update7. Η εισαγωγή στοιχείων στα δυο αυτά προγράμματα έγινε με ψευδογεννήτριες συναρτήσεις. Παρακάτω παρουσιάζονται τα αποτελέσματα. 41

45 Cputime1 είναι ο χρονος του αλγορίθμου Heapsort σε second Cputime2 είναι ο χρονος του αλγορίθμου Weakheapsort σε second n είναι ο αριθμός των δεδομένων n cputime1 cputime ,001 0, ,002 0, ,010 0, ,018 0, ,037 0, ,056 0, ,078 0, ,096 0, ,132 1, ,156 1, ,234 1, ,456 1, ,734 2,161 42

46 Heapsort Weakheapsort 43

47 Από την υπολογιστική μελέτη προκύπτει ότι ο αλγόριθμος Heapsort είναι πιο γρήγορος από τον Weakheapsort.Για μικρές τιμές δεδομένων ο χρόνος επεξεργασίας των δύο αλγορίθμων δεν διαφέρει πολύ.όσο όμως ο όγκος των δεδομένων μεγαλώνει και συγκεκριμένα για n> η διαφορά στον χρόνο διαφέρει αρκετά και μάλιστα αυξάνει διαρκώς. 44

48 8 Εφαρμογές 8.1 Εφαρμογές του Αλγορίθμου Ταξινόμησης Heapsort Παράδειγμα 1 Έστω ότι έχουμε το παρακάτω δυαδικό δέντρο Η αναπαράστασή του σε μορφή πίνακα είναι η εξής Το δέντρο αυτό όμως δεν είναι σωρός (Max-Heap). Για να εφαρμοστεί ο αλγόριθμος Heapsort το δυοδικό αυτό δέντρο πρέπει να μετατραπεί αρχικά σε ένα σωρό Max-heap μέσω της συνάρτησης BuildHeap. Εφόσον το Heapsize=10 ξεκινάμε από τη θέση i=5 45

49 To 40 συγκρίνεται με το 56 και αλλάζουν θέση To 20 συγκρίνεται με το 80 και το 10 και αλλάζει θέση με το

50 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων To 2 συγκρίνεται με το 78 και το 6 και αλλάζει θέση με το To 70 συγκρίνεται με το 80 και το 56 και αλλάζει θέση με το Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 47

51 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων To 70 συγκρίνεται με το 20 και το 10 αλλά δεν αλλάζει θέση γιατί είναι μεγαλύτερο To 52 συγκρίνεται με το 80 και το 78 και αλλάζει θέση με το Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 48

52 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων To 52 συγκρίνεται με το 70 και το 56 και αλλάζει θέση με το Το δένδρο αυτό είναι πλέον ένας σωρός μεγίστων Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 49

53 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 80 αλλάζει θέση με το 40 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 50

54 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 78 αλλάζει θέση με το 20 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 51

55 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 52

56 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 70 αλλάζει θέση με το 10 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 53

57 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 56 αλλάζει θέση με το 6 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 54

58 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 52 αλλάζει θέση με το 2 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 55

59 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 40 αλλάζει θέση με το 6 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 56

60 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 20 αλλάζει θέση με το 6 και αφαιρείται από τον σωρό Το 10 αλλάζει θέση με το 2 και αφαιρείται από τον σωρό Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 57

61 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Το 6 αλλάζει θέση με το 2 και αφαιρείται από τον σωρό Έτσι προκύπτει ο ταξινομημένος πίνακας Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 58

62 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων Παράδειγμα 2 Έστω ότι έχουμε το παρακάτω δυαδικό δέντρο Η αναπαράστασή του σε μορφή πίνακα είναι η εξής Το δέντρο αυτό όμως δεν είναι σωρός (Max-Heap).Για να εφαρμοστεί ο αλγόριθμος Heapsort το δυοδικό αυτό δέντρο πρέπει να μετατραπεί αρχικά σε ένα σωρό Max-heap μέσω της συνάρτησης BuildHeap. Εφόσον το Heapsize=10 ξεκινάμε από τη θέση i=5 Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 59

63 Αναγνώστου Χρήστος, Ανάλυση Επεξεργασία και Παρουσίαση των Αλγορίθμων To 44 συγκρίνεται με το 51 και αλλάζει θέση To 15 συγκρίνεται με το 72 και το 40 και αλλάζει θέση με το Πανεπιστήμιο Μακεδονίας ΜΠΣΕ Τμήματος Εφαρμοσμένης Πληροφορικής 60

Αλγόριθµοι και Πολυπλοκότητα

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Φεβρουαρίου 0 / ένδρα Ενα δένδρο είναι

Διαβάστε περισσότερα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Σωροί 1 Ορισμοί Ένα δέντρο μεγίστων (δένδρο ελαχίστων) είναι ένα δένδρο, όπου η τιμή κάθε κόμβου είναι μεγαλύτερη (μικρότερη) ή ίση με των τιμών των παιδιών του Ένας σωρός μεγίστων (σωρός ελαχίστων) είναι

Διαβάστε περισσότερα

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Η διαδικασία PercolateDown, Δημιουργία Σωρού O Αλγόριθμος Ταξινόμησης HeapSort Υλοποίηση, Παραδείγματα

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

Ταξινόμηση. Σαλτογιάννη Αθανασία

Ταξινόμηση. Σαλτογιάννη Αθανασία Ταξινόμηση Σαλτογιάννη Αθανασία Ταξινόμηση Ταξινόμηση Τι εννοούμε όταν λέμε ταξινόμηση; Ταξινόμηση Τι εννοούμε όταν λέμε ταξινόμηση; Ποια είδη αλγορίθμων ταξινόμησης υπάρχουν; Ταξινόμηση Τι εννοούμε όταν

Διαβάστε περισσότερα

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 5. Απλή Ταξινόμηση 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 11/11/2016 Εισαγωγή Η

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 17 Σωροί (Heaps) έκδοση 10 1 / 19 Heap Σωρός Ο σωρός είναι μια μερικά ταξινομημένη δομή δεδομένων που υποστηρίζει

Διαβάστε περισσότερα

Heapsort Using Multiple Heaps

Heapsort Using Multiple Heaps sort sort Using Multiple s. Λεβεντέας Χ. Ζαρολιάγκης Τµήµα Μηχανικών Η/Υ & Πληροφορικής 29 Αυγούστου 2008 sort 1 Ορισµός ify Build- 2 sort Πως δουλεύει Ιδιότητες 3 4 Προβλήµατα Προτάσεις Ανάλυση Κόστους

Διαβάστε περισσότερα

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι Πρόβλημα Ταξινόμησης Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Είσοδος : ακολουθία n αριθμών (α 1, α 2,..., α n

Διαβάστε περισσότερα

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης Ουρές Προτεραιότητας: Υπενθύμιση Σωροί / Αναδρομή / Ταξινόμηση Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς (Abstract Data Type) με μεθόδους: Μπορεί να υλοποιηθεί με

Διαβάστε περισσότερα

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ Διάλεξη 7 η Βασίλης Στεφανής Αλγόριθμοι ταξινόμησης Στην προηγούμενη διάλεξη είδαμε: Binary search Λειτουργεί μόνο σε ταξινομημένους πίνακες Πώς τους ταξινομούμε? Πολλοί τρόποι. Ενδεικτικά:

Διαβάστε περισσότερα

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014 Κεφάλαιο 2 Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014 Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 Σωρός και Ταξινόμηση

Διαβάστε περισσότερα

Αλγόριθμοι ταξινόμησης

Αλγόριθμοι ταξινόμησης Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης BuubleSort, SelectionSort, InsertionSort, Merger Sort, Quick Soft ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι

Διαβάστε περισσότερα

Σχεδίαση και Ανάλυση Αλγορίθμων

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα.0 Σταύρος Δ. Νικολόπουλος 06-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Ταξινόμηση Selection-Sort Bubble-Sort και

Διαβάστε περισσότερα

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Α. SelectionSort Ταξινόμηση με Επιλογή Β. InsertionSort Ταξινόμηση με Εισαγωγή

Διαβάστε περισσότερα

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 22 Counting sort, bucket sort και radix sort 1 / 16 Ιδιότητες αλγορίθμων ταξινόμησης ευστάθεια (stable

Διαβάστε περισσότερα

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort 1, c 3, a 3, b 7, d 7, g 7, e B 0 1 3 4 5 6 7 8 9 1 BucketSort (Ταξινόμηση Κάδου) - Αρχικά θεωρείται ένα κριτήριο κατανομής με βάση το οποίο

Διαβάστε περισσότερα

Ταξινόμηση με συγχώνευση Merge Sort

Ταξινόμηση με συγχώνευση Merge Sort Ταξινόμηση με συγχώνευση Merge Sort 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 Πληροφορικής 1 Διαίρει και Βασίλευε Η μέθοδος του «Διαίρει και Βασίλευε» είναι μια γενική αρχή σχεδιασμού αλγορίθμων

Διαβάστε περισσότερα

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 9-1

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 9-1 Σωροί Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθµος ταξινόµησης HeapSort Παραλλαγές Σωρών ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι

Διαβάστε περισσότερα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας Η δομή

Διαβάστε περισσότερα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας Η δομή

Διαβάστε περισσότερα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Ουρές Προτεραιότητας Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρά Προτεραιότητας Το πρόβλημα Έχουμε αντικείμενα με κλειδιά και θέλουμε ανά πάσα στιγμή

Διαβάστε περισσότερα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Ταξινόμηση Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Είσοδος n αντικείμενα a 1, a 2,..., a n με κλειδιά (συνήθως σε ένα πίνακα, ή λίστα, κ.τ.λ)

Διαβάστε περισσότερα

Αλγόριθμοι Ταξινόμησης Μέρος 2

Αλγόριθμοι Ταξινόμησης Μέρος 2 Αλγόριθμοι Ταξινόμησης Μέρος 2 Μανόλης Κουμπαράκης 1 Προχωρημένοι Αλγόριθμοι Ταξινόμησης Στη συνέχεια θα παρουσιάσουμε τρείς προχωρημένους αλγόριθμους ταξινόμησης: treesort, quicksort και mergesort. 2

Διαβάστε περισσότερα

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας (priority queue) Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες : Εισαγωγή στοιχείου με δεδομένο κλειδί. Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 4

Δομές Δεδομένων Ενότητα 4 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012 Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012 3 5 1 Ταξινόμηση - Sorting Πίνακας Α 1 3 5 5 3 1 Ταξινόμηση (Φθίνουσα) Χωρίς Ταξινόμηση Ταξινόμηση

Διαβάστε περισσότερα

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Γενική µέθοδος σχεδιασµού αλγορίθµων: Διαίρεση σε ( 2) υποπροβλήµατα (σηµαντικά) µικρότερου µεγέθους.

Διαβάστε περισσότερα

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ιαίρει-και-βασίλευε Γενική μέθοδος σχεδιασμού αλγορίθμων: ιαίρεση σε ( 2) υποπροβλήματα

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή

Διαβάστε περισσότερα

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 9-1 Ουρά προτεραιότητας

Διαβάστε περισσότερα

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

Ουρά Προτεραιότητας: Heap

Ουρά Προτεραιότητας: Heap Ουρά Προτεραιότητας: Heap Επιμέλεια διαφανειών: Δ. Φωτάκης (λίγες τροποποιήσεις: Α. Παγουρτζής) Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Δομές Δεδομένων (Αναπαράσταση,)

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ Ουρές Προτεραιότητας (Priority Queues) Θεωρούµε ότι τα προς αποθήκευση στοιχεία έχουν κάποια διάταξη (καθένα έχει µια προτεραιότητα). Τα προς αποθήκευση στοιχεία είναι

Διαβάστε περισσότερα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση

Διαβάστε περισσότερα

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Γιάννης Κουτσονίκος Επίκουρος Καθηγητής Οργάνωση Δεδομένων Δομή Δεδομένων: τεχνική οργάνωσης των δεδομένων με σκοπό την

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

Διαβάστε περισσότερα

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 6α: Αναζήτηση Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commos. Για εκπαιδευτικό

Διαβάστε περισσότερα

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Αναζήτηση. Σειριακή αναζήτηση. Δυαδική Αναζήτηση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Παραδοχή Στη συνέχεια των διαφανειών (διαλέξεων) η ασυμπτωτική έκφραση (συμβολισμός Ο, Ω, Θ) του χρόνου

Διαβάστε περισσότερα

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο Ουρές προτεραιότητας Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο αριθμός είναι μεγάλος, τόσο οι πελάτες

Διαβάστε περισσότερα

Κεφάλαιο 6 Ουρές Προτεραιότητας

Κεφάλαιο 6 Ουρές Προτεραιότητας Κεφάλαιο 6 Ουρές Προτεραιότητας Περιεχόμενα 6.1 Ο αφηρημένος τύπος δεδομένων ουράς προτεραιότητας... 114 6.2 Ουρές προτεραιότητας με στοιχειώδεις δομές δεδομένων... 115 6.3 Δυαδικός σωρός... 116 6.3.1

Διαβάστε περισσότερα

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα

Διαβάστε περισσότερα

ταξινόμηση σωρού Παύλος Εφραιμίδης Δομές Δεδομένων και

ταξινόμηση σωρού Παύλος Εφραιμίδης Δομές Δεδομένων και ταξινόμηση σωρού Παύλος Εφραιμίδης ταξινόμηση σωρού ταξινόμηση σωρού άλλος ένας αλγόριθμος ταξινόμησης πολυπλοκότητας O(n lgn) Ιδιαίτερα χαρακτηριστικά: χρησιμοποιεί μια δομή δεδομένων που ονομάζεται «σωρός»

Διαβάστε περισσότερα

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου

Διαβάστε περισσότερα

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων Ταξινόμηση: Εισαγωγικά Ταξινόμηση (Sor ng) Ορέστης Τελέλης Βασικό πρόβλημα για την Επιστήμη των Υπολογιστών. π.χ. αλφαβητική σειρά, πωλήσεις ανά τιμή, πόλεις με βάση πληθυσμό, Μπορεί να είναι ένα πρώτο

Διαβάστε περισσότερα

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010 Κεφάλαιο 2 Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση., 2/05/200 Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. Σωρός και Ταξινόµηση

Διαβάστε περισσότερα

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:

Διαβάστε περισσότερα

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα

Διαβάστε περισσότερα

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1 Ταξινόμηση Παύλος Εφραιμίδης Δομές Δεδομένων Ταξινόμηση 1 Το πρόβλημα της ταξινόμησης Δομές Δεδομένων Ταξινόμηση 2 Ταξινόμηση Δίνεται πολυ-σύνολο Σ με στοιχεία από κάποιο σύμπαν U (πχ. U = το σύνολο των

Διαβάστε περισσότερα

Ουρά Προτεραιότητας: Heap

Ουρά Προτεραιότητας: Heap Ουρά Προτεραιότητας: Heap ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ομές εδομένων (Αναπαράσταση,) οργάνωση και διαχείριση συνόλων αντικειμένων για

Διαβάστε περισσότερα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ ΤΟ ΠΡΟΒΛΗΜΑ ΤΗΣ ΤΑΞΙΝΟΜΗΣΗΣ Ορισμός ταξινόμησης 2 Κατηγορίες αλγορίθμων ταξινόμησης

Διαβάστε περισσότερα

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Διαίρει-και-Βασίλευε Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Διαίρει-και-Βασίλευε Γενική

Διαβάστε περισσότερα

Αλγόριθμοι Ταξινόμησης Μέρος 4

Αλγόριθμοι Ταξινόμησης Μέρος 4 Αλγόριθμοι Ταξινόμησης Μέρος 4 Μανόλης Κουμπαράκης Δομές Δεδομένων και Τεχνικές 1 Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Οι αλγόριθμοι ταξινόμησης που είδαμε μέχρι τώρα αποφασίζουν πώς να

Διαβάστε περισσότερα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 16: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Ουρά Προτεραιότητας (Priority

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 20: Αλγόριθμοι ΤαξινόμησηςIII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Ε. QuickSort Γρήγορη Ταξινόμηση - Έμμεση Ταξινόμηση - Εξωτερική Ταξινόμηση Διδάσκων:

Διαβάστε περισσότερα

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου

Διαβάστε περισσότερα

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ Δομές Δεδομένων Τι θα δούμε Ουρές προτεραιότητας Πράξεις Διωνυμικές Ουρές Διωνυμικά Δέντρα Διωνυμικοί Σωροί Ουρές Fibonacci Αναπαράσταση Πράξεις Ανάλυση Συγκρίσεις Ουρές προτεραιότητας

Διαβάστε περισσότερα

Π.Μ.. ΣΜΖΜΑΣΟ ΠΛΖΡΟΦΟΡΗΚΖ ΓΗΠΛΧΜΑΣΗΚΖ ΔΡΓΑΗΑ. Υπνινγηζηηθή ζύγθξηζε ησλ αιγνξίζκσλ Heap Sort θαη Weak Heap Sort. Βαζηιεία Φνξκόδε Α.Μ.

Π.Μ.. ΣΜΖΜΑΣΟ ΠΛΖΡΟΦΟΡΗΚΖ ΓΗΠΛΧΜΑΣΗΚΖ ΔΡΓΑΗΑ. Υπνινγηζηηθή ζύγθξηζε ησλ αιγνξίζκσλ Heap Sort θαη Weak Heap Sort. Βαζηιεία Φνξκόδε Α.Μ. Π.Μ.. ΣΜΖΜΑΣΟ ΠΛΖΡΟΦΟΡΗΚΖ ΓΗΠΛΧΜΑΣΗΚΖ ΔΡΓΑΗΑ Υπνινγηζηηθή ζύγθξηζε ησλ αιγνξίζκσλ Heap Sort θαη Weak Heap Sort. Βαζηιεία Φνξκόδε Α.Μ. 43/11 Δπηβιέπσλ Καζεγεηήο: ακαξάο Νηθφιανο, Δπ. Καζεγεηήο Σκήκα Δθαξκνζκέλεο

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 04: ΠαραδείγματαΑνάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα -Γραμμική

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης Δοµές Δεδοµένων 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι Ε. Μαρκάκης Περίληψη Bubble Sort Selection Sort Insertion Sort Χαρακτηριστικά επιδόσεων Shellsort Ταξινόµηση συνδεδεµένων λιστών Δοµές Δεδοµένων

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 28: O Αλγόριθμος Ταξινόμησης HeapSort Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Η διαδικασία PercolateDown, Δημιουργία Σωρού - O Αλγόριθμος Ταξινόμησης HeapSort - Υλοποίηση, Παραδείγματα

Διαβάστε περισσότερα

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο Σχεδίαση Αλγορίθμων Διαίρει και Βασίλευε http://delab.csd.auth.gr/courses/algorithms/ auth 1 Διαίρει και Βασίλευε Η γνωστότερη ρημέθοδος σχεδιασμού αλγορίθμων: 1. Διαιρούμε το στιγμιότυπο του προβλήματος

Διαβάστε περισσότερα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 3: Ασυμπτωτικός συμβολισμός Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

Εισαγωγή στην Ανάλυση Αλγορίθμων

Εισαγωγή στην Ανάλυση Αλγορίθμων Εισαγωγή στην Ανάλυση Αλγορίθμων (4) Μεθοδολογία αναδρομικών σχέσεων (Ι) Με επανάληψη της αναδρομής Έστω όπου r και a είναι σταθερές. Βρίσκουμε τη σχέση που εκφράζει την T(n) συναρτήσει της T(n-) την T(n)

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 14: Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης 3) Mergesort Ταξινόμηση με Συγχώνευση 4) BucketSort Ταξινόμηση με Κάδους Διδάσκων:

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 12 η Αναζήτηση/Ταξινόμηση Πίνακα Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην

Διαβάστε περισσότερα

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο Quicksort ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 62] Στοιχείο διαχωρισμού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 9 ο Ταξινόµηση Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ταξινόµηση Εισαγωγή Selection sort Insertion sort Bubble sort

Διαβάστε περισσότερα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές προτεραιότητας Κεφάλαιο 9 Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Ουρές προτεραιότητας Στοιχειώδεις υλοποιήσεις Δοµή δεδοµένων σωρού Αλγόριθµοι σε σωρούς Ο αλγόριθµος heapsort Δοµές

Διαβάστε περισσότερα

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1 Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1 Quicksort [Hoare, 62] Στοιχείο διαχωρισµού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση εισόδου σε δύο υπο-ακολουθίες:

Διαβάστε περισσότερα

Ταχεία Ταξινόμηση Quick-Sort

Ταχεία Ταξινόμηση Quick-Sort Ταχεία Ταξινόμηση Quc-Sort 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7 9 2 2 9 9 Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 1 Outlne Quc-sort Αλγόριθμος Βήμα διαχωρισμού Δένδρο Quc-sort

Διαβάστε περισσότερα

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Κεφάλαιο 11 Ένωση Ξένων Συνόλων Κεφάλαιο 11 Ένωση Ξένων Συνόλων Περιεχόμενα 11.1 Εισαγωγή... 227 11.2 Εφαρμογή στο Πρόβλημα της Συνεκτικότητας... 228 11.3 Δομή Ξένων Συνόλων με Συνδεδεμένες Λίστες... 229 11.4 Δομή Ξένων Συνόλων με Ανοδικά

Διαβάστε περισσότερα

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ Δομές Δεδομένων Παπαγιαννόπουλος Δημήτριος 30 Μαρτίου 2017 18 Μαΐου 2017 papagianno@ceid.upatras.gr 1 Περιεχόμενα Ουρές προτεραιότητας Πράξεις Διωνυμικές Ουρές Διωνυμικά Δέντρα Διωνυμικοί

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Διάλεξη 14: Δέντρα IV - B-Δένδρα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 14: Δέντρα IV - B-Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - 2-3 Δένδρα, Εισαγωγή και άλλες πράξεις - Άλλα Δέντρα: Β-δένδρα, Β+-δέντρα,

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 231: Δομές Δεδομένων και Αλγόριθμοι Εαρινό Εξάμηνο 2013 ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση Διδάσκων Καθηγητής: Παναγιώτης Ανδρέου

Διαβάστε περισσότερα

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 26: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας -Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι

Διαβάστε περισσότερα

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Quicksort Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 6] Στοιχείο διαχωρισμού (pivot),

Διαβάστε περισσότερα

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1 Ο αλγόριθμος Quick-Sort 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7 9 2 2 9 9 6/14/2007 3:42 AM Quick-Sort 1 Κύρια σημεία για μελέτη Quick-sort ( 4.3) Αλγόριθμος Partition step Δέντρο Quick-sort Παράδειγμα εκτέλεσης

Διαβάστε περισσότερα

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα

Διαβάστε περισσότερα

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Ουρά Προτεραιότητας (priority queue)

Ουρά Προτεραιότητας (priority queue) Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει τις ακόλουθες λειτουργίες PQinsert : εισαγωγή στοιχείου PQdelmax : επιστροφή του στοιχείου με το μεγαλύτερο* κλειδί και διαγραφή του

Διαβάστε περισσότερα

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 14: Δέντρα IV B Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2 3 Δένδρα, Εισαγωγή και άλλες πράξεις Άλλα Δέντρα: Β δένδρα, Β+ δέντρα, R δέντρα Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231

Διαβάστε περισσότερα

Εργαστηριακή Άσκηση 1

Εργαστηριακή Άσκηση 1 Εργαστηριακή Άσκηση 1 Επανάληψη προγραμματισμού Βασικοί Αλγόριθμοι Είσοδος τιμών από το πληκτρολόγιο Σε όλα τα προγράμματα που θα γράψουμε στην συνέχεια του εξαμήνου θα χρειαστεί να εισάγουμε τιμές σε

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού

Διαβάστε περισσότερα

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Δ. QuickSort Γρήγορη Ταξινόμηση Ε. BucketSort

Διαβάστε περισσότερα

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2 Δοµές Δεδοµένων Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2 Δοµές Δεδοµένων (Αναπαράσταση,) οργάνωση και διαχείριση συνόλων αντικειµένων για αποδοτική ενηµέρωση και ανάκτηση πληροφορίας.

Διαβάστε περισσότερα

Ουρά Προτεραιότητας: Heap

Ουρά Προτεραιότητας: Heap Ουρά Προτεραιότητας: Heap ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Άδεια Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 4: Αναδρομικές σχέσεις και ανάλυση αλγορίθμων Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1 Merge Sort (Ταξινόμηση με συγχώνευση) 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 6/14/2007 3:04 AM Merge Sort 1 Κύρια σημεία για μελέτη Το παράδειγμα του «διαίρει και βασίλευε» ( 4.1.1) Merge-sort

Διαβάστε περισσότερα

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

Διαβάστε περισσότερα