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

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

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

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

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

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

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

Εισαγωγή στην πληροφορική

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

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

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

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

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

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

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

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

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

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

Εισαγωγή στην πληροφορική

Περιγραφή αλγορίθµων. ιαγράµµατα ροής

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

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

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

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

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

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

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

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

Εισαγωγή στην πληροφορική

Εργαστήριο 2: Πίνακες

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

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

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

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

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

Εισαγωγή στην πληροφορική

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

Εισαγωγή στην πληροφορική

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

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

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

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

Εισαγωγή στην πληροφορική

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

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

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

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

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

Εισαγωγή στην πληροφορική

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

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

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

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

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

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

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

Εισαγωγή στην πληροφορική

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

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

Αναδρομικοί Αλγόριθμοι

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

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

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

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

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

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

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

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

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

1η Σειρά Γραπτών Ασκήσεων

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

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

17. Εισαγωγή σε αριθμητικές μεθόδους για μηχανικούς και αλγορίθμους

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Μεταγλωττιστές Βελτιστοποίηση

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

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

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

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

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

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

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

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόμων Τοπογράφων Μηχανικών Προγραμματιστικές Τεχνικές Βασίλειος Βεσκούκης Δρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ Επικ. Καθηγητής ΕΜΠ v.vescoukis@cs.ntua.gr Αστροφυσικός Καθηγητής ΕΜΠ romylos@survey.ntua.gr Αναδρομή Εφαρμογές αλγορίθμων ταξινόμησης και αναζήτησης σε μεγάλους πίνακες

Αναδρομή Αναδρομή είναι η ικανότητα μιας συνάρτησης να καλεί τον εαυτό της. Γιατί η αναδρομή είναι χρήσιμη; Η νέα κλήση της συνάρτησης αναφέρεται σε μια απλούστερη κατάσταση. Πότε τερματίζεται η αναδρομή; Όταν ο υπολογισμός που απαιτείται είναι τόσο απλός που γίνεται με ανάθεση τιμής (συνήθως κάποια αρχική τιμή) ή όταν ικανοποιείται κάποια συνθήκη Μια αναδρομική συνάρτηση έχει δύο τμήματα: 1. Μια κλήση του εαυτού της με απλούστερες παραμέτρους 2. Ένα τμήμα ελέγχου, που τερματίζει την αναδρομική κλήση όταν ικανοποιείται η συνθήκη. Δρ. Ρωμύλος Βασίλειος Κορακίτης Βεσκούκης

Αναδρομή - Παράδειγμα 1 : Επίδειξη αρίθμησης Να σχεδιαστεί και να γραφεί μια αναδρομική συνάρτηση που θα εμφανίζει στην οθόνη τους ακεραίους k = 1 ως n, κατά αύξουσα ή φθίνουσα διάταξη Δεδομένα εισόδου: ο ακέραιος n Απλούστερη συνθήκη : k = 0 Αύξουσα διάταξη: ΑΛΓΟΡΙΘΜΟΣ - Κώδικας C++ void recursu(int k) { } if (k>0) { recursu(k-1); cout<<k<<endl; }

Αναδρομή - Παράδειγμα 2a : Παραγοντικό Να σχεδιαστεί και να γραφεί μια αναδρομική συνάρτηση που θα υπολογίζει το παραγοντικό ενός ακεραίου αριθμού. Δεδομένα εισόδου: ο ακέραιος n Δεδομένα εξόδου: η τιμή του n! Τύπος υπολογισμού : n! = 1 2 3 n Αναδρομικός τύπος : n! = n (n-1)! Απλούστερη συνθήκη : 0! = 1 ΑΛΓΟΡΙΘΜΟΣ - Κώδικας C++ long int Factorial(long int n) { if (n==0) return 1; else return (n*factorial(n-1)); }

Αναδρομή - Παράδειγμα 2b : Μέγιστος κοινός διαιρέτης Να σχεδιαστεί και να γραφεί μια αναδρομική συνάρτηση που θα υπολογίζει τον μέγιστο κοινό διαιρέτη δύο ακεραίων m και n. ΑΛΓΟΡΙΘΜΟΣ 1 (Ευκλείδιος) (m > n) - Κώδικας C++ int gcd(int m, int n) { if (n==0) return m; else return gcd(n,m MOD n); } ΑΛΓΟΡΙΘΜΟΣ 2 (Dijkstra) - Κώδικας C++ int gcd(int m, int n) { if (m==n) return m; else if (m>n) return gcd(m-n,n); else return gcd(m,n-m); }

Ταξινόμηση (sort) Μια από τις πιο συνηθισμένες και σημαντικές διαδικασίες επεξεργασίας δεδομένων είναι η ταξινόμηση μιας σειράς (λίστας) ομοειδών δεδομένων, αριθμητικών ή αλφαριθμητικών. Ταξινόμηση (sorting) είναι η διαδικασία μετατροπής μιας λίστας στοιχείων (ενός πίνακα) σε μια ισοδύναμη λίστα όπου τα στοιχεία είναι τοποθετημένα κατά σειρά, αύξουσα ή φθίνουσα, σύμφωνα με την τιμή τους. Δηλαδή, αν η ταξινομημένη λίστα είναι καταχωρημένη στον πίνακα Α[Ν] ισχύει: Α[0] <= Α[1] <= Α[2] <= <= Α[Ν 2] <= Α[Ν 1] Πολλές μέθοδοι (αλγόριθμοι) έχουν προταθεί για την ταξινόμηση των στοιχείων ενός πίνακα. Βέβαια, οι απλούστεροι αλγόριθμοι είναι λιγότερο αποδοτικοί από τους πιο πολύπλοκους, κάτι που έχει σημασία όταν το μέγεθος του πίνακα είναι πολύ μεγάλο.

Αναδρομή - Παράδειγμα 3 : Ταξινόμηση Quicksort Επιζητούμε αύξουσα ταξινόμηση του πίνακα Α[Ν]. Η λειτουργία του αλγορίθμου αυτού στηρίζεται στην αναδρομή: ο πίνακας χωρίζεται σε τμήματα και ο αλγόριθμος καλεί τον εαυτό του στα μικρότερα τμήματα. Τα βασικά βήματα του αλγορίθμου είναι: 1. Αρχικά επιλέγεται ως οδηγός ένα τυχαίο στοιχείο του πίνακα (πχ το πρώτο) και μετρώνται πόσα στοιχεία του Α είναι μικρότερα από αυτό. Έστω Χ ο αριθμός αυτός. 2. Το οδηγό στοιχείο ανταλλάσσει την θέση του με το στοιχείο Α[Χ]. Ο αρχικός πίνακας Α έχει έτσι χωριστεί σε 3 τμήματα: Κάτω υποπίνακας, με στοιχεία Α[0] ως Α[Χ-1] Το οδηγό στοιχείο Α[Χ], που βρίσκεται στην σωστή τελική του θέση Πάνω υποπίνακας, με στοιχεία Α[Χ+1] ως Α[Ν-1]

Αναδρομή - Παράδειγμα 3 : Ταξινόμηση Quicksort 3. Επειδή υπάρχει ένας αριθμός στοιχείων του κάτω υποπίνακα που πρέπει να μεταφερθούν στον πάνω υποπίνακα και αντίστροφα, γίνεται αυτή η εναλλαγή των στοιχείων με την βοήθεια δύο δεικτών που διατρέχουν τους υποπίνακες με αντίστροφη φορά. 4. Τώρα, όλα τα στοιχεία του κάτω υποπίνακα είναι μικρότερα από το οδηγό στοιχείο και, αντίστοιχα, όλα τα στοιχεία του πάνω υποπίνακα είναι μεγαλύτερα από αυτό. Ο αλγόριθμος καλεί τον εαυτό του, χωριστά στον κάτω και στον πάνω υποπίνακα. 5. Ο αλγόριθμος τερματίζεται όταν και οι δύο υποπίνακες της τελευταίας αναδρομής είναι κενοί, οπότε ανασυγκροτείται ο αρχικός πίνακας, που είναι τώρα ταξινομημένος. Υπάρχουν διάφορες παραλλαγές στην υλοποίηση του αλγόριθμου QuickSort. Στον ακόλουθο κώδικα γίνονται πρώτα οι αναδρομικές κλήσεις για τους κάτω υποπίνακες και μετά για τους άνω.

Αναδρομή - Παράδειγμα 3 : Ταξινόμηση Quicksort void quicksort(float arr[],int low, int high) { int i, j; float temp; while (high>low) { i=low; j=high; temp=arr[low]; while (i<j) { while (arr[j]>temp) j=j-1; arr[i]=arr[j]; while ((i<j) && (arr[i]<=temp)) i=i+1; arr[j]=arr[i]; } arr[i]=temp; quicksort(arr,low,i-1); low=i+1; } }

Δυαδική αναζήτηση (Binary search) Αναζητούμε την τιμή key, αν υπάρχει, στα στοιχεία του ταξινομημένου πίνακα Α[Ν] Ο αλγόριθμος αυτός στηρίζεται στην διαδοχική αναζήτηση της τιμής κλειδί key σε υποπίνακες, που ο καθένας έχει εύρος μισό από τον προηγούμενο. Όπως και στην γραμμική αναζήτηση, χρησιμοποιείται μια ακέραια μεταβλητή (π.χ. Κ) για την καταχώρηση της θέσης (δείκτη) του στοιχείου του πίνακα που αναζητείται. Σε κάθε υποπίνακα γίνεται σύγκριση του key με το μεσαίο στοιχείο του υποπίνακα. Αν υπάρχει ταύτιση τιμών, η αναζήτηση είναι επιτυχής, καταχωρείται ο δείκτης του στοιχείου στην Κ και ο αλγόριθμος τερματίζει. Αν το μεσαίο στοιχείο έχει τιμή μεγαλύτερη από το key, αυτό σημαίνει ότι το ζητούμενο στοιχείο είναι δυνατόν να βρίσκεται στον πρώτο μισό υποπίνακα (με τιμές μικρότερες του μεσαίου στοιχείου). Αναπροσαρμόζονται τα όρια του υποπίνακα και η αναζήτηση επαναλαμβάνεται στον νέο υποπίνακα, που έχει μέγεθος μισό από τον προηγούμενο. Αντίστοιχα, αν το μεσαίο στοιχείο έχει τιμή μικρότερη από το key, αυτό σημαίνει ότι το ζητούμενο στοιχείο είναι δυνατόν να βρίσκεται στον δεύτερο μισό υποπίνακα (με τιμές μεγαλύτερες του μεσαίου στοιχείου). Αναπροσαρμόζονται τα όρια του υποπίνακα και η αναζήτηση επαναλαμβάνεται στον νέο υποπίνακα. Μετά τον τερματισμό του αλγορίθμου, αν Κ = 1, τότε η τιμή key ΔΕΝ υπάρχει στον πίνακα. Αλλιώς, η τιμή του Κ δηλώνει το πρώτο στοιχείο του πίνακα που έχει τιμή key.