ΑΝΩΤΑΤΟ Τ ΕΧ Ν Ο Λ Ο ΓΙΚ Ο ΕΚΠΑΙΔΕΥΤΙΚΟ Ι* Ρ Υ Μ Α ΚΑΛΑ Μ Α ΤΑ Σ Π Α ΡΑ ΡΤ Η Μ Α ΣΠΑΡΤΗ) ΙΑ ΤΕΧΝ Ο ΛΟ ΓΙΑΣ Π Λ Η ΡΟ Φ Ο ΡΙΚ Η Σ ΚΑΙ.

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

Download "ΑΝΩΤΑΤΟ Τ ΕΧ Ν Ο Λ Ο ΓΙΚ Ο ΕΚΠΑΙΔΕΥΤΙΚΟ Ι* Ρ Υ Μ Α ΚΑΛΑ Μ Α ΤΑ Σ Π Α ΡΑ ΡΤ Η Μ Α ΣΠΑΡΤΗ) ΙΑ ΤΕΧΝ Ο ΛΟ ΓΙΑΣ Π Λ Η ΡΟ Φ Ο ΡΙΚ Η Σ ΚΑΙ."

Transcript

1 ΑΝΩΤΑΤΟ Τ ΕΧ Ν Ο Λ Ο ΓΙΚ Ο ΕΚΠΑΙΔΕΥΤΙΚΟ Ι* Ρ Υ Μ Α ΚΑΛΑ Μ Α ΤΑ Σ Π Α ΡΑ ΡΤ Η Μ Α ΣΠΑΡΤΗ) ΙΑ ΤΕΧΝ Ο ΛΟ ΓΙΑΣ Π Λ Η ΡΟ Φ Ο ΡΙΚ Η Σ ΚΑΙ : ι «* 1 ΤΗ ΛΕΠ ΙΚΟ ΙΝ Ω Ν ΙΩ Ν αφή και ΑναλιΛ ι Η θθρ5θγ τ ος ΚοραΛ/Ιαίος γόριθμου

2 ΑΝ Ω ΤΑΤΟ Τ ΕΧ Ν Ο Λ Ο ΓΙΚ Ο ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔ ΡΥ Μ Α ΚΑΛΑΜΑΤΑΣ Π Α ΡΑ ΡΤ Η Μ Α ΣΠΑΡΤΗ! ΙΑ ΤΕΧΝ Ο ΛΟ ΓΙΑΣ Π Λ Η ΡΟ Φ Ο ΡΙΚ Η Σ ΚΑΙ ΤΗ ΛΕΠ ΙΚΟ ΙΝ Ω Ν ΙΩ Ν 1 1 φ\ τ 1; 1 <Περιγκαφη και Ανάλι^ Τ ^ γ ό ρ ιθ μ ο υ \ Η θ8ρ5θγ * ι.ος Κορωνίαιος Μ Α

3 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου Ηθ3ρ5οΠ Περιγραφή και Ανάλυση Αλγόριθμου Ηθ3ρ5θΓί Πτυχιακή Εργασία: Γεώργίος Κορωναίος ΑΜ : Επιβλέπων Καθηγητής: Καραγιώργος Γρηγόρης ΑΤΕΙ Καλαμάτας Παράρτημα Σπάρτης Τμήμα Τεχνολογίας Πληροφορικής καί Τηλεπικοινωνιών Σπάρτη

4 Κορωναίος Γεώρνιος, Περιγραφή και Ανάλυση Αλγορίθμου ΗθθρΒοΓΐ Ευχαριστίες Θα ήθελα να ευχαριστήσω θερμά τον επιβλέποντα καθηγητή μου και καθηγητή του τμήματος Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών Καλαμάτας Παράρτημα Σπάρτης, κ. Καραγιώργο Γρηγόρη τόσο για την πολύτιμη βοήθειά του κατά τη διάρκεια εκπόνησης της εργασίας αυτής όσο και για τη γενικότερη καθοδήγησή του. Επίσης, θα ήθελα να ευχαριστήσω την οικογένεια και τους φίλους μου που με βοήθησαν σε όλη αυτή την προσπάθεια. 3

5 Περιεχόμενα Περίληψη...5 Εισαγωγή...6 Αντικείμενο της εργασίας... 6 Διάρθρωση Της Εργασίας... 6 Κεφάλαιο 1: Η Έννοια Των Αλγορίθμων Εισαγωγή Τι είναι αλγόριθμος Περιγραφή και αναπαράσταση αλγορίθμων Ασυμπτωτικός Συμβολισμός Συμβολισμός Θ Συμβολισμός Ο Συμβολισμός Ω Κατηγορίες Πολυπλοκότητας Συναρτήσεων...14 Κεφάλαιο 2: Αλγόριθμοι Ταξινόμησης Εισαγωγή Βασικοί Αλγόριθμοι Ταξινόμησης...16 Κεφάλαιο 3: Ανάλυση Αλγορίθμου HeapSort Σωροί (Heap) Εισαγωγή Κατασκευή Σωρού Δομή σωρού μεγίστουν (max heap) Δομή σωρού ελαχίστουν (min heap) Ανάλυση της HeapSort Εισαγωγή Αλγόριθμος HeapSort Σύγκριση Θετικά Αρνητικά HeapSort...45 Επίλογος - Συμπεράσματα...47 Βιβλιογραφία Ένθετο Υπόλοιπα είδη σωρών...49 Υλοποίηση HeapSort Εισαγωγή Παρουσίαση Προγράμματος

6 Περίληψη Η ταξινόμηση είναι μία από τις πιο σημαντικές διαδικασίες που εκτελούνται σε ένα υπολογιστή και αυτό οφείλεται στο γεγονός ότι τα ταξινομημένα δεδομένα είναι πιο εύκολο να τα διαχειριστεί κανείς σε σύγκριση με τα τυχαίως διατεταγμένα δεδομένα. Ένας πολύ γνωστός αλγόριθμος ταξινόμησης είναι ο HeapSort. Ο αλγόριθμος HeapSort χρησιμοποιεί μια δομή δεδομένων που ονομάζεται σωρός με σκοπό να ταξινομήσει ένα σύνολο από τιμές. Ο HeapSort είναι βέλτιστος αλγόριθμος ταξινόμησης που βασίζετε στην πράξη της σύγκρισης. Ο αλγόριθμος αυτός προτάθηκε από τον Williams το 1964 και εργάστηκε επίσης ο Floyd (1962,1964). Στόχος αυτής της εργασίας είναι να παρουσιαστούν και περιγραφούν οι βασικοί αλγόριθμοι ταξινόμησης και να αναλυθεί σε βάθος ο αλγόριθμος HeapSort. Επίσης θα γίνει περιγραφή τις πρακτικής εφαρμογής του αλγορίθμου HeapSort σε ένα προγραμματιστικό περιβάλλον σε γλώσσα Java το οποίο δημιουργήθηκε ιδικά για την εκπόνηση της πτυχιακής εργασίας. 5

7 Εισαγωγή Α ντικείμενο τη ς εργασίας Οι αλγόριθμοι ταξινόμησης είναι αλγόριθμοι που τοποθετούν τα στοιχεία μίας λίστας με ταξινομημένη σειρά (αύξουσα η φθίνουσα). Η ταξινόμησή τους γίνεται με βάση διάφορα κριτήρια όπως την υπολογιστική πολυπλοκότητα των συγκρίσεων, και την υπολογιστική πολυπλοκότητα των ανταλλαγών. Στη συγκεκριμένη εργασία θα ασχοληθούμε με τους αλγορίθμους ταξινόμησης και ειδικά με τον αλγόριθμο HeapSort. Χρησιμοποιεί μια ειδική δομή δεδομένων που ονομάζεται σωρός (heap). Ο σωρός είναι ένας πίνακας αντικειμένων που μπορεί να αντιμετωπισθεί ως ένα σχεδόν πλήρες δυαδικό δέντρο. Διάρθρωση Της Εργασίας Στο πρώτο κεφάλαιο θα γίνει περιγραφή της έννοιας του αλγορίθμου. Στο δεύτερο κεφάλαιο θα γίνει περιγραφή των ποιο γνωστών αλγορίθμων ταξινόμησης. Στο τρίτο κεφάλαιο θα γίνει περιγραφή και ανάλυση εις βάθος του αλγορίθμου HeapSort. Στο ένθετο θα παρουσιαστεί ο αλγόριθμος HeapSort σε μια πρακτική εφαρμογή του πάνω σε ένα πρόγραμμα σε γλώσσα Java (τόσο σε γραφικό περιβάλλον όσο και σε web περιβάλλον) το οποίο έχει σχεδιαστεί και υλοποιηθεί ειδικά για την εργασία αυτή και είναι εμπνευσμένο από την πρακτική άσκηση. 6

8 Κεφάλαιο 1: Η Έννοια Των Αλγορίθμων 1.1 Εισαγω γή Η λέξη Αλγόριθμος προέρχεται από μία μελέτη του Πέρση μαθηματικού του 8ου αιώνα μ.χ. Αλ Χουαρίζμι (Abu Ja'far Mohammed ibn Musa Al-Khowarismi), η οποία περιείχε συστηματικές τυποποιημένες λύσεις αλγεβρικών προβλημάτων και αποτελεί ίσως την πρώτη πλήρη πραγματεία άλγεβρας. Πέντε αιώνες αργότερα η μελέτη μεταφράστηκε στα Λατινικά και άρχιζε με τη φράση "Algorithmus dixit (ο Αλγόριθμος είπε...). Έτσι η λέξη αλγόριθμος καθιερώθηκε αργά τα επόμενα χίλια χρόνια με την έννοια «συστηματική διαδικασία αριθμητικών χειρισμών». Τη σημερινή της σημασία την οφείλει στη γρήγορη ανάπτυξη των ηλεκτρονικών υπολογιστών στα μέσα του 20ου αιώνα. Στην επιστήμη των υπολογιστών ως ενδιάμεσο βήμα σε πολλά προγράμματα χρησιμοποιείται η ταξινόμηση, για τον λόγο αυτό αναπτύχθηκαν ικανοποιητικοί αλγόριθμοι ταξινόμησης. Η καταλληλότητα ενός αλγορίθμου σε μια δεδομένη εφαρμογή εξαρτάται από τον αριθμό των ταξινομητέων στοιχείων, τον βαθμό της αρχικής τους ταξινόμησης, το είδος της συσκευής αποθήκευσης (κύρια μνήμη, δίσκος ή μαγνητική ταινία) και τους πιθανούς περιορισμούς στις τιμές των στοιχείων. [1, σελ. 5,6] 1.2 Τ ι είναι αλγόριθμος Ως αλγόριθμος ορίζεται μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος. Πιο απλά αλγόριθμο ονομάζουμε μία σειρά από εντολές που έχουν αρχή και τέλος, είναι σαφείς και εκτελέσιμες που σκοπό έχουν την επίλυση κάποιου προβλήματος. Ο όρος αλγόριθμος αναφέρεται σε οποιαδήποτε καλά ορισμένη υπολογιστική διαδικασία που δέχεται κάποια τιμή ή σύνολο τιμών ως είσοδο και δίνει κάποια τιμή ή κάποιο σύνολο τιμών ως έξοδο. [1, σελ. 5] Ας υποθέσουμε ότι θέλουμε να ταξινομήσουμε μια ακολουθία αριθμών κατά αύξουσα σειρά. Είσοδος: Μια ακολουθία η αριθμών (α1; α2,..., αη. Έξοδος: Μια αναδιάταξη {αι, α2,..., α η) της ακολουθίας εισόδου τέτοια ώστε α! < α 2 <... < ά η. [1, σελ. 5] 7

9 π.χ. αν η ακολουθία εισόδου ήταν {67, 32, 54, 87, 2, 14 η έξοδος του αλγορίθμου ταξινόμησης θα είναι: {2,14, 32, 54, 67, 87. Οι αλγόριθμοι θα πρέπει να πληρούν κάποια πρότυπα και να διατυπώνονται με συγκεκριμένο τρόπο. Έτσι ένας αλγόριθμος πρέπει να ικανοποιείτο επόμενα κριτήρια: Να έχει είσοδο δεδομένων Έξοδο αποτελεσμάτων Καθοριστικότητα Περατότητα Αποτελεσματικότητα Είσοδος Δεδοιιένων - Input Κατά την εκκίνηση εκτέλεσης του αλγορίθμου καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως είσοδοι στον αλγόριθμο. Η περίπτωση που δε δίνονται τιμές δεδομένων εμφανίζεται όταν ο αλγόριθμος δημιουργεί και επεξεργάζεται κάποιες πρωτογενείς τιμές με τη βοήθεια συναρτήσεων παραγωγής τυχαίων αριθμών ή με τη βοήθεια άλλων απλών εντολών. Η είσοδος η οποία χρειάζεται για τον υπολογισμό της λύσης ενός προβλήματος δηλώνεται με τον όρο στιγμιότυπο προβλήματος.[2, σελ. 25] Έξοδος Αποτελεσίΐάτων - Output Δίδει τουλάχιστον ένα μέγεθος ως αποτέλεσμα που εξαρτάται κατά κάποιο τρόπο από τις αρχικές εισόδους. Ο αλγόριθμος πρέπει να δημιουργεί τουλάχιστον μία τιμή (δεδομένων) ως αποτέλεσμα προς το χρήστη ή προς ένα άλλο αλγόριθμο. [2, σελ. 25] Καθοριστικότητα - Definiteness Κάθε εντολή πρέπει να καθορίζεται χωρίς καμία αμφιβολία για τον τρόπο εκτέλεσής της. π.χ. Σε μία διαίρεση να λαμβάνεται υπόψη και η περίπτωση όπου ο διαιρετέος λαμβάνει μηδενική τιμή. Τυπικές περιπτώσεις: η διαίρεση με το μηδέν, υπόριζος να έχει ποσότητα αρνητική, κλπ. Προβλήματα καθοριστικότητας αντιμετωπίζονται συχνά με τη λογική της επιλογής, δηλ. Αν α>0 τότε αλλιώς... (if...else...).[2, σελ. 25] 8

10 Πεοατότπτα - Finiteness Κάθε εκτέλεση είναι πεπερασμένη, δηλαδή τελειώνει ύστερα από έναν πεπερασμένο αριθμό διεργασιών ή βημάτων. Μία διαδικασία που δεν τελειώνει μετά από συγκεκριμένο/πεπερασμένο αριθμό βημάτων λέγεται απλά υπολογιστική διαδικασία. [2, σελ. 26] Αποτελεσίΐατικότητα - Effectiveness Όλες οι διαδικασίες που περιλαμβάνει μπορούν να πραγματοποιηθούν με ακρίβεια και σε πεπερασμένο χρόνο. Κάθε μεμονωμένη εντολή του αλγορίθμου να είναι απλή (και όχι σύνθετη). Δηλαδή μία εντολή δεν αρκεί να έχει ορισθεί αλλά πρέπει να είναι και εκτελέσιμη. [2, σελ. 26] Ανάλογα με την τεχνική επίλυσης ενός προβλήματος οι αλγόριθμοι διακρίνονται σε: Αναδρομικοί (recursive): αλγόριθμοι που χρησιμοποιούν αναδρομικές λύσεις προβλημάτων, π.χ. πολυώνυμα Hermite, υπολογισμός παραγοντικού, κ.α. Διαιρεί και Βασίλευε (divide and conquer): επιλύουν το πρόβλημα αναγάγοντάς το σε μικρότερα ανάλογα προβλήματα, π.χ. quick sort, merge sort, κ.α. Άπληστοι (greedy): επιλύουν προβλήματα επιλέγοντας κάθε φορά την τοπικά βέλτιστη λύση προσδοκώντας την συνολικά βέλτιστη, π.χ. πρόβλημα επιστροφής ρέστων, χρονικός προγραμματισμός, κ.α. Δυναμικού Προγραμματισμού (dynamic programming): συνήθως αναδρομικοί αλγόριθμοι οι οποίοι χρησιμοποιούν τις ενδιάμεσα παραγόμενες λύσεις, π.χ. πολλαπλασιασμός αλυσίδας πινάκων, κ.α. Παράλληλοι (parallel): εύρεση λύσης όπου το πρόβλημα δεν λύνεται σειριακά αλλά πολλές σχέσεις του εκτελούνται παράλληλα, π.χ. πολλά προβλήματα πινάκων, τεχνικές τύπου «διαιρεί και βασίλευε», κ.α. 9

11 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου Ηθθρδοτί Επίσης, ανάλογα με την λύση που επιτυγχάνουν μπορούν να διακριθούν σε: Βέλτιστοι: εύρεση της βέλτιστης λύσης του προβλήματος, π.χ. επίλυσης μίας εξίσωσης δευτέρου βαθμού. Προσεγγιστικοί: εύρεση «καλών» λύσεων σε άλυτα ή πολύ δύσκολα προβλήματα, π.χ. χρονοπρογραμματισμός εργασιών, χρωματισμός χάρτη κ.α. Δηαιουονία Αλνορίθιιου Τα βήματα δημιουργίας αλγόριθμου είναι: 1. Διατύπωση του προβλήματος 2. Κατανόηση του προβλήματος 3. Λύση του προβλήματος 4. Διατύπωση του αλγόριθμου 5. Έλεγχος της λύσης 10

12 1.3 Περιγραφή και αναπαράσταση αλγορίθμων Τέσσερις είναι οι βασικοί τρόποι αναπαράστασης ενός αλγορίθμου: με ελεύθερο κείμενο, που αποτελεί τον πιο ανεπεξέργαστο και αδόμητο τρόπο παρουσίασης αλγορίθμου. Έτσι εγκυμονεί τον κίνδυνο ότι μπορεί εύκολα να οδηγήσει σε μη εκτελέσιμη παρουσίαση παραβιάζοντας το τελευταίο χαρακτηριστικό των αλγορίθμων, δηλαδή την αποτελεσματικότητα. με διαγραμματικές τεχνικές, που συνιστούν ένα γραφικό τρόπο παρουσίασης του αλγορίθμου. Από τις διάφορες διαγραμματικές τεχνικές που έχουν επινοηθεί, η πιο παλιά και η πιο γνωστή ίσως, είναι το διάγραμμα ροής (flow chart). Ωστόσο η χρήση διαγραμμάτων ροής για την παρουσίαση αλγορίθμων δεν αποτελεί την καλύτερη λύση, γι'αυτό και εμφανίζονται όλο και σπανιότερα στη βιβλιογραφία και στην πράξη. με φυσική γλώσσα κατά βήματα. Στην περίπτωση αυτή χρειάζεται προσοχή, γιατί μπορεί να παραβιασθεί το τρίτο βασικό χαρακτηριστικό ενός αλγορίθμου. με κωδικοποίηση, δηλαδή με ένα πρόγραμμα γραμμένο σε κάποια γλώσσα προγραμματισμού που όταν εκτελεσθεί θα δώσει τα ίδια αποτελέσματα με τον αλγόριθμο. 11

13 1.5 Ασυμπτω τικός Συμβολισμός Οι διάφοροι τύποι συμβολισμού που χρησιμοποιούμε για την περιγραφή του ασυμπωτικού χρόνου εκτέλεσης ενός αλγόριθμου ορίζονται με βάση συναρτήσεις των οποίων το πεδίο ορισμού είναι το σύνολο των φυσικών αριθμών Ν = {0, 1, 2,... Οι συμβολισμοί αυτοί προσφέρονται για την περιγραφή της συνάρτησης του χρόνου εκτέλεσης χειρότερης περίπτωσης Τ(η), ο όποιος συνήθως ορίζεται μόνο για ακέραιο μέγεθος εισόδου. [1, σελ. 42] Συμβολισμός Θ Για κάποια δεδομένη συνάρτηση g(n), το σύμβολο 0(g(n)) δηλώνει το σύνολο των συναρτήσεων 0(g(n)) = (f(n) : υπάρχουν θετικές σταθερές Ci, c2, και n0 τέτοιες ώστε 0 < Cig(n) < f(n) < c2g(n) για κάθε π > π0. Μια συνάρτηση f(n) ανήκει στο σύνολο 0(g(n)) αν υπάρχουν θετικές σταθερές Ci και c2τέτοιες ώστε η f(n) να μπορεί να είναι μεταξύ των Cig(n) και c2g(n), από κάποια τιμή του η και πάνω. Δεδομένου ότι το 0(g(n)) είναι ένα σύνολο, θα μπορούσαμε να δηλώσουμε ότι η f(n) είναι μέλος του 0(g(n)) γράφοντας f(n) e 0(g(n)). Αντί αυτού για να περιγράφουμε τη συγκεκριμένη έννοια θα χρησιμοποιήσουμε συνήθως την έκφραση f(n) = 0(g(n)). Τέλος λέμε ότι η g(n) αποτελεί ένα συμπωτικά αυστηρό φράγμα για την f(n). [1, σελ. 43] 12

14 1.5.2 Συμβολισμός Ο Όταν έχουμε μόνο ένα ασυμπωτικό άνω φράγμα, χρησιμοποιούμε τον συμβολισμό Ο. Για μια δεδομένη συνάρτηση g(n), η έκφραση 0(g(n)) δηλώνει το σύνολο των συναρτήσεων 0(g(n)) = {f(n) : υπάρχουν θετικές σταθερές c και η0 τέτοιες ώστε 0 < f(n) < cg(n) για κάθε π > π0. Για όλες τις τιμές του π πέραν του η0, η τιμή της f(n) κείται κάτω από την cg(n) ή συμπίπτει με αυτή. [1, σελ. 45] Εικόνα 2 13

15 1.5.3 Συμβολισμός Ω Όπως ακριβώς ο συμβολισμός Ο ορίζει ένα ασυμπτωτικό άνω φράγμα για μια συνάρτηση, ο συμβολισμός Ω ορίζει αντίστοιχα ένα συμπωτικό κάτω φράγμα. Για μια δεδομένη συνάρτηση g(n), η έκφραση 0(g(n)) δηλώνει το σύνολο των συναρτήσεων O(g(n)) = (f(n): υπάρχουν θετικές σταθερές c και η0 τέτοιες ώστε 0 < cg(n) < f(n) για κάθε π > π0. Για όλες τις τιμές του π πέραν του η0, η τιμή της f(n) κείται επάνω από την cg(n) ή συμπίπτει με αυτή. [1, σελ. 47] 1.6 Κατηγορίες Πολυπλοκότητας Συναρτήσεω ν Η πολυπλοκότητα αυξάνεται καθώς κατεβαίνουμε. Σταθερές Λογαριθμικές Πολυωνυμικές 5, 1/2, 3, π, e logn, log2n, lognn ^n, Vn, an+b, Εκθετικές 2n Παραγοντικές n! Υπερεκθετικές nn Ackerman 22" Πίνακας 1 14

16 Κεφάλαιο 2: Αλγόριθμοι Ταξινόμησης 2.1 Εισαγω γή Οι αλγόριθμοι ταξινόμησης είναι αλγόριθμοι που τοποθετούν τα στοιχεία μίας λίστας με φθίνουσα ή αύξουσα σειρά. Οι αλγόριθμοι ταξινόμησης που χρησιμοποιούνται ταξινομούνται με βάση : 1. Την υπολογιστική πολυπλοκότητα (χειρότερης, μέσης και καλύτερης) των συγκρίσεων των στοιχείων από την άποψη του μεγέθους της λίστας(η). Για χαρακτηριστικούς αλγόριθμους ταξινόμησης καλύτερης περίπτωσης είναι 0(n log η) 2 και χειρότερης είναι Ο (η ). Η μέση περίπτωση για μία ταξινόμηση είναι Ο(η). 2. Την υπολογιστική πολυπλοκότητα των ανταλλαγών. 3. Την χρήση μνήμης και άλλων υπολογιστών πόρων, έτσι ώστε μόνο 0(1) ή 0(log η) μνήμη απαιτείται πέρα από τα στοιχεία που ταξινομούνται, ενώ άλλοι πρέπει να δημιουργήσουν τις βοηθητικές θέσεις για τα στοιχεία που αποθηκεύονται προσωρινά. 4. Την επαναληπτικότητα. Μερικοί αλγόριθμοι είναι είτε επαναλαμβανόμενοι είτε μη επαναλαμβανόμενοι, ενώ άλλοι μπορούν να είναι και τα δύο. 5. Χρησιμοποιούν την: εισαγωγή (insertion), ανταλλαγή (exchange), επιλογή (selection), συγχώνευση (merging), κατανομή (distrbution), διαμερισμού (partition), των στοιχείων. Στη συνέχεια περιγράφονται εν συντομία οι πιο γνωστοί αλγόριθμοι ταξινόμησης. 15

17 2.2 Βασικοί Αλγόριθμοι Ταξινόμησης Αλνόοιθαοε ώοσαλίδας (bubble sort) Ένας από τους πιο ευρέως χρησιμοποιούμενους αλγόριθμους αναζήτησης είναι ο αλγόριθμος φυσαλίδας (bubble sort), ο οποίος είναι ένας απλός και ευθύς αλγόριθμος για την ταξινόμηση συλλογών από δεδομένα. Ο αλγόριθμος αυτός ξεκινά από την αρχή της λίστας και συγκρίνει τα πρώτα δύο στοιχεία. Αν το πρώτο στοιχείο είναι το μεγαλύτερο, τότε εναλλάσσει τη θέση των δύο στοιχείων. Έπειτα συνεχίζει να συγκρίνει τα υπόλοιπα ζεύγη, δηλαδή το δεύτερο στοιχείο με το τρίτο και ούτω καθεξής. Όταν φτάσει στο τέλος της λίστας, ξεκινά πάλι από την αρχή δουλεύοντας με τον ίδιο τρόπο και σταματά όταν σε ένα πέρασμα της λίστας δε γίνει καμία εναλλαγή στοιχείων. Η πολυπλοκότητα καλύτερης περίπτωσης του συγκεκριμένου αλγόριθμου είναι 2 Ο(π) και της χειρότερης περίπτωσης 0(η ), όπου η είναι πάλι το μέγεθος της λίστας. Η ταξινόμηση φυσαλίδας έχει τα εξής χαρακτηριστικά: Απλή υλοποίηση Αποτελεσματικός για πολύ μικρά σύνολα δεδομένων Βελτιώνεται η απόδοσή του όταν τα στοιχεία είναι ήδη ταξινομημένα Χρησιμοποιεί την ανταλλαγή στοιχείων για την υλοποίηση του. Παράδεινιια: Έστω ότι ο αρχικός πίνακας αποτελείται από εννέα κλειδιά τα εξής: 52, 12, 71, 56, 5, 10, 19, 90 και 45. Η μέθοδος εφαρμοζόμενη σε αυτά τα εννέα κλειδιά εξελίσσεται όπως φαίνεται στον επόμενο πίνακα. Κάθε φορά το ταξινομημένο τμήμα του πίνακα εμφανίζεται με χρώμα, ενώ τα στοιχεία που σαν φυσαλίδες ανέρχονται μέσα στον πίνακα εντοπίζονται με το αντίστοιχο βέλος στα δεξιά τους. Κάθε φορά εμφανίζεται η τάξη της επανάληψης (i). Α ρ χ ικ ά κ λ ειδ ιά Τ ελικ ά κ λειδιά = 2 ί = 3 ί = 4 ί = 5 i = 6 i = 7 i = 8 i * > > / / Πίνακας 2 16

18 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου ΗθθρΒοιά Αλνόοιθμος: (Υλοποίηση σε java): 1 //java class public class BubbleSort { public void bubblesort(int[] arr){ for(int i=0; i<arr.length; i++){ for(int j=l; j<arr.length; j++){ if(arr[j]< arr[j-l] ){ int temp = arr[j]; arr[j] = arr[j-l]; arr[j-l] = temp; for(int i=0; i<arr.length; i++) { System.out.print(arr[i] + ""); 1Ο κώδικας που παραθέτω έχει χρησιμοποιηθεί από την πηγή 17

19 Αλνόοιθαος επιλονής (selection sort) Ένας άλλος απλός αλγόριθμος ταξινόμησης είναι ο αλγόριθμος επιλογής (selection sort) που έχει βελτιωμένη απόδοση σε σχέση με τον αλγόριθμο φυσαλίδας. Ο αλγόριθμος αυτός αρχικά βρίσκει το μικρότερο σημείο της λίστας και το εναλλάσσει με το πρώτο στοιχείο της λίστας. Στη συνέχεια βρίσκει το μικρότερο από τα άλλα στοιχεία, το εναλλάσσει με το δεύτερο στοιχείο της λίστας και ούτω καθεξής. Η επίδοση του αλγόριθμου επιλογής δεν επηρεάζεται από την προηγούμενη σειρά τοποθέτησης των στοιχείων της λίστας και εκτελεί τον ίδιο αριθμό επαναλήψεων εξαιτίας της απλής δομής του. Η ταξινόμηση επιλογής έχει τα εξής χαρακτηριστικά: Απλή υλοποίηση Αποτελεσματικός για πολύ μικρά σύνολα δεδομένων Χρησιμοποιεί την επιλογή των στοιχείων για την υλοποίηση του. Αλγόριθμος: (Υλοποίηση σε java): 2 public static void selectionsortl(int[] x) { for (int i=0; i<x.length-l; i++) { for (int j=i+l; j<x.length; j++) { if(x[i]>x[j]){ //... Exchange elements int temp = x[i]; x[i] = x[fl; x[j] = temp; 2Ο κώδικας που παραθέτω έχει χρησιμοποιηθεί από την πηγή 3ν3 /03Ϊ3 /3ΓΓ3ν5 /3ΐ3ΓΓ3ν56ΐ6εΓΐ0η 50ΓΪ. π Γη Ι 18

20 Αλνόοιθαος εισανωνήτ (insertion sort) Ο αλγόριθμος εισαγωγής (insertion sort) είναι ένας απλός αλγόριθμος ταξινόμησης που είναι σχετικά αποτελεσματικός σε μικρές λίστες και σχεδόν ταξινομημένες λίστες και συνήθως χρησιμοποιείται ως μέρος άλλων πιο περίπλοκων αλγόριθμων. Ο αλγόριθμος παίρνει ένα ένα τα στοιχεία της λίστας και τα τοποθετεί σε μια νέα λίστα σε ταξινομημένη σειρά. Η λειτουργία της εισαγωγής είναι όμως, «ακριβή» γιατί απαιτεί τη μετατόπιση των υπόλοιπων στοιχείων μία θέση αριστερά. Ο εν λόγω αλγόριθμος έχει πολυπλοκότητα 2 καλύτερης περίπτωσης Ο(η) και χειρότερης περίπτωσης 0(η ). Η ταξινόμηση εισαγωγής έχει τα εξής χαρακτηριστικά: Απλή υλοποίηση Αποτελεσματικός για πολύ μικρά σύνολα δεδομένων Χρησιμοποιεί την εισαγωγή των στοιχείων για την υλοποίηση του. 19

21 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου Ηθθρδοτί Παράδεινυα: Στο παρακάτω παράδειγμα βλέπουμε πως λειτουργεί η ταξινόμηση εισαγωγής. Η εύρεση της κατάλληλης θέσης γίνεται εύκολα με διαδοχικές συγκρίσεις και μετακινήσεις. Δηλαδή, το στοιχείο χ συγκρίνεται μετά προηγούμενα στοιχεία ί301θ[ί-1], ίθόιθβ-σ], κ.τ.λ. (προς τα αριστερά) μέχρι να βρεθεί κάποιο στοιχείο ΐθόΙθΜ με τιμή μικρότερη από το χ. Κατόπιν τα κλειδιά από ΐθόΙθ[ί-1] έως ί30ιθ[ι<+1] μετακινούνται προς τα δεξιά και το χ καταλαμβάνει τη σωστή θέση στην ταξινομημένη ακολουθία. Α ρ χ ι κ ά κ λ ε ι δ ι ά ?= ? = ί = ι = ? = ι = i 8 5 to ? = Πίνακας 3 Αλνόριθιιος (Υλοποίηση σε java): 3 void insertionsort(int[] arr) { int i, j, newvalue; for (i 1; i < arr.length; i++) { newvalue = arr[i]; j = i; while (j > 0 && arr[j -1] > newvalue) { arr[j] = arr[j -1]; j--; arr[j] = newvalue; 3Ο κώδικας που παραθέτω έχει χρησιμοποιηθεί από την πηγή 20

22 Κορωναίος Γεώργιος, Περιγραφή καιανάλυση Αλγορίθμου HeapSort Αλνόοιθιιοτ συνένωσης (merge sort) Ο αλγόριθμος συνένωσης (διαίρι και βασίλευε) έχει ως πλεονέκτημα την ευκολία που παρουσιάζει η συνένωση ήδη ταξινομημένων λιστών σε μια νέα ταξινομημένη λίστα. Αρχίζει συγκρίνοντας κάθε ζευγάρι στοιχείων της λίστας (δηλαδή το πρώτο με το δεύτερο, το τρίτο με το τέταρτο και ούτω καθεξής) και εναλλάσσει τα στοιχεία αν το πρώτο είναι μεγαλύτερο του δεύτερου. Στη συνέχεια συνενώνει τα ζευγάρια των ταξινομημένων λιστών των δύο στοιχείων σε ταξινομημένες λίστες των τεσσάρων στοιχείων, στη συνέχεια των οχτώ και ούτω καθεξής, μέχρι να συνενωθούν δύο λίστες στην τελική ταξινομημένη λίστα. Ο εν λόγω αλγόριθμος έχει θεωρητική πολυπλοκότητα 0(n log π). Ο αλγόριθμος ταξινόμησης συνένωσης έχει τα εξής χαρακτηριστικά: Είναι ο μόνος αλγόριθμος μεγάλης ταχύτητας Χρησιμοποιεί την συγχώνευση των στοιχείων για την υλοποίηση του. Παράδεινυα: Στον παρακάτω πίνακα βλέπουμε πώς λειτουργεί η ταξινόμηση συνένωσης. Αρχίζει συγκρίνοντας κάθε ζευγάρι στοιχείων της λίστας (δηλαδή το πρώτο με το δεύτερο, το τρίτο με το τέταρτο και ούτω καθεξής) και εναλλάσσει τα στοιχεία αν το πρώτο είναι μεγαλύτερο του δεύτερου. Στη συνέχεια συνενώνει τα ζευγάρια των ταξινομημένων λιστών των δύο στοιχείων σε ταξινομημένες λίστες των τεσσάρων στοιχείων, στη συνέχεια των οχτώ και ούτω καθεξής, μέχρι να συνενωθούν δύο λίστες στην τελική ταξινομημένη λίστα. 21

23 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλνορίθμου HeapSort Πίνακας 4 Αλνόριθιιος (Υλοποίηση σε java-):4 static void mergesort(int[] A) { if (A.length > 1) { int q = A.length/2; int[] leftarray = Arrays.copyOfRange(A, 0, q); int[] rightarray = Arrays.copyOfRange(A,q+l,A.length); mergesort(leftarray); mergesort(rightarray); A = merge(leftarray,rlghtarray); static int[] merge(int[] I, int[] r) { int totelem = I.length + r.length; int[] a = new int[totelem]; int i,li,ri; i = li = ri = 0; while ( i < totelem) { if ((li < I.length) && (rkr.length)) { 4 Ο κώδικας που παραθέτω έχει χρησιμοποιηθεί από την πηγή 22

24 if(l[h]<r[ri]){ a[i] = l[li]; i++; li++; else { a[i] = r[ri]; ++; ri++; else { if (li >= I.length) { while (ri < r.length) { a[i] = r[ri]; i++; ri++; if (ri >= r.length) { while (li < I.length) { a[i] - l[li]; li++; i++; return a; 23

25 Κορωναίος Γεώρνιος, Περινραφή και Ανάλυση Αλγορίθμου HeapSort Αλνόοιθαος νοήνοοης ταεινόαησης (quick sort) Ο αλγόριθμος γρήγορης ταξινόμησης_είναι αλγόριθμος διαιρεί και βασίλευε που στηρίζεται σε μια λειτουργία που ονομάζεται Διαμέριση (partition). Για τη διαμέριση ενός πίνακα, επιλέγουμε ένα στοιχείο, επονομαζόμενο ως βήμα (pivot), και μετακινούμε όλα τα μικρότερα στοιχεία πριν το στοιχείο βήμα και τα μεγαλύτερα μετά από αυτό. Η λειτουργία αυτή μπορεί να γίνει αποτελεσματικά σε γραμμικό χρόνο. Στη συνέχεια επαναληπτικά ταξινομούμε τις μικρότερες και μεγαλύτερες υπολίστες. Ο εν λόγω αλγόριθμος είναι ένας από τους ταχύτερους αλγόριθμους ταξινόμησης, το πιο περίπλοκο δε θέμα σε αυτόν είναι η επιλογή του στοιχείου - βήματος. Λανθασμένες επιλογές αυτού του στοιχείου μπορούν να κοστίσουν σε δραματική μείωση της επίδοσης σε 2 0(η ). Αν όμως, σε κάθε βήμα διαλέγουμε το μεσαίο στοιχείο της λίστας τότε ο αλγόριθμος εκτελείται σε 0(n log η). Η γρήγορη ταξινόμηση έχει τα εξής χαρακτηριστικά: Πολυπλοκότητα χειρότερης περίπτωσης 0(η2) Χρησιμοποιεί τον διαμέρισμά των στοιχείων για την υλοποίηση του. Παοάδεινυα: i Ρ j η S T Ρ j r* L?JL_e_ T Ρ i j 2 1 e J - r I 4 Ρ J 2 1 s - r Ρ» j r e I 4 Ρ i J s Τ' j β 6 I 4 Ρ j ^ 5 Ρ ι r* f a ~ r 5 ^ ρ I Γ* Λ Ύ CO 9uicksort(A,p,q-l) 9uickser+(A. «? 1. r«> Πίνακας 5 24

26 AAyopiQuociYAoTtoinon oe java-)5 int partition(int arr[], int left, int right) { int i = left, j = right; int tmp; int pivot = arr[(left + right) / 2]; while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; ; return i; void quicksort(int arr[], int left, int right) { int index = partitionfarr, left, right); if (left < index -1) quicksort(arr, left, index -1); if (index < right) quicksort(arr, index, right); 5Ο κώδικας που παραθέτω έχει χρησιμοποιηθεί από την πηγή 25

27 Αλνόοιθικκ heapsort Ένας άλλος γνωστός αλγόριθμος ταξινόμησης είναι ο αλγόριθμος heapsort. Όπως και ο αλγόριθμος επιλογής, έτσι και αυτός ο αλγόριθμος δουλεύει ψάχνοντας το μεγαλύτερο (ή μικρότερο) στοιχείο της λίστας, τοποθετώντας το στο τέλος (ή στην αρχή) και συνεχίζει με το υπόλοιπο της λίστας. Η διαφορά είναι όμως, ότι ο αλγόριθμος heapsort εκτελεί αυτή τη διαδικασία πιο αποτελεσματικά χρησιμοποιώντας ένα τύπο δεδομένων που ονομάζεται heap, που ουσιαστικά είναι ένας ειδικός τύπος δυαδικού δέντρου. Μόλις τα στοιχεία της λίστας σχηματίσουν το heap, η ρίζα του δέντρου είναι το μεγαλύτερο στοιχείο. Τότε αφαιρείται και τοποθετείται στο τέλος της λίστας και σχηματίζεται ξανά το heap με αποτέλεσμα η ρίζα του δέντρου να είναι πάλι το μεγαλύτερο στοιχείο. Χρησιμοποιώντας το heap για να βρεθεί το μεγαλύτερο στοιχείο της λίστας απαιτείται 0(log η) χρόνος αντί για Ο(π) που χρειάζεται για μια σειριακή σάρωση στον απλό αλγόριθμο επιλογής. Αυτό επιτρέπει στον heapsort να εκτελείται σε χρόνο 0(n logn). Η ταξινόμηση σωρού έχει τα εξής χαρακτηριστικά: > πολυπλοκότητα χειρότερης περίπτωσης 0(n logn) Χρησιμοποιεί την επιλογή των στοιχείων για την υλοποίηση του. Αλνόριθιιος (Υλοποίηση σε java) Ο παρακάτω κώδικας είναι ο κώδικας ο όποιος έχει χρησιμοποιηθεί στο πρόγραμμα το όποιο έχει υλοποιηθεί για την πρακτική εφαρμογή του HeapSort η οποία περιγράφεται στο Ένθετο. public class HeapSort { public static void heapsort(int[] data, int n) { //sort first n elements of data array via heapsort; 0 <= n < data.length //first make heap for (int r = (n - 2) / 2; r >= 0; r -= 1) // work backwards from last parent node = (last index - l )/2 { heapify(data, r, n); //sort heap by swapping biggest element to end of list, // and make heap again of the rest while (n > 1) { n -= 1; int temp = data[n]; //swap last unsorted element with top data[n] = data[0]; data [0] = temp; 26

28 heapify(data, 0, n); private static void heapify(int[] data, int root, int n) / / let out-of-place element at index root // settle down through tree to make a legal heap //start assuming any children of root are at tops of legal heaps //all indices of heap elements have index < n { int left = 2 * root + 1; while (left < n) { // while root is not a leaf int right = left + 1; int rootdata = data [root ];// need a copy for swaps if (right == n) {//right past end, only one leaf if (data [left] > rootdata) {// swap if smaller at root data[root] = data[left]; data [left] = rootdata; return; //already fixed child, which is the final leaf else {//two leaves int bigger = right; //find bigger of two children if (data[left] > data[bigger]) { bigger = left; if (rootdata >= data[bigger]) { return; // OK, now is legal heap below // else root out of place data[root] = data[bigger]; // swap root with bigger child data[bigger] = rootdata; root = bigger; //descend in heap for next loop left = 2 * root + 1; 27

29 Κεφάλαιο 3: Ανάλυση Αλγορίθμου HeapSort Για να μπορέσουμε να αναλύσουμε τον αλγόριθμο HeapSort θα πρέπει πρώτα να αναφέρουμε και να αναλύσουμε το σωρό (heap), τις λειτουργίες και τα είδη του. 3.1 Σω ροί (Heap) Εισαγω γή Ο σωρός είναι μια δενδρική δομή και χρησιμοποιείται για την δημιουργία ουρών προτεραιότητας (priority queues). Η ρίζα του δέντρου περιλαμβάνει το μικρότερο ή μεγαλύτερο στοιχείο του, αναλόγως, αν έχουμε σωρό ελάχιστων ή μεγίστων. Τα επόμενα δύο στοιχεία του δένδρου είναι τα παιδιά του. Γενικότερα αν ο πατέρας είναι στη θέση i τα παιδιά του θα είναι στην θέση 2ί (αριστερό παιδί) και 2ί+1 (δεξί παιδί) αντίστοιχα. Αν i η θέση ενός παιδιού i/2 είναι η θέση του πατέρα του. Κάθε σωρός με η στοιχεία έχει ύψος log^n. Ο σωρός, όπως και τα δέντρα γενικότερα, μπορεί να υλοποιηθεί με πίνακα, στον οποίο εισάγονται τα κλειδιά του σωρού από αριστερά προς τα δεξιά και από πάνω προς τα κάτω. Τα είδη των σωρών είναι: Οι σωροί μεγίστων (max heap) Οι σωροί ελάχιστων (min heap) Διπλός σωρός (double-ended heap,deap) Αριστερίστικος σωρός (leftist heap) Δυωνυμικοί σωροί (binomial heap) Σωροί Fibonacci Ο διπλός σωρός, αριστερίστικος σωρός, δυωνυμικός σωρός και ο σωρός Fibonacci περιγράφονται στο ένθετο. 28

30 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου ΗθθρδΟΓί Στην εικόνα φαίνεται ένας σωρός και η αντίστοιχη υλοποίησή του σε πίνακα Εικόνα 4 Οι βασικές λειτουργίες ενός σωρού είναι: Η εισαγωγή(ιπ5θγί) ενός στοιχείου στον σωρό Η διαγραφή(οθιθίθ) ενός στοιχείου από τον σωρό 29

31 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου ΗθΒρδοΓί Κα τα σκευή Σωρού Ο σωρός μπορεί να κατασκευαστεί χρησιμοποιώντας τον παρακάτω αλγόριθμο, ο οποίος καλεί τον αλγόριθμο εισαγωγής ενός στοιχείου. Θεωρούμε ότι τα στοιχεία έρχονται με μια σειρά και δεν είναι γνωστά εκ των προτέρων. ΒυΐίΘΗΕΑΡ (Α(η)) { ίοτ ί = 1 ίο η άο Ιηεετί (Α(η),ί]) θηό ίοτ Παρακάτω φαίνεται ένα παράδειγμα κατασκευής σωρού. Ας υποθέσουμε ότι έχουμε την ακολουθία στοιχείων 1,2,3,4. Η διαδικασία κατασκευής του σωρού φαίνεται στο παρακάτω σχήμα:

32 Στην χειριστή περίπτωση, κάθε στοιχείο που εισάγεται θα ξεκινήσει από φύλλο του σωρού και θα καταλήξει στην ρίζα, άρα αν εισάγεται στο βήμα, τότε θα χρειαστεί 0(log i) βήματα. Ωστόσο μπορούμε να επιτύχουμε καλύτερο χρόνο για την κατασκευή του σωρού αν γνωρίζουμε από την αρχή όλη την ακολουθία εισόδου και την έχουμε αποθηκευμένη σε έναν πίνακα. Τότε θα θεωρήσουμε ότι ο αρχικός πίνακας εισόδου Α είναι η αναπαράσταση ενός αταξινόμητου σωρού και εμείς θα επιβάλλουμε την ιδιότητα του σωρού στον πίνακα αυτόν, ξεκινώντας από τους χαμηλότερους εσωτερικούς κόμβους και πηγαίνοντας προς την ρίζα. Για τον σκοπό αυτό χρησιμοποιούμε την Heapify η οποία αναλύεται στο επόμενο κεφάλαιο (3.2.2 Ανάλυση της HeapSort) Δομή σωρού μεγίστουν (max heap) Σωρός μεγίστουν είναι ένα δένδρο, το οποίο ικανοποιεί δύο συνθήκες: > Η τιμή του κλειδιού κάθε κόμβου είναι μεγαλύτερη ή ίση από τις τιμές των κλειδιών των παιδιών του. > Είναι ένα συμπληρωμένο δέντρο, που σημαίνει ότι μπορεί να προκόψει από ένα πλήρες δέντρο αφαιρώντας έναν αριθμό στοιχείων από το τέλος. Οι διαδικασίες της εισαγωγής και της διαγραφής υλοποιούνται με τους ακόλουθους τρόπους: 31

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

34 3.1.4 Δομή σωρού ελαχίστουν (m in heap) Σωρός ελαχίστουν είναι ένα δένδρο, το οποίο ικανοποιεί δύο συνθήκες: S S Η τιμή του κλειδιού κάθε κόμβου είναι μικρότερη ή ίση από τις τιμές των κλειδιών των παιδιών του. Είναι ένα συμπληρωμένο δέντρο, που σημαίνει ότι μπορεί να προκόψει από ένα πλήρες δέντρο αφαιρώντας έναν αριθμό στοιχείων από το τέλος. Οι διαδικασίες της εισαγωγής και της διαγραφής υλοποιούνται με τους ακόλουθους τρόπους: 33

35 Εισανωνή στοιχείου (Insert) Για να εισάγουμε ένα στοιχείο στο σωρό, αρχικά το προσθέτουμε στο τέλος του. Αν το στοιχείο που εισάγουμε είναι μικρότερο από τον γονιό του, τότε αλλάζουν θέση. Επαναλαμβάνουμε αυτή τη διαδικασία μέχρι να μην παραβιάζεται ο κανόνας αυτός. Παρακάτω φαίνεται ένα παράδειγμα εισαγωγής στοιχείου στον σωρό. 34

36 ΔιανοαΦή στοιχείου (delete min) Για να διαγράφουμε το στοιχείο του σωρού ακολουθούμε την εξής μέθοδο. Πρώτα διαγράφουμε το στοιχείο της κορυφής και βάζουμε στη θέση του το τελευταίο στοιχείο του σωρού. Στη συνέχεια κάνουμε τις κατάλληλες αλλαγές, εφόσον αυτές απαιτούνται για να μην παραβιάζεται ο 1ος κανόνας του σωρού ελάχιστων. Παρακάτω φαίνεται ένα παράδειγμα διαγραφής στοιχείου από τον σωρό. 35

37 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου Ηθ8ρ5θΓΐ 17 Εικόνα 12 36

38 3.2 Ανάλυση τη ς HeapSort Εισαγω γή Ο αλγόριθμος Heapsort είναι ένας αλγόριθμος ταξινόμησης και ανήκει στην οικογένεια αλγορίθμων ταξινόμησης επιλογής με συγκρίσεις. Η μέθοδος αυτή προτάθηκε από τον Williams το Στη μέθοδο αυτή εργάστηκε επίσης και ο Floyd (1962,1964). Έχουν προταθεί κάποιες παραλλαγές του αλγορίθμου Heapsort. Ο BOTTOM-UP-HEAPSORT είναι μια παραλλαγή του Heapsort που εκτελεί 1.5n log η+0(η) βασικές συγκρίσεις στη χειρότερη περίπτωση. Η ιδέα είναι να αναζητηθεί η πορεία προς το φύλλο ανεξαρτήτως της θέσης του στοιχείου της ρίζας. Δεδομένου ότι το αναμενόμενο βάθος είναι υψηλό αυτή η πορεία διαπερνιέται bottom-up. Ο Fleischer (1991) όπως και ο Schaffer και ο Sedgewick (1993) θεωρούν ότι ο αλγόριθμος αυτός απαιτεί τουλάχιστον 1.5n logn ο(η log η) συγκρίσεις. Κάποιος μπορεί να συμπεράνει ότι ο μέσος αριθμός συγκρίσεων σε αυτήν την παραλλαγή είναι οριακός κοντά στο η log η + Ο(η). Ο MDR-HEAPSORT προτάθηκε από τον McDiarmid και τον Reed (1989). Ο αλγόριθμος αυτός εκτελεί λιγότερες από nlogn + cn συγκρίσεις στη χειρότερη περίπτωση και επεκτείνεται τον BOTTOM-UP-HEAPSORT με τη χρησιμοποίηση ενός bit για να κωδικοποιήσει σε ποιο κλάδο μπορεί να βρεθεί το μικρότερο στοιχείο και ένα άλλο για να χαρακτηρίσει εάν αυτή η πληροφορία είναι άγνωστη. Ο αλγόριϋμος WEAK-HEAPSORT είναι πιο κομψός και πιο γρήγορος. Αντί για δύο bits ανά στοιχείο ο WEAK-HEAPSORT χρησιμοποιεί μόνο ένα. Ο ULTIMATE-HEAPSORT προτάθηκε από τον Katajainen το Ο αλγόριθμος αυτός αποφεύγει τα χειρότερα παραδείγματα περίπτωσης του BOTTOM-UP-HEAPSORT με τον περιορισμό του συνόλου σωρών σε σωρούς δύο στρωμάτων. Είναι δυσκολότερο να εγγυηθεί αυτή η περιορισμένη μορφή. Ο αλγόριθμος αυτός πετυχαίνει μικρότερο αριθμό συγκρίσεων χειρότερης περίπτωσης και ο αριθμός των συγκρίσεων στη μέση περίπτωση είναι μεγαλύτερος του BOTTOM-UP-HEAPSORT. 37

39 3.2.2 Αλγόριθμος HeapSort Ο αλγόριθμος του HeapSort αποτελείταιαπό 2 φάσεις: 1. Τη φάση της δημιουργίας του σωρού (Buildheap) και 2. Τη φάση της επεξεργασίας του σωρού. Ο αλγόριθμος HeapSort κατασκευάζει ως πρώτο βήμα μέσω του Buildheap έναν σωρό μεγίστου από μια συστοιχία εισόδου Α[1..η] όπου η = μήκος [Α], Σε κάθε κόμβο που διεξέρχεται καλεί την Heapify η οποία αποκαθιστά την ιδιότητα του σωρού. Κατά τη φάση της επεξεργασίας του σωρού το κλειδί της ρίζας εναλλάσσεται με το τελευταίο κλειδί του σωρού και στο εξής δεν λαμβάνεται υπ όψη. Όμως με την αλλαγή αυτή τα εναπομείναντα κλειδιά δεν αποτελούν πλέον σωρό μεγίστου. Έτσι ακολουθεί η διαδικασία Heapify για να αποκαταστήσει την ιδιότητα του σωρού. Πιο συγκεκριμένα, το νέο κλειδί που βρέθηκε στη ρίζα του σωρού συγκρίνεται με το μεγαλύτερο από τα κλειδιά των κόμβων που είναι παιδιά της ρίζας, Αν το νέο κλειδί είναι μικρότερο, τότε τα κλειδιά ανταλλάσσονται. Η διαδικασία της καθόδου του νέου κλειδιού από τη ρίζα προς κατώτερα επίπεδα συνεχίζεται μέχρι να βρεθεί μικρότερο κλειδί ή να φτάσει και πάλι στο επίπεδο των φύλλων. Κατόπιν και πάλι το κλειδί της νέας ρίζας εναλλάσσεται με το κλειδί του (προ-) τελευταίου κόμβου του πίνακα. Κώδικας του αλγορίθμου Heapsort Heapify(A, i) { I <- left(i) r <- right(i) if I <= heapsize[a] and A[l] > A[i] then largest < -1 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]/21 down to 1 do Heapify(A, i) Heapsort(A) { Buildheap(A) for i <- length[a] down to 2 do swap A[l] <-> A[i] heapsize[a] <- heapsize[a] -1 Heapify(A, 1) 38

40 Ανάλυση πολυπλοκότητας Έστω Τ(η) ο χρόνος που χρειάζεται ο αλγόριθμος Heapsort για να εφαρμοστεί σε έναν πίνακα μεγέθους η. Ο χρόνος που χρειάζεται ο αλγόριθμος για να ολοκληρωθεί είναι HEAPIFY6 T(n)= Τ (π) + Τ (π) +Θ(π-1) buildheap Heapify Η διαδικασία Heapify (αποκατάσταση σωρού μεγίστου) είναι ένα σημαντικό υποπρόγραμμα για τη διαχείριση σωρών μεγίστου. Δέχεται ως είσοδο μια συστοιχία A και η θέση i είναι κάποιο στοιχείο της συστοιχίας. Η λειτουργία της διαδικασίας προϋποθέτει ότι τα δυαδικά δένδρα που εκφύονται από τους κόμβους Αριστερός(ί)7 και Δεξιός(ί)8 είναι σωροί μεγίστου, αλλά το A[i]9 ενδέχεται να είναι μικρότερο από τους θυγατρικούς του κόμβους, δηλαδή να παραβιάζει την ιδιότητα του σωρού μεγίστου. Η Heapify μετακυλύει την τιμή του A[i] προς τα κάτω στον σωρό μεγίστου έτσι ώστε το υποδένδρο που εκφύεται από το στοιχείο στη θέση i να καταστεί σωρός μεγίστου.[1, σελ.128] Σε κάθε βήμα, προσδιορίζεται το μέγιστο των στοιχείων Α[ί], Α[Αριστερός(ί)] και Α[Δεξιός(ΐ)] και αποθηκεύεται στην μεταβλητή μεγίστου (largest) η θέση του [βλέπε Κώδικας του αλγορίϋμου Heapsort]. Εάν το μέγιστο είναι το A[i], τότε το υποδένδρο που εκφύεται από τον κόμβο i αποτελεί σωρό μεγίστου, οπότε η διαδικασία τερματίζεται. Διαφορετικά, το μέγιστο στοιχείο βρίσκεται σε έναν από τους δυο θυγατρικούς κόμβους, οπότε η διαδικασία εναλλάσσει τα στοιχεία A[i] και A [μεγίστου]. Με τον τρόπο αυτό ικανοποιείται η ιδιότητα του σωρού μεγίστου. [1, σελ.128] 6Αποκατάσταση σωρού μεγίστου 7Αριστερός ή left ή αριστερός θυγατρικού (ί) = επιστροφή 2i 8Δεξιός ή right ή δεξιός θυγατρικού (ί) = επιστροφή 2ί+1 9Ρίζα δένδρου 39

41 Ο χρόνος εκτέλεσης της Ηβθρίίγ σε ένα υποδένδρο μεγέθους η είναι: Τ (π) = Θ(1) + Τ (μέγεθος υποδένδρου) ϊιβθριίγ ήβθρϊίγ Όταν δεν γίνονται ανταλλαγές η καλύτερη περίπτωση της Ηββρίίγ είναι: Τ^(η ) = Θ(1) Έτσι πρέπει να ξέρουμε πόσο μεγάλα μπορεί να είναι τα υποδένδρα του σωρού με η στοιχεία. Μια πρώτη προσέγγιση θα έδειχνε ότι ένα υποδένδρο θα μπορούσε να είναι το μισό του δένδρου μιας και ο σωρός είναι δυαδικό δένδρο. Αν ένας σωρός Α έχει μέγεθος η, τα υποδένδρα του έχουν μέγεθος μικρότερο ή ίσο με 2η/3. Άρα: Τ (η) < Τ (2η/3) + Θ(1) ήβθρΐίγ Ηβθρίίγ Σύμφωνα με το κεντρικό ϋεώρημα10, η αναδρομική αυτή σχέση έχει λύση : Τ Ιιββρίίγ *123 (η) = 0(Ιο η) 1 Κεντρικό θεώοηαα: Τ(η) = at(n/b) + f(n) 1. Αν f(n) = O(nlogba'e) για κάποια σταθερά e>0, tote Τ(η) = 0(nlogba). 2. Αν f(n) = 0(nlogba), τότε Τ(η) = 0(nlogbaIgn). 3. Αν f(n) = Q(n' gba+e) για κάποια σταθερά e>0, και αν af(n/b) < cf(n) για κάποια σταθερά c < 1 και για όλα τα η από κάποια τιμή και πάνω, τότε Τ(η) = 0(f(n)). 40

42 BUILDHEAP11 Η Buildheap διεξέρχεται από τους κόμβους του δένδρου και εκτελεί σε κάθε ένα από αυτούς την Heapify. Μπορούμε να υπολογίσουμε ένα απλό άνω φράγμα για τον χρόνο εκτέλεσης της Buildheap ως εξής. Η κάθε κλήση της Heapify απαιτεί χρόνο O(logn), και εκτελούνται Ο(η) τέτοιες κλήσεις. Επομένως ο χρόνος εκτέλεσης είναι 0(n logn). Αυτό το άνω φράγμα, αν και σωστό δεν είναι ασυμπωτικά αυστηρό. Μπορούμε να προσδιορίσουμε ένα αυστηρότερο φράγμα παρατηρώντας ότι ο χρόνος εκτέλεσης της Heapify για έναν συγκεκριμένο κόμβο εξαρτάται από το ύφος του κόμβου στο δένδρο. Η αυστηρότερη αυτή ανάλυση βασίζεται στις ιδιότητες ότι ένας σωρός η στοιχείων έχει ύφος logn και το πολύ n/2h+1 κόμβους ύψους Γι. Ο χρόνος που απαιτείται από την συνάρτηση MAX-HEAPIFY όταν καλείται σε έναν κόμβο του ύψους h είναι 0(h). Έτσι μπορούμε εκφράσουμε το συνολικό κόστος της συνάρτησης BUILD-MAX-HEAP ως [1, σελ. 133] Σh - Π h _ 1/2 2 * ~ (1-1/2)2 = 2 Κατά συνέπεια, ο χρόνος υλοποίησης του BUILD-MAX-HEAP μπορεί να υπολογιστεί ως [1, σελ. 133] Ο Αρα η πολυπλοκότητα της κατασκευής του σωρού φράσσεται από 0(η). Άρα τελικά η διαδικασία του αλγορίθμου ΗΕΑΡ50ΡΓΓ απαιτεί χρόνο 0(η Ιο^η), δεδομένου ότι η κλήση στην ΒυΝάόεβρ απαιτεί χρόνο 0(η) και κάθε μια από τις η-1 κλήσεις στην Ηθθρϊίγ απαιτεί χρόνο 0 (^ η ). Κατασκευή σωρού μεγίστου 41

43 Heapsort sift sift Εικόνα 15 M i l I I I I I I M i M g I I I I 11 1 h 2 i 5 I I I ~l ΓΤ 1 I f l l I1 2 M 5 I1 6 M 7 I I I <g 3> I -I I 11-1 I1 2 I1 5 M 6 M 7 I1 9 I Εικόνα 16 42

44 Υλοποίηση σε Java Ο παρακάτω κώδικας είναι ο κώδικας ο όποιος έχει χρησιμοποιηθεί στο πρόγραμμα το όποιο έχει υλοποιηθεί για την πρακτική εφαρμογή τις HeapSort η οποία περιγράφεται στο Ένθετο. public class HeapSort { public static void heapsort(int[] data, int n) { //sort first n elements of data array via heapsort; 0 <= n < data.length //first make heap for (int r = (n - 2) / 2; r >= 0; r -= 1) // work backwards from last parent node = (last index -l)/2 { heapify(data, r, n); //sort heap by swapping biggest element to end of list, // and make heap again of the rest while (n > 1) { n -= 1; int temp = data[n]; //swap last unsorted element with top data[n] = data [0]; data [0] = temp; heapify(data, 0, n); private static void heapify(int[] data, int root, int n)// let out-of-place element at index root // settle down through tree to make a legal heap //start assuming any children of root are at tops of legal heaps //all indices of heap elements have index < n { int left - 2 * root + 1; while (left < n) { // while root is not a leaf int right = left + 1; int rootdata = data [root ],// need a copy for swaps if (right == n) {//right past end, only one leaf if (data [left] > rootdata) {// swap if smaller at root data[root] = data[left]; data [left] = rootdata; return; // already fixed child, which is the final leaf else {//tw o leaves int bigger = right; //find bigger of two children if (data[left] > datalogger]) { bigger = left; if (rootdata >= data [bigger]) { return; //OK, now is legal heap below 43

45 Kopidvaioq rswpyioq, n piypa<t>ri KaiAvaXuan AAyopiGpou HeapSort // else root out of place data [root] = data [bigger]; // swap root with bigger child data[bigger] = rootdata; root = bigger; //descend in heap for next loop left = 2 * root + 1; 44

46 3.3 Σύγκριση Θ ετικά Αρνητικά HeapSort Θετικά: 1. Ο Αλγόριθμος είναι βέλτιστος και έχει εγγυημένο χρόνο διεκπεραίωσης 0(n logn). 2. Ο Αλγόριθμος είναι ένα από τα λίγα μη-αναδρομικά είδη 0(n logn). 3. Αρκετά εύκολος για τον εντοπισμό σφαλμάτων (debug), διότι είναι μηεπαναληπτικός και αποτελείται από δυο μικρότερα και μη-σχετικά τμήματα. 4. Ο Αλγόριθμος είναι αποτελεσματικός όταν τα δεδομένα εισάγονται ταξινομημένα κατά την αντίστροφη φορά. 5. Η χειρότερη περίπτωση έχει την ίδια πολυπλοκότητα με τη μέση περίπτωση, ενώ όπως είναι γνωστό δεν συμβαίνει το ίδιο με τον Quicksort. Αρνητικά: 1. Ο αλγόριθμος δεν είναι τόσο γρήγορος κατά μέσο όρο, όσο ο αλγόριθμος Quicksort. 2. Στη χειρότερη περίπτωση εκτελεί περίπου (2n logn) συγκρίσεις, ενώ ο Quicksort εκτελεί στη μέση περίπτωση περίπου (l,38n logn) συγκρίσεις. 3. Πολυπληθείς κώδικας για την υλοποίηση των εργασιών του σωρού. 45

47 Οι επιδόσεις του αλγορίθμου Ηθβρδοτΐ (ταξινόμηση με σωρό) σε σύγκριση με άλλους αλγορίθμους Συγκρίσεις Insertion sort O(n) 0(n2) 0(n2) Bubble sort 0(n2) 0(n2) 0(n2) Selection sort 0(n2) 0(n2) 0(n2) Quick sort 0(n logn) 0(n logn) 0(n2) Heap sort 0(n logn) 0(nlogn) Merge sort 0(n logn) 0(n logn) 0(n logn) Πίνακας 6 46

48 Επίλογος - Συμπεράσματα Η εργασία αυτή πραγματεύτηκε τις γνώσεις και τα στοιχεία που απαιτούνται για την κατανόηση του αλγορίθμου HeapSort. Αναλύθηκαν έννοιες που αφορούσαν τις κατηγορίες αλγορίθμων ταξινόμησης και του σωρού (Heap). Αφιερώθηκε χρόνος για την δημιουργία προγράμματος, σε γλώσσα προγραμματισμού JAVA και ΡΗΡ, στο οποίο υλοποιήθηκε η HeapSort για την ταξινόμηση της βάσης δεδομένων του προγράμματος καταγραφής βλαβών. Στόχος μου ήταν να αναλύσω και να παρουσιάσω τον αλγόριθμο HeapSort και θα ήθελα να επισημάνω τα εξής: Ο αλγόριθμος HeapSort είναι βέλτιστος και έχει εγγυημένο χρόνο διεκπεραίωσης 0(n logn). Αρκετά εύκολος για τον εντοπισμό σφαλμάτων (debug). Από την παραπάνω εργασία κατανοούμε την αναγκαιότητα των αλγορίθμων ταξινόμησης και ειδικά του αλγόριθμου HeapSort όπου μπορεί να έχει πρακτική εφαρμογή σχεδόν παντού και βεβαίως σε πολύπλοκους και σοβαρότατους τομείς όπως αυτός της βιολογίας, του διαδικτύου, του ηλεκτρονικού εμπορίου και της βιομηχανικής παραγωγής. Η χρήση του αλγορίθμου HeapSort οδηγεί σε εξοικονόμηση χρόνου και χρήματος καθώς είναι σε θέση να διαχωριστεί μεγάλο όγκο δεδομένων και να παράγει μια πληθώρα πληροφοριών. 47

49 Βιβλιογραφία 1. Thomas Η. Cormen, Charles Ε. Ceiserson, Ronald C. Rivest, Clifford Stein. Εισαγωγή Στους Αλγορίϋμους Τομος I. s.l.: Πανεπιστημιακές Εκδόσεις Κρήτης, Μανωλοπουλος, Ιωάννης. Δομές Δεδομένων, s.l.: Art Of Text. 3. Κοιλίας, Χρήστος. Δομές Δεδομένων & Οργανώσεις Αρχείων, s.l.: Νέων Τεχνολογιών, Dutton, Ronald D. Weak-heap sort. s.l.: BIT, Παπουτσής, Ιωάννης. Εισαγωγή στις Δομές Δεδομένων καί στους αλγόριθμους. 6. Sedgewick., R. Schaffer and R. The analysis of heapsort. s.l.: Journal of Algorithms, Vol.15, N o.l. 7. Μποζάνης, Π. Δομές Δοδομένων: Ταξινόμηση καί Αναζήτηση με Java. s.l.: Τζιόλα, Τ.Η. Cormen. C.E. Leiserson, R.L. Rivest, and C. Stein. An Introduction to Algorithms, s.l.: The MIT Press, Edition. 9. Φ. Αφράτη, και Γ. Παπαγεωργίου. Αλγόριθμου Μέθοδοί Σχεδίασης Και Ανόιλυση Πολυπλοκότητας. Αθήνα : Συμμετρία, Μποζάνης, Π. Αλγόριθμου Σχεδιασμός και Ανάλυση, s.l.: Τζιόλα, Δουκάκης, Μ. Δομές Δεδομένων, Αλγόριθμου s.l.: Ζυγός, Χατζηλυγεροόδης, I. Δομές Δεδομένων, Εισαγωγή Στην Πληροφορική, s.l.: Ελληνικό Ανοικτό Πανεπιστήμιο, A. V. Aho, J. Ε. Hopcroft, and J. D. Ullman. Data Structures And Algorithms, s.l.: Addison - Wesley Publishing Company, Sedgewick, R. Algorithms, s.l.: Addison - Wesley Publishing Company, Wilf, H. S. Algorithms And Complexity, s.l.: Prentice Hall Inc, Mount, D. Algorithms, s.l.: Lecture Notes, Dept, of Computer Science, University,

50 Ένθετο Υπόλοιπα είδη σωρών Διπλός Σωο<χ (double-ended heap, deap) 12. σελ. 273] Ο διπλός σωρός (double-ended heap, deap) προτάθηκε από τον Carlsson (1987) και είναι μια δομή που εκτελεί τις ίδιες λειτουργίες που εκτελεί και ο σωρός ελάχιστων και μεγίστων και μάλιστα με την ίδια ποιοτική επίδοση. Η διαφορά τους είναι ότι η διαχείριση του διπλού σωρού είναι απλούστερη και επομένως η επίδοση είναι οριακά καλύτερη. Ο διπλός σωρός είναι ένα σχεδόν πλήρες δυαδικό δένδρο με τα εξής χαρακτηριστικά: Η ρίζα είναι κενή Το αριστερό υποδένδρο είναι σωρός ελάχιστων Το δεξιό υποδένδρο είναι σωρός μεγίστων, και Αν το δεξιό υποδένδρο δεν είναι κενό, i είναι ένας κόμβος του αριστερού υποδένδρου και j είναι ο συμμετρικός κόμβος του στο δεξιό υποδένδρο, τότε το κλειδί του κόμβου i είναι μικρότερο ή ίσο από το κλειδί του κόμβου j. Αν ο κόμβος i δεν έχει συμμετρικό κόμβο στο δεξιό υποδένδρο, τότε ως j λαμβάνεται ο συμμετρικός του πατέρα του κόμβου. Αοιστεοίστικος σωρός (leftist heap) [2. σελ. 276] Οι αριστερίστικοι σωροί είναι μια δυαδική δομή που είναι σχεδιασμένη ώστε να επιτυγχάνει τη συγχώνευση σε χρόνο O(logn) στη χειρότερη περίπτωση, ενώ οι πράξεις της εισαγωγής και της εξαγωγής στηρίζονται στη λειτουργία της συγχώνευσης, και επομένως διακρίνονται από την ίδια χρονική επίδοση στη χειρότερη περίπτωση. Ένας αριστερίστικος σωρός ελάχιστων (μεγίστων) είναι ένα αριστερίστικο δένδρο, όπου η τιμή κάθε κόμβου δεν είναι μεγαλύτερη (αντίστοιχα, μικρότερη) από τις τιμές των αντίστοιχων κόμβων παιδιών. 49

51 Κορωνοάος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου HeapSort Δυωνυιηκοί σωροί (binomial heaps) [2. σελ. 281] Ένας δυωνυμικός σωρός αποτελείται από ένα σύνολο δυωνυμικών δένδρων όπου σε κάθε δυωνυμικό σωρό μπορεί να περιέχεται μόνο ένα δυωνυμικό δένδρο συγκεκριμένου ύφους. Έτσι το δυωνυμικό δένδρο ύψους Ι,Β^ περιέχει έναν μόνο κόμβο, ενώ το δυωνυμικό δένδρο Bk ύψους k σχηματίζεται θέτοντας ένα δυωνυμικό δένδρο ως δεξιό υποδένδρο ενός άλλου δυωνυμικού δένδρου Bn. Οι δυωνυμικοί σωροί: Εκτελούν τις λειτουργιές της εισαγωγής, εξαγωγής και της συγχώνευσης σε χρόνο O(logn) στη χειρότερη περίπτωση, και Υλοποιούνται δυναμικά με τη βοήθεια δεικτών και όχι με πινάκες Ωστόσο Δεν αναπαριστώνται ως μια ενιαία δομή, αλλά ως ένα σύνολο δομών, δηλαδή είναι ένα δάσος δένδρων, και Εκτελούν την εισαγωγή σε 0(1) κατά μέσο όρο. Σωροί Fibonacci [2. σελ. 285] Οι σωροί Fibonacci είναι μια παραλλαγή των δυωνυμικών σωρών και χρησιμοποιούνται για τις γνωστές λειτουργιές της εισαγωγής, της εξαγωγής και της συγχώνευσης. Ωστόσο είναι σχεδιασμένοι για να παρέχουν αποτελεσματικά την δυνατότητα υλοποίησης δυο ακόμα πράξεων: Τη διαγραφή τυχόντος κόμβου, και Τη μείωση τυχόντος κλειδιού κατά μια ποσότητα Όσον αφορά στην επίδοση των σωρών Fibonacci, αναφέρεται ότι ασυμπτωτικά έχουν καλύτερη επίδοση από τους δυωνυμικούς σωρούς. Όπως οι δυωνυμικοί σωροί, έτσι και οι σωροί Fibonacci είναι μια συλλογή δένδρων που προσομοιάζουν με τα δυωνυμικό δένδρα. Ωστόσο, παρουσιάζουν τις εξής διαφορές: Τα δυωνυμικά δένδρα είναι διατεταγμένα, ενώ τα αντίστοιχα δένδρα Fibonacci δεν είναι διατεταγμένα Απαιτείται ένας επιπλέον δείκτης προς τη ρίζα του δένδρου Fibonacci που περιέχει τη μικρότερη τιμή Απαιτείται μια επιπλέον μεταβλητή, που δηλώνει το σύνολο των κόμβων όλων των δένδρων του σωρού Fibonacci 50

52 Με απλά λόγια μπορεί να λεχθεί ότι δομικά ένα δυωνυμικό δένδρο είναι και δένδρο Fibonacci, αλλά το αντίθετο δεν ισχύει. Τέλος από την άποψη των λειτουργιών (εισαγωγή, μείωση, διαγραφή) οι γνωστές διαδικασίες στους σωρούς Fibonacci τεμπέλικο (lazy) τρόπο. υλοποιούνται με 51

53 Υλοποίηση HeapSort Εισαγω γή Εδώ θα παρουσιαστεί ο αλγόριθμος HeapSort σε μια πρακτική εφαρμογή του πάνω σε ένα πρόγραμμα σε γλώσσα Java (τόσο σε γραφικό περιβάλλον όσο και σε web περιβάλλον) το οποίο έχει σχεδιαστεί ειδικά για την εργασία αυτή και είναι εμπνευσμένο από την πρακτική άσκηση. Επίσης θα παρουσιαστούν τα προγράμματα τα όποια χρησιμοποιηθήκαν, τα κυριότερα προβλήματα τα οποία παρουσιάστηκαν κατά την δημιουργία και εκτέλεση του κώδικα και οι παρατηρήσεις οι οποίες έγιναν. Παρουσίαση Προγράμματος Π ρ ο γ ρ ά μ μ α τα Τα προγράμματα τα οποία χρησιμοποιήσαμε για την υλοποίηση του προγράμματος ονομαστικά είναι: 1. Netbeans 2. Xampp Control Panel 3. MySQL 4. Apache HTTP 52

54 Κορωνοάος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου HeapSort NetBeans Το πρόγραμμα αυτό μπορούμε να το βρούμε δωρεάν στο Internet και μας είναι χρήσιμο για την δημιουργία, απασφαλμάτωση (Debug) και εκτέλεση του κώδικα Java για το γραφικό όσο και για το Web κομμάτι της εφαρμογής. 0 NetBeans IDE 7.3! File Edit yiev* Navigate Source Refactor Run Debug Profile Tearrj loots Window Help * fj S T U P» * Projects «Files Vtaves - to Source Packages : J ergaieia 5»> Services f f i Ergaleia.jara c.; HeaoSort.java ö Start Page * j ^ kataxoroivlavis.php * ggj neattavi-php WÊÊÊÊÊÊÊ S' Learn A Discover Μγ NetBeans WhaTs New Show On Startup Q HHtEHä] a I s ta VlavonWindow.java MainWndov.1.java gi) MyTaWeCelRende-eroava NeavlaviWndow.java U it_suppor tjac.jpg Recent Projects Activate Featuies - t d viaves «Φ Mar.java form - Navigator λ <no recent project» Add suooort for orner languages and technolog*s by mstaftng pbgrts from the NetBeans Uoctate Center. NetBeans turns on functionality as you use it. Start creating and opening projects and the ID w i just activate the features you need, making yocx experience Quicker and oearer. Alternatively, you can activate features manual /. Xampp Control Panel Εικόνα 17 To Xampp είναι ένα δωρεάν και open source cross-platform πακέτο web server, αποτελοόμενο κυρίως από το Apache HTTP Server, MySQL βάση δεδομένων. Το εργαλείο αυτό σας επιτρέπει να ξεκινήσετε και να σταματήσετε τους servers που έχουν εγκατασταθεί ως μέρος του XAMPP. T j XAM PP Control Panel Application Ι α I Ξ Ι Ρ & Γ A _ Hj XAMPP Control Panel Service. SC M... Modules iy sve Apache Running Stop A dm in... J Svc MySql Running Stop A dm in... s v e FileZilla S ta rt j A d m in... j Svc M ercu ry 1 S tart j A d m in... ] s v c T o m c a t 1 S tart A d m in... j Status R efresh.explore... H elp Exit M y S q l s e r v i c e s t a r t e d B u s y... A p a c h e s e r v i c e s t e p p e d 3 u a y... M y S q l s e r v i c e s t e p p e d 3 u a y... F.Hi 1-1,1! 1-.-J.I4 U l.! 1-1 B u e y. _. M y S q l s e r v i c e s t a r t e d Εικόνα 18 53

55 MySQL Η MySQL είναι ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων που μετρά περισσότερες από 11 εκατομμύρια εγκαταστάσεις. Έλαβε το όνομά της από την κόρη του Μόντυ Βιντένιους, τη Μάι (αγγλ. My). Το πρόγραμμα τρέχει έναν εξυπηρετητή (server) παρέχοντας πρόσβαση πολλών χρηστών σε ένα σύνολο βάσεων δεδομένων. Μπορούμε να την βρούμε στο Internet δωρεάν. ^ -»Μkxalhort /localhcrt pt- C locaihost 3 a Αυτή η σελίδα είναι στα Αγγλικά» Θελετε να τη μεταορασετε: Μεταοραση Ό χ ι phpm ya dm in 6t φ ν «SQL Status Processes «Privileges Variables a t Charsets * * More cdcol informationjsehema mysql performaneeschema phpmyadmin test».lavas weoauth d Language» English (United Kingdom)» Server iocalhost vta TCP-1P Server version Protocol version 10 User root iocalhost MySQL charset UTF 3 Unicode (utffli Font size 52% [* & More settings Apache (Win32 -nod ssl OpenSSL'1 0 0e PHP'5 3 8 mod_peh/2 0 4 PerL'v MySQL chem version mysaind dev «Revision PHP extension mysql» Version information latest staole version Documentation Wiki Coninbvi Get support Lst of changes Εικόνα 19 Apache HTTP Η πρώτη του έκδοση, γνωστή ως NCSA HTTPd, δημιουργήθηκε από τον Robert McCool και κυκλοφόρησε το Θεωρείται ότι έπαιξε σημαντικό ρόλο στην αρχική επέκταση του παγκόσμιου ιστού. Ο Apache HTTP γνωστός και απλά σαν Apache είναι ένας εξυπηρετητής του παγκόσμιου ιστού (web). Όποτε ένας χρήστης επισκέπτεται ένα ιστότοπο το πρόγραμμα πλοήγησης (browser) επικοινωνεί με έναν διακομιστή (server) μέσω του πρωτοκόλλου HTTP, ο οποίος παράγει τις ιστοσελίδες και τις αποστέλλει στο πρόγραμμα πλοήγησης. Ο Apache είναι ένας από τους δημοφιλέστερους, εν μέρει γιατί λειτουργεί σε διάφορες πλατφόρμες όπως τα Windows, το Linux, το Unix και το Mac OS X. Συντηρείται τώρα από μια κοινότητα ανοικτού κώδικα με επιτήρηση από το Ίδρυμα Λογισμικού Apache (Apache Software Foundation). O Apache χρησιμοποιείται και σε τοπικά δίκτυα σαν διακομιστής συνεργαζόμενος με συστήματα διαχείρισης Βάσης Δεδομένων π.χ. Oracle, MySQL. 54

56 Υ λ ο π ο ίη σ η Η υλοποίηση του προγράμματος έγινε στο περιβάλλον του NetBeans και αποτελείται από κώδικα java και ΡΗΡ. Το πρόγραμμα αφορά ένα πρόγραμμα καταγραφής βλαβών σε μια βάση δεδομένων. Οι βλάβες μπορούν να καταχωρηθούν από τον αντίστοιχο Administrator (γραφικό περιβάλλον Java) ή από περιβάλλον Web (ΡΗΡ) που μπορεί να τις καταχωρίσει ο ίδιος ο χρήστης. Οι βλάβες μπορούν να ανατεθούν στον ανάλογο μηχανικό και υπάρχει η καταγραφή, χρόνου και ημερομηνίας (συστήματος PC), κατά την καταχώριση και διεκπεραίωση των βλαβών. Τέλος οι βλάβες αρχειοθετούνται ανάλογα με την σοβαρότητα τους κατά φθίνουσα σειρά με τον αλγόριθμο HeapSort. Στην παρακάτω εικόνα μπορούμε να δούμε το κεντρικό παράθυρο του προγράμματος από το οποίο οι διαχειριστές του συστήματος καταχωρούν και διαχωρίζονται τις βλάβες. Από εδώ μπορούν να καταχωρίσουν μια καινούρια βλάβη ή να δουν τον πίνακα βλαβών και να κλείσουν κάποια βλάβη αφού θα έχει ολοκληρωθεί. Εικόνα 20 55

57 Κορωναίος Γεώργιος, Περιγραφή και Ανάλυση Αλγορίθμου Ηθθρ5θΓΐ Στην παρακάτω εικόνα είναι το παράθυρο από το οποίο καταχωρούνται οι βλάβες από τον αρμόδιο διαχειριστεί. Δηλώνει το όνομα, το επώνυμο αυτού που έχει την βλάβη, ένα τηλέφωνο επικοινωνίας, την σοβαρότητα που έχει η βλάβη και μια σύντομη περιγραφή της. Τέλος την αναθέτει στον ανάλογο μηχανικό για την επίλυση της Εικόνα 21 56

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

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

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

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

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

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

Κεφάλαιο 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 Σωρός και Ταξινόμηση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Heapsort Using Multiple Heaps

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

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

Μάριος Αγγελίδης Ενότητες βιβλίου: 2.1, 2.3, 6.1 (εκτός ύλης αλλά χρειάζεται για την συνέχεια) Ώρες διδασκαλίας: 1

Μάριος Αγγελίδης Ενότητες βιβλίου: 2.1, 2.3, 6.1 (εκτός ύλης αλλά χρειάζεται για την συνέχεια) Ώρες διδασκαλίας: 1 Ενότητα 1 Ενότητες βιβλίου: 2.1, 2.3, 6.1 (εκτός ύλης αλλά χρειάζεται για την συνέχεια) Ώρες διδασκαλίας: 1 Τι είναι αλγόριθμος Σύμφωνα με το σχολικό βιβλίο: Ορισμός: Μια πεπερασμένη σειρά ενεργειών, αυστηρά

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

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

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

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

Αλγόριθμοι Ταξινόμησης 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 Ταξινόμηση (Φθίνουσα) Χωρίς Ταξινόμηση Ταξινόμηση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Πρόβλημα 29 / σελίδα 28

Πρόβλημα 29 / σελίδα 28 Πρόβλημα 29 / σελίδα 28 Πρόβλημα 30 / σελίδα 28 Αντιμετάθεση / σελίδα 10 Να γράψετε αλγόριθμο, οποίος θα διαβάζει τα περιεχόμενα δύο μεταβλητών Α και Β, στη συνέχεια να αντιμεταθέτει τα περιεχόμενά τους

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

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

Αλγόριθμοι Ταξινόμησης Μέρος 3 Αλγόριθμοι Ταξινόμησης Μέρος 3 Μανόλης Κουμπαράκης 1 Ταξινόμηση με Ουρά Προτεραιότητας Θα παρουσιάσουμε τώρα δύο αλγόριθμους ταξινόμησης που χρησιμοποιούν μια ουρά προτεραιότητας για την υλοποίηση τους.

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

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

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

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

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

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

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

Κεφάλαιο 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. Σωρός και Ταξινόµηση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ταξινόμηση με συγχώνευση 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 Διαίρει και Βασίλευε Η μέθοδος του «Διαίρει και Βασίλευε» είναι μια γενική αρχή σχεδιασμού αλγορίθμων

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

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος ΑΛΓΟΡΙΘΜΟΙ Στο σηµείωµα αυτό αρχικά εξηγείται η έννοια αλγόριθµος και παραθέτονται τα σπουδαιότερα κριτήρια που πρέπει να πληρεί κάθε αλγόριθµος. Στη συνέχεια, η σπουδαιότητα των αλγορίθµων συνδυάζεται

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

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

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

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

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

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του

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

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

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

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

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

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

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

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

Κεφάλαιο 5 Ανάλυση Αλγορίθμων Κεφάλαιο 5 Ανάλυση Αλγορίθμων 5.1 Επίδοση αλγορίθμων Τα πρωταρχικά ερωτήματα που προκύπτουν είναι: 1. πώς υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 2. πώς μπορούν να συγκριθούν μεταξύ τους οι διάφοροι

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. ΚΕΦΑΛΑΙΟ 2 Βασικές Έννοιες Αλγορίθμων

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. ΚΕΦΑΛΑΙΟ 2 Βασικές Έννοιες Αλγορίθμων Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΚΕΦΑΛΑΙΟ 2 Βασικές Έννοιες Αλγορίθμων 2.1 Τι είναι αλγόριθμος Ο όρος προέρχεται από μετάφραση του βιβλίο του Αμπού Αμπντουλάχ Μοχάμεντ Ιμπν Μούζα Αλ Χουαρίζμι

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

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

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

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

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

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

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

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας Περιεχόμενα 14.1 Διωνυμικά Δένδρα... 255 14.2 Διωνυμικές Ουρές... 258 14.1.1 Εισαγωγή στοιχείου σε διωνυμική ουρά... 258 14.1.2 Διαγραφή μεγίστου από διωνυμική

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

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

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

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

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

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

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

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1 Ανάλυση Αλγορίθμων Θέματα Θέματα: Ορθότητα Χρονική αποδοτικότητα Χωρική αποδοτικότητα Βελτιστότητα Προσεγγίσεις: Θεωρητική ανάλυση Εμπειρική ανάλυση Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1 Θεωρητική

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

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 5.1 Επίδοση αλγορίθμων Μέχρι τώρα έχουμε γνωρίσει διάφορους αλγόριθμους (αναζήτησης, ταξινόμησης, κ.α.). Στο σημείο αυτό θα παρουσιάσουμε ένα τρόπο εκτίμησης της επίδοσης (performance) η της αποδοτικότητας

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Ανάλυση - Απόδοση Αλγορίθμων Έλεγχος Αλγορίθμων. Απόδοση Προγραμμάτων. Χωρική/Χρονική Πολυπλοκότητα. Ασυμπτωτικός Συμβολισμός. Παραδείγματα. Αλγόριθμοι: Βασικές Έννοιες

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

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

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

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

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

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

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

Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος

Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό Η έννοια του προβλήματος Τι είναι πρόβλημα; ΠΡΟΒΛΗΜΑΤΑ ΟΡΙΣΜΟΣ ΠΡΟΒΛΗΜΑΤΟΣ Πρόβλημα είναι κάθε κατάσταση που μας απασχολεί και χρήζει αντιμετώπισης,

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

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

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

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

Κεφάλαιο 10 Ψηφιακά Λεξικά

Κεφάλαιο 10 Ψηφιακά Λεξικά Κεφάλαιο 10 Ψηφιακά Λεξικά Περιεχόμενα 10.1 Εισαγωγή... 213 10.2 Ψηφιακά Δένδρα... 214 10.3 Υλοποίηση σε Java... 222 10.4 Συμπιεσμένα και τριαδικά ψηφιακά δένδρα... 223 Ασκήσεις... 225 Βιβλιογραφία...

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

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

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

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

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

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

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

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

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

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

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

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

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη 0. Εισαγωγή Αντικείμενο μαθήματος: Η θεωρητική μελέτη ανάλυσης των αλγορίθμων. Στόχος: επιδόσεις των επαναληπτικών και αναδρομικών αλγορίθμων.

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

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

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

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

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

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

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

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

Δομές Δεδομένων & Αλγόριθμοι Θέματα Απόδοσης Αλγορίθμων 1 Η Ανάγκη για Δομές Δεδομένων Οι δομές δεδομένων οργανώνουν τα δεδομένα πιο αποδοτικά προγράμματα Πιο ισχυροί υπολογιστές πιο σύνθετες εφαρμογές Οι πιο σύνθετες εφαρμογές απαιτούν

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

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή ονάδα Δικτύων και Επικοινωνιών ΗΥ Τομέας Πληροφορικής, αθηματικών και Στατιστικής ΓΕΩΠΟΙΚΟ ΠΑΕΠΙΣΤΗΙΟ ΑΘΗΩ Εισαγωγή στην Επιστήμη των ΗΥ άθημα-4 url: http://openeclass.aua.gr (AOA0) Λογισμικό Υπολογιστή

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

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

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

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

Θέματα Προγραμματισμού Η/Υ

Θέματα Προγραμματισμού Η/Υ Πρόγραμμα Μεταπτυχιακών Σπουδών Πληροφορική και Υπολογιστική Βιοϊατρική Θέματα Προγραμματισμού Η/Υ Ενότητα 1: Εισαγωγή Θεματική Ενότητα: Εισαγωγή στον Προγραμματισμό ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ Θεματική

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 10: Ταξινόμηση Πίνακα Αναζήτηση σε Ταξινομημένο Πίνακα Πρόβλημα Δίνεται πίνακας t από Ν ακεραίους. Ζητούμενο: να ταξινομηθούν τα περιεχόμενα του πίνακα σε αύξουσα αριθμητική

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

5.1. Προσδοκώμενα αποτελέσματα

5.1. Προσδοκώμενα αποτελέσματα 5.1. Προσδοκώμενα αποτελέσματα Όταν θα έχεις ολοκληρώσει τη μελέτη αυτού του κεφαλαίου θα έχεις κατανοήσει τις τεχνικές ανάλυσης των αλγορίθμων, θα μπορείς να μετράς την επίδοση των αλγορίθμων με βάση

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

Ταξινόμηση κάδου και ταξινόμηση Ρίζας 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 (Ταξινόμηση Κάδου) - Αρχικά θεωρείται ένα κριτήριο κατανομής με βάση το οποίο

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

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

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

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

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

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

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

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

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

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

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

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

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

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

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης Σύνοψη Προηγούμενου Πίνακες (Arrays Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Διαδικαστικά θέματα. Aντικείμενο Μαθήματος. Aντικείμενα, Κλάσεις, Μέθοδοι, Μεταβλητές.

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

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

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

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

Ταχεία Ταξινόμηση 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

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

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ ) Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ. 25 48) Τι είναι αλγόριθμος; Γ ΛΥΚΕΙΟΥ Αλγόριθμος είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρονικό διάστημα,

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

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

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

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 21/10/2016

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

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

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

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