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

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

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

Γλώσσες Προγραμματισμού

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

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

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

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

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

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

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

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

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

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

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

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

Προγραμματισμός Υπολογιστών

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

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

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

Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2012

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

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

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

Πανεπιστήμιο Ιωαννίνων Τμήμα Μηχανικών Η/Υ και Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2013

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

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

Α.1 Τι γνωρίζετε για τον διερμηνευτή, τον μεταγλωττιστή και ποιες οι διαφορές τους. 15 ΜΟΝΑΔΕΣ

Συνδετικότητα γραφήματος (graph connectivity)

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

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

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

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

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

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

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

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

Διορθώσεις σελ

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

ΣΧΟΛΙΑ 1 ΗΣ ΕΡΓΑΣΙΑΣ. 15 Μαΐου 2013

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

Πρόλογος. if (παράσταση) εντολή1 else εντολή2. Από εδώ και πέρα θα αναφέρεται ως K&R.

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Transcript:

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

Περιεχόμενα Αναζήτηση (searching): εύρεση ενός στοιχείου σε έναν πίνακα Ταξινόμηση (sorting): αναδιάταξη των στοιχείων ενός πίνακα ώστε να είναι τοποθετημένα με μια καθορισμένη σειρά Η αναζήτηση και η ταξινόμηση έχουν ιδιαίτερη σημασία στον προγραμματισμό αποτελούν συχνά χρησιμοποιούμενες προγραμματιστικές τεχνικές αποτελούν καλά παραδείγματα προβλημάτων για τα οποία υπάρχουν αλγόριθμοι με διαφορετική απόδοση

Παράδειγμα αναζήτησης Αναζήτηση του πρώτου φωνήεντος σε ένα αλφαριθμητικό int FindFirstVowel(string word) { int i; for (i = 0; i < StringLength(word); i++) { if (IsVowel(IthChar(word, i))) return (i); return (-1); Για τις επισημασμένες συναρτήσεις δείτε το κεφ. 9.

Αναζήτηση σε πίνακα ακεραίων Η συνάρτηση αναζήτησης int FindIntegerInArray(int key, int array[], int n) { int i; for (i = 0; i < n; i++) { if (key == array[i]) return (i); return (-1);

Παράλληλοι πίνακες coinvalues coinnames 0 1 2 3 4 lepto 1 dilepto 2 pentalepto 5 dekalepto 10 eikosaletpo 20 0 1 2 3 4 lepto dilepto pentalepto dekalepto eikosaletpo Οι πίνακες στους οποίους χρησιμοποιούνται αντίστοιχοι αριθμοδείκτες θέσης για την αποθήκευση συσχετιζόμενων τιμών ονομάζονται παράλληλοι πίνακες.

Παράδειγμα με χρήση παράλληλων πινάκων findcoin.c Το πρόγραμμα δέχεται ως είσοδο την αξία ενός νομίσματος και επιστρέφει το όνομά του.

Ένα δεύτερο παράδειγμα Ένα πρόγραμμα το οποίο διαβάζει τα ονόματα δύο πόλεων επιστρέφει την (απευθείας) απόσταση μεταξύ τους Το πρόγραμμα χρησιμοποιεί έναν δισδιάστατο πίνακα με τις αποστάσεις μεταξύ των πόλεων Το πρόγραμμα χρησιμοποιεί έναν μονοδιάστατο πίνακα με τα ονόματα των πόλεων

Ο κώδικας του προγράμματος Το πρόγραμμα υπολογισμού αποστάσεων πόλεων

Γραμμική αναζήτηση Αλγόριθμος γραμμικής αναζήτησης Η αναζήτηση ξεκινά από την αρχή του πίνακα και διατρέχονται όλα του τα στοιχεία με τη σειρά, μέχρι να διαπιστωθεί ταύτιση ή να φτάσουμε στο τέλος του πίνακα. Ο αριθμός των βημάτων εκτέλεσης του αλγορίθμου (συγκρίσεων) είναι ανάλογος του μεγέθους του πίνακα.

Δυαδική αναζήτηση Θεωρούμε ότι ο πίνακας είναι ταξινομημένος 0 1 2 3 4 5 6 7 8 9 10 11 1 12 32 41 42 63 84 96 123 221 228 246 Αναζήτηση του 221

Συνάρτηση που υλοποιεί τη δυαδική αναζήτηση static int FindStringInSortedArray(string key, string array[], int n) { int lh, rh, mid, cmp; lh = 0; rh = n - 1; while (lh <= rh) { mid = (lh + rh) / 2; cmp = StringCompare(key, array[mid]); if (cmp == 0) return (mid); if (cmp < 0) { rh = mid - 1; else { lh = mid + 1; return (-1);

Αποδοτικότητα του αλγορίθμου αναζήτησης Έστω πίνακας με N στοιχεία Μετά την πρώτη σύγκριση η αναζήτηση θα συνεχιστεί σε N/2 στοιχεία Αν k είναι ο αριθμός των βημάτων μέχρι να τελειώσει η αναζήτηση N = 2 k Άρα k = log 2 N

Σύγκριση γραμμικής και δυαδικής αναζήτησης Ν 10 3 100 7 log 2 N 1000 10 1.000.000 20 1.000.000.000 30

Ταξινόμηση Η διάταξη μιας λίστας τιμών (συνήθως σε μορφή πίνακα) σε μια καθορισμένη σειρά. Παράδειγμα: Ταξινόμηση ακεραίων 12 4 24 1 43 32 11 31 42 0 1 2 3 4 5 6 7 8 1 4 11 12 24 31 32 42 43 0 1 2 3 4 5 6 7 8

Μια συνάρτηση ταξινόμησης ακεραίων void SortIntegerArray(int array[],int n); Μετά την εκτέλεση της παραπάνω συνάρτησης τα στοιχεία του πίνακα array μεγέθους n θα είναι ταξινομημένα

Αλγόριθμος ταξινόμησης με επιλογή Υπάρχει μια ποικιλία αλγορίθμων ταξινόμησης Θα παρουσιάσουμε έναν από τους απλούστερους: τον αλγόριθμο ταξινόμησης με επιλογή (selection sort).

Ταξινόμηση με επιλογή: περιγραφή του αλγορίθμου 1. Βρίσκουμε το μικρότερο στοιχείο του πίνακα 2. μετακινούμε το στοιχείο αυτό στην αριστερότερη θέση του πίνακα 3. επαναλαμβάνουμε τα βήματα 1 και 2 για τα υπόλοιπα στοιχεία του πίνακα

Ταξινόμηση με επιλογή: Παράδειγμα εκτέλεσης 12 4 24 1 43 32 11 31 42 0 1 2 3 4 5 6 7 8 1 4 24 12 43 32 11 31 42 1 4 24 12 43 32 11 31 42 1 4 11 12 43 32 24 31 42... 1 4 11 12 24 31 32 42 43

Η παραπάνω διεργασία περιγράφεται από τον ψευδοκώδικα for (κάθε αριθμοδείκτη θέσης lh του πίνακα) { Αποθήκευσε στην rh τον αριθμοδείκτη της μικρότερης τιμής μεταξύ lh και του τέλους της λίστας Αντιμετάθεσε τα στοιχεία με αριθμοδείκτες θέσης lh και rh

Υποπροβλήματα Η παραπάνω διαδικασία εισάγει δύο υποπροβλήματα: Την εύρεση της θέσης του μικρότερου στοιχείου ενός πίνακα μεταξύ δυο προκαθορισμένων θέσεων int FindSmallestInteger(int array[], int low, int high); Την αντιμετάθεση δύο στοιχείων του πίνακα void SwapIntegerElements(int array[], int low, int high); (Γνωστή από το κεφ. 11).

Η συνάρτηση FindSmallestInteger static int FindSmallestInteger(int array[], int low, int high) { int i,spos; spos = low; for (i = low; i <= high; i++) { if (array[i] < array[spos]) spos = i; return (spos);

Η συνάρτηση SwapIntegerElements static void SwapIntegerElements(int array[], int p1, int p2) { int tmp; tmp = array[p1]; array[p1] = array[p2]; array[p2] = tmp;

Η συνάρτηση ταξινόμησης void SortIntegerArray(int array[], int n) { int lh, rh; for (lh = 0; lh < n; lh++) { rh = FindSmallestInteger(array, lh, n-1); SwapIntegerElements(array, lh, rh);

Ανάλυση του αλγορίθμου ταξινόμησης με επιλογή Έστω ταξινόμηση πίνακα μεγέθους N Κατά την ταξινόμηση με επιλογή απαιτούνται N + (N-1) +...+ 1 βήματα Ισχύει N 1 Ν Ν 1 Ν 2.. 3 2 1= i=0 N i = N 2 N 2 Αλγόριθμοι που εκτελούνται με τέτοιο αριθμό βημάτων ονομάζονται τετραγωνικοί και δεν είναι αποδοτικοί για μεγάλες τιμές του N