3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

Σχετικά έγγραφα
Αλγόριθμοι και Δομές Δεδομένων(Θ) Ευάγγελος Γ. Ούτσιος

Προγραµµατιστικές Τεχνικές

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

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

Προγραμματιστικές Τεχνικές

Επιµέλεια Θοδωρής Πιερράτος

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

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

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

Ταξινόμηση. 1. Ταξινόμηση με Εισαγωγή 2. Ταξινόμηση με Επιλογή. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Δομημένος Προγραμματισμός (ΤΛ1006)

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

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

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

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

Ενδεικτικές Ερωτήσεις Θεωρίας

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

Προγραμματιστικές Τεχνικές

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

Ταξινόμηση. 1. Γρήγορη ταξινόμηση 2. Ταξινόμηση με Συγχώνευση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

1. Η χειρότερη περίπτωση είναι όταν γίνου 10 επαναλήψεις, δηλαδή για n = 0.

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

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

Προγραμματιστικές Τεχνικές

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

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

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

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

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

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

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

Αναζήτηση και ταξινόμηση

i : 0<=i<N-1 => data[i] <= data[i+1] 25/10/2009

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

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

Bubble Hack Οπτικοποίηση του αλγορίθμου ταξινόμησης Bubble Sort στο Scratch

Αλγόριθμοι Αναζήτησης. (AeppAcademy.com)

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

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

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

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

ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

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

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

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

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

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

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

ΒΑΣΙΚΕΣ ΕΠΕΞΕΡΓΑΣΙΕΣ ΜΟΝΟΔΙΑΣΤΑΤΩΝ ΚΑΙ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ ΟΙ ΠΙΟ ΣΗΜΑΝΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ

ΠΡΟΣ: Τηλέφωνο: Ινστιτούτο Εκπαιδευτικής Πολιτικής ΚΟΙΝ.:

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΜΗΜΑ: Γ2-Γ3

ENOTHTA 3 ΟΜΕΣ Ε ΟΜΕΝΩΝ

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

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

242 -ΕισαγωγήστουςΗ/Υ

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Insert(K,I,S) Delete(K,S)

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει.

Προγραμματισμός Η/Υ. Αναζήτηση & Ταξινόμηση. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

ιαφάνειες παρουσίασης #4

Ορισµοί κεφαλαίου. Σηµαντικά σηµεία κεφαλαίου

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

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

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΡΤΙΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 6 (ΕΞΙ)

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

4.3. Γραµµικοί ταξινοµητές

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Κεφάλαια 2,7,8

ΗΥ-150. Ταξινόµηση και Αναζήτηση

Εισαγωγή στον δομημένο προγραμματισμό

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5

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

Β[(ι-7)*15+j] ON[ι,j] temp B[j-1] B[j-1] B[j] B[j] temp. j j+1

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Φροντιστήριο 2 ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

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

Εισαγωγή στους Αλγόριθμους

Transcript:

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ 3.1 ΑΝΑ ΡΟΜΗ 3.1.1 Εισαγωγή ΕΦΑΡΜΟΣΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Αναδροµή είναι η µέθοδος κατά την οποία, σε µία γλώσσα προγραµµατισµού, µία διαδικασία ή συνάρτηση έχει την δυνατότητα να καλεί τον εαυτό της. Η υλοποίηση της αναδροµής βασίζεται στη έννοια της στοίβας. Σε κάθε κλήση µίας υπορουτίνας πρέπει να φυλάγονται οι διευθύνσεις επιστροφής. Όταν µία υπορουτίνα καλεί τον εαυτό της θα πρέπει επίσης να φυλάγονται οι προηγούµενες τιµές των µεταβλητών και να χρησιµοποιούνται όταν τελειώσει η αναδροµική κλήση. Η χρήση της αναδροµής διευκολύνει πολύ τον προγραµµατιστή στην ανάπτυξη και τον έλεγχο ενός προγράµµατος. Θα πρέπει όµως να χρησιµοποιείται µε µέτρο, γιατί η εκτέλεση ενός αναδροµικού προγράµµατος έχει χρονικό κόστος. Γενικά, ανάµεσα σε ένα επαναληπτικό και ένα αναδροµικό πρόγραµµα θα πρέπει να προτιµάµε το πρώτο, εκτός και αν η ανάπτυξή του µας δυσκολεύει ιδιαίτερα. Η αναδροµή ενδείκνυται σε προβλήµατα κάποιας σχετικής πολυπλοκότητας, που εξ ορισµού τα εκφράζουµε αναδροµικά. 3.1.2 Υπολογισµός παραγοντικού Επαναληπτικός ορισµός: n! = 1*2*3*..(n-1)*n Συνάρτηση µε επανάληψη: nt factoral(nt n) nt,f; f = 1; for (=2; <=n; ++) f = f*; return f; Αναδροµικός ορισµός: n! = 1 αν n = 0, = n*(n-1)! αν n > 0 Αναδροµή Αναζήτηση - Ταξινόµηση 55

Συνάρτηση µε αναδροµή: nt factoral(nt n) nt f; f (n = = 0) f = 1; else f = n*factoral(n-1); return f; Ας παρακολουθήσουµε τις τιµές των µεταβλητών κατά την κλήση των δύο συναρτήσεων, π.χ. για n = 4: Επαναληπτική µέθοδος: f = 1 = 2 f = 1*2 = 2 = 3 f = 2*3 = 6 = 4 f = 6*4 = 24 Αναδροµική µέθοδος: factoral(4) = 4*factoral(3) factoral(3) = 3*factoral(2) factoral(2) = 2*factoral(1) factoral(1) = 1*factoral(0) factoral(0) = 1 Ακολούθως, η τελευταία τιµή 1 µεταβιβάζεται στην προηγούµενη κλήση και έτσι υπολογίζεται το factoral(1) = 1. Κατά τον ίδιο τρόπο έχουµε: Αναδροµή Αναζήτηση - Ταξινόµηση 56

factoral(2) = 2*1 = 2 factoral(3) = 3*2 = 6 factoral(4) = 4*6 = 24 3.1.3 Υπολογισµός δύναµης Επαναληπτικός ορισµός: x n = x*x*x*..*x, n φορές Συνάρτηση µε επανάληψη: nt power(nt x, nt n) nt,p; p = 1; for (=1; <=n; ++) p = p*x; return p; Αναδροµικός ορισµός: x n = 1 αν n = 0, = x* x n-1 αν n > 0 Συνάρτηση µε αναδροµή: nt power(nt x, nt n) nt p; f (n = = 0) p = 1; else p = x*power(x,n-1); return p; Αναδροµή Αναζήτηση - Ταξινόµηση 57

3.2 ΑΝΑΖΗΤΗΣΗ 3.2.1 Εισαγωγή Αναζήτηση (searchng) είναι η διεργασία της εύρεσης κάποιας συγκεκριµένης τιµής ανάµεσα από ένα σύνολο τιµών. Το πρόβληµα της αναζήτησης είναι ένα από τα πιο ενδιαφέροντα προβλήµατα της Επιστήµης των Υπολογιστών λόγω της µεγάλης πρακτικότητάς του. Το πρόβληµα γίνεται ακόµα πιο ενδιαφέρον αν ληφθεί υπόψη η µεγάλη ποικιλία των χαρακτηριστικών της δοµής όπου αποθηκεύονται τα δεδοµένα (π.χ. στατική ή δυναµική, τρόπος οργάνωσης, µέσο αποθήκευσης, κλπ.). Στη συνέχεια θα εξετασθούν δύο από τις πιο γνωστές µέθοδοι αναζήτησης πινάκων: Σειριακή αναζήτηση (Sequental search) υαδική αναζήτηση (Bnary search) 3.2.2 Σειριακή Αναζήτηση Η πιο απλή µέθοδος αναζήτησης ενός στοιχείου σε ένα πίνακα είναι η σειριακή αναζήτηση. Γίνεται προσπέλαση των στοιχείων του πίνακα από την πρώτη θέση µέχρι την τελευταία. Κάθε φορά ελέγχεται το στοιχείο της τρέχουσας θέσης αν είναι το ζητούµενο, οπότε και τελειώνει η αναζήτηση. Αν προσπελασθεί όλος ο πίνακας και δεν βρεθεί το ζητούµενο στοιχείο, τότε η αναζήτηση θεωρείται ανεπιτυχής. Παρακάτω δίνεται ο αλγόριθµος (σε ψευδοκώδικα) για τη σειριακή αναζήτηση, µε δύο διαφορετικούς τρόπους, έναν επαναληπτικό και ένα αναδροµικό. Επαναληπτική έκδοση: Αλγόριθµος Σειριακή_αναζήτηση_1 εδοµένα p[n],, key, found, poston found = false poston = -1 = 0 ΟΣΟ (found = = false ) ΚΑΙ ( <= N) AN p[] = = key TOTE found = true poston = = +1 Αναδροµή Αναζήτηση - Ταξινόµηση 58

ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ AN found = = true ΤΟΤΕ ΕΜΦΑΝΙΣΕ poston ΕΜΦΑΝΙΣΕ εν υπάρχει ΤΕΛΟΣ Σειριακή_αναζήτηση_1 Αναδροµική έκδοση: Αλγόριθµος Σειριακή_αναζήτηση_2 εδοµένα p[n],, key, found, poston ΑΝ > N ΤΟΤΕ found = false ΑN p[] = = key TOTE found = true poston = = +1 Σειριακή_αναζήτηση_2(p,key,found,poston) ΤΕΛΟΣ Σειριακή_αναζήτηση_2 AN found = = true ΤΟΤΕ ΕΜΦΑΝΙΣΕ poston ΕΜΦΑΝΙΣΕ εν υπάρχει 3.2.3 υαδική Αναζήτηση Όταν τα στοιχεία του πίνακα είναι ταξινοµηµένα, τότε είναι δυνατόν να επιταχυνθεί η διαδικασία αναζήτησης, εφαρµόζοντας επιλεκτικά και όχι σειριακά την αναζήτηση. Η µέθοδος που περιγράφεται παρακάτω είναι η πιο γνωστή σε αυτή την κατηγορία. Πιο συγκεκριµένα, συγκρίνεται η τιµή του ζητούµενου στοιχείου µε το µεσαίο στοιχείο του πίνακα. Αν είναι ίσα, τότε η αναζήτηση έχει τελειώσει. Αν όχι, τότε µπορεί ο µισός πίνακας να εξαιρεθεί από τις επόµενες αναζητήσεις γιατί αποκλείεται να περιέχει το ζητούµενο στοιχείο, εφόσον αυτός είναι ταξινοµηµένος. Η διαδικασία αυτή Αναδροµή Αναζήτηση - Ταξινόµηση 59

επαναλαµβάνεται µέχρις ότου βρεθεί το στοιχείο ή διαπιστωθεί ότι δεν υπάρχει. Η µέθοδος αυτή είναι η δυαδική. Είναι φανερό ότι µε τη µέθοδο αυτή µετά από κάθε σύγκριση το µέγεθος του πίνακα που θα ανιχνευθεί στη συνέχεια είναι το ½, ¼,... του αρχικού µεγέθους. Η µέγιστη τιµή των απαιτούµενων συγκρίσεων δίνεται από τη σχέση: Μέγιστη τιµή απαιτούµενων συγκρίσεων = log2n Το πλεονέκτηµα της µεθόδου αυτής είναι ότι είναι πολύ σταθερή, δηλαδή συνήθως η επίδοση είναι πολύ κοντά στη µέση τιµή των συγκρίσεων. Το µειονέκτηµα είναι ότι ο πίνακας πρέπει να είναι ταξινοµηµένος. Παρακάτω δίνεται ο αλγόριθµος (σε ψευδοκώδικα) για τη δυαδική αναζήτηση, επίσης µε δύο διαφορετικούς τρόπους, έναν επαναληπτικό και ένα αναδροµικό. Επαναληπτική έκδοση: Αλγόριθµος υαδική_αναζήτηση_1 εδοµένα p[n], md, left, rght, key, found, poston found = false poston = -1 left = 0 rght = N-1 ΟΣΟ (found = = false ) ΚΑΙ (left <= rght) md = (left+rght) / 2 AN key = = p[md] TOTE found = true poston = md AN key < p[md] TOTE AΛΛΙΩΣ ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ AN found = = true ΤΟΤΕ ΕΜΦΑΝΙΣΕ poston rght = md-1 left = md+1 ΕΜΦΑΝΙΣΕ εν υπάρχει ΤΕΛΟΣ υαδική_αναζήτηση_1 Αναδροµή Αναζήτηση - Ταξινόµηση 60

Αναδροµική έκδοση: Αλγόριθµος υαδική_αναζήτηση_2 εδοµένα p[n], md, left, rght, key, found, poston ΑΝ left > rght ΤΟΤΕ found = false ΑN p[] = = key TOTE found = true poston = = +1 υαδική_αναζήτηση_2(p,key,found,poston) ΤΕΛΟΣ υαδική_αναζήτηση_2 AN found = = true ΤΟΤΕ ΕΜΦΑΝΙΣΕ poston ΕΜΦΑΝΙΣΕ εν υπάρχει Αριθµός συγκρίσεων µε υαδική Αναζήτηση: Στοιχεία Ν Συγκρίσεις 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 10000000 24 100000000 27 1000000000 30 Αναδροµή Αναζήτηση - Ταξινόµηση 61

3.3 ΤΑΞΙΝΟΜΗΣΗ 3.3.1 Εισαγωγή Ταξινόµηση είναι η διαδικασία της τοποθέτησης ενός συνόλου στοιχείων σε µία ιδιαίτερη σειρά. Η σειρά αυτή είναι συνήθως αύξουσα (ascendng) ή φθίνουσα (descendng). Σκοπός της ταξινόµησης είναι η διευκόλυνση της αναζήτησης στοιχείων του ταξινοµηµένου συνόλου. Η χρησιµότητα της ταξινόµησης φαίνεται στην πράξη σε περιπτώσεις αναζήτησης σε τηλεφωνικούς καταλόγους, σε βιβλιοθήκες, σε λεξικά, σε διάφορες δηµόσιες υπηρεσίες και οργανισµούς και γενικά παντού όπου υπάρχουν αποθηκευµένα δεδοµένα και πρέπει να αναζητηθούν και να βρεθούν. Το θέµα της ταξινόµησης παρουσιάζει µεγάλο ενδιαφέρον και έχουν αναπτυχθεί αρκετοί αλγόριθµοι ταξινόµησης. Στο κεφάλαιο αυτό θα περιγραφούν κάποιοι απ αυτούς. Επίσης, θα πρέπει να λαµβάνεται υπόψη: Η επιλογή µίας συγκεκριµένης δοµής δεδοµένων επηρεάζει τους αλγορίθµους που εκτελούν ένα έργο. Η επιλογή ενός αλγορίθµου είναι µία δύσκολη διαδικασία που µπορεί να διευκολυνθεί µε την ανάλυση της επίδοσης τους (performance analyss). Υπάρχει µία θεωρητικά βέλτιστη επίδοση που κανείς αλγόριθµος ταξινόµησης δεν µπορεί να ξεπεράσει. 3.3.2 Ταξινόµηση µε Απευθείας Επιλογή (straght selecton) Η µέθοδος έχει ως εξής: Επιλέγουµε το µικρότερο στοιχείο Το ανταλλάσσουµε µε το πρώτο στοιχείο Επαναλαµβάνουµε για τα υπόλοιπα στοιχεία, µέχρι να µείνει ένα Π.χ. 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 12 55 42 94 18 44 67 06 12 18 42 94 55 44 67 06 12 18 42 94 55 44 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Αναδροµή Αναζήτηση - Ταξινόµηση 62

Ο αλγόριθµος σε C: for (=0; <N-1; ++) k = ; mn = p[]; for ( = +1; <N; ++) f (p[] < mn) k = ; mn = p[]; p[k] = p[] ; p[] = mn; 3.3.3 Ταξινόµηση µε Απευθείας Εισαγωγή (straght nserton) Η µέθοδος είναι πολύ δηµοφιλής στους χαρτοπαίχτες και έχει ως εξής: Κάθε στοιχείο, ξεκινώντας από το δεύτερο, τοποθετείται στη σωστή του θέση µετακινώντας, αν χρειαστεί, τα στοιχεία δεξιά του κατά µία θέση. Π.χ. 44 55 12 42 94 18 06 67 44 55 12 42 94 18 06 67 12 44 55 42 94 18 06 67 12 42 44 55 94 48 06 67 12 42 44 55 94 18 06 67 12 18 42 44 55 94 06 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Αναδροµή Αναζήτηση - Ταξινόµηση 63

Ο αλγόριθµος σε C: for (=2; <=N; ++) x = p[]; p[0] = x; = -1; whle (x < p[]) p[+1] = p[] ; = -1 ; p[+1] = x ; 3.3.4 Ταξινόµηση Φυσαλίδας (bubble sort) Ο αλγόριθµος βασίζεται στην αρχή της σύγκρισης και ανταλλαγής ζευγών από γειτονικά στοιχεία, µέχρις ότου ταξινοµηθούν όλα τα στοιχεία. Κάθε φορά µετακινείται το µικρότερο στοιχείο της ακολουθίας προς το αριστερό άκρο. Π.χ. 44 55 12 42 94 18 06 67 06 44 55 12 42 94 18 67 06 12 44 55 18 42 94 67 06 12 18 44 55 42 67 94 06 12 18 42 44 55 67 94 06 12 18 42 44 55 67 94 06 12 18 42 44 55 67 94 06 12 18 42 44 55 67 94 Αναδροµή Αναζήτηση - Ταξινόµηση 64

Ο αλγόριθµος σε C: for (=1; <N; ++) for (=N-1; >=; --) f (p[-1] > p[]) temp = p[-1]; p[-1] = p[] ; p[] = temp ; 3.3.5 Γρήγορη Ταξινόµηση (Quck Sort) Ο αλγόριθµος βασίζεται στην αρχή της αντιµετάθεσης και είναι η καλύτερη γνωστή µέθοδος ταξινόµησης για τυχαία στοιχεία. Η γρήγορη ταξινόµηση στηρίζεται στην παρατήρηση ότι είναι προτιµότερο οι αντιµεταθέσεις να γίνονται µεταξύ αποµακρυσµένων στοιχείων. Στην αρχή λαµβάνεται το πρώτο στοιχείο του πίνακα και µετακινείται στη θέση όπου τελικά θα αποθηκευτεί στο ταξινοµηµένο διάνυσµα. Μετά τον προσδιορισµό της τελικής αυτής θέσης, γίνεται αναδιάταξη των υπόλοιπων στοιχείων έτσι ώστε να µην υπάρχει κανένα µικρότερο στοιχείο προς τα αριστερά του και κανένα µεγαλύτερο στοιχείο προς τα δεξιά του. Έτσι, το πρώτο αυτό στοιχείο παίζει το ρόλο του άξονα (pvot) και ο πίνακας έχει διαµεριστεί κατά τέτοιο τρόπο ώστε το αρχικό πρόβληµα έχει αναχθεί σε δύο απλούστερα προβλήµατα, στην ανεξάρτητη δηλαδή ταξινόµηση των δύο υποπινάκων. Μετά τον διαµερισµό του πίνακα, η ίδια διαδικασία εφαρµόζεται στους δύο υποπίνακες, ύστερα στους υποπίνακες των υποπινάκων, κοκ., µέχρις ότου ο κάθε υποπίνακας να αποτελείται από ένα µόνο στοιχείο. Στο σηµείο αυτό ο αρχικός πίνακας έχει ταξινοµηθεί. Π.χ. Αναδροµή Αναζήτηση - Ταξινόµηση 65

36 47 18 59 32 73 41 27 51 x 27 47 18 59 32 73 41 36 51 27 32 18 59 47 73 41 36 51 27 18 32 59 47 73 41 36 51 [27 18] 32 [59 47 73 41 36 51] 18 27 59 47 51 41 36 73 18 27 [59 47 51 41 36] 73 36 47 51 41 59 36 47 41 51 59 [36 47 41] 51 36 41 47 [36 41] 47 36 41 Αναδροµή Αναζήτηση - Ταξινόµηση 66

Ο αλγόριθµος σε C: f (left < rght) = left; = rght; md = (left+rght)/2; x = p[md]; whle ( < ) whle (p[] < x) ++; whle (p[] > x) --; f ( < ) temp = p[]; p[] = p[]; p[] = temp; qucksort(left,-1,p); qucksort(+1,rght,p); Αναδροµή Αναζήτηση - Ταξινόµηση 67

3.4 ΑΝΑΦΟΡΕΣ Ευάγγελος Ούτσιος, ΑΛΓΟΡΙΘΜΟΙ & ΟΜΕΣ Ε ΟΜΕΝΩΝ, Σηµειώσεις Θεωρίας, Τµήµα Πληροφορικής & Επικοινωνιών, ΤΕΙ Σερρών, 2003. Αναδροµή Αναζήτηση - Ταξινόµηση 68