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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δομές στην C (επανάληψη)
Advertisements

3.4 Στοίβα (stack) (μόνο θεωρία)
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων
Παράδειγμα 1:Σειριακή αναζήτηση
Εισαγωγή στους Αλγόριθμους Ταξινόμησης
Γεωργαλλίδης Δημήτρης Καθηγητής Πληροφορικής
Διακριτά Μαθηματικά ΙI Δυαδικά Δέντρα Αναζήτησης
Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
ΜΑΘ-3122/106 Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
Αλγόριθμοι Ταξινόμησης
Γιάννης Σταματίου Μη αποδοτική αναδρομή και η δυναμική προσέγγιση Webcast 8.
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
Αλγόριθμοι και Πολυπλοκότητα
Επιλογή Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο.
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
Διαίρει-και-Βασίλευε
Δυναμικός Προγραμματισμός
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
Είσοδος & Έξοδος στη C++ Ι
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο1 Διαίρει και Βασίλευε γνωστότερη Η γνωστότερη μέθοδος σχεδιασμού αλγορίθμων: Διαιρούμε.
Ουρά Προτεραιότητας: Heap
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο1 Ωμή Βία Είναι μία άμεση προσέγγιση που βασίζεται στην εκφώνηση του προβλήματος και τους ορισμούς.
Αλγόριθμοι: Σύγχρονες Τάσεις Ηλίας Κουτσουπιάς Τμήμα Πληροφορικής και Τηλεπικοινωνιών Πανεπιστήμιο Αθηνών.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Αλγόριθμοι Ταξινόμησης
Χωρικοί-χρονικοί συμβιβασμοί
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Λεξικό, Union – Find Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - 4ο εξάμηνο1 Ανάλυση Αλγορίθμων b Θέματα: Ορθότητα Χρονική αποδοτικότητα Χωρική αποδοτικότητα Βελτιστότητα b Προσεγγίσεις:
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
ΑΕΠΠ 3ο Κεφάλαιο Γεωργαλλίδης Δημήτρης Καθηγητής Πληροφορικής 1 Ο Λύκειο Ρόδου.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.
ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Επανάληψη.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Επιπλέον στοιχεία της C.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
8-1 ΜΑΘΗΜΑ 8 ο Εισαγωγή στους Αλγόριθμους Ταξινόμησης.
Αναζήτηση σε πίνακα Αναζήτηση σε πίνακα που περιέχει ακέραιους αριθμούς.
ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ. Δυαδική αναζήτηση (Binary search) ΔΕΔΟΜΕΝΟ: ένα μεγάλο αρχείο που περιέχει τιμές z [0,1,…,n-1] ταξινομημένες.
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
9η Διάλεξη Ταξινόμηση Ε. Μαρκάκης
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Αλγόριθμοι Ταξινόμησης – Μέρος 3
Εισαγωγή στον Προγ/μό Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΑΝΤΙΣΤΑΣΙΑΚΕΣ ΟΡΓΑΝΩΣΕΙΣ
Σειριακή ή Γραμμική Αναζήτηση 1.Μοναδικό Κλειδί (key)
«Ανάπτυξη εφαρμογής για τη διαχείριση μεθόδων αναζήτησης σε οπτικοποιημένο περιβάλλον»  Μπλάγας Χρήστος.
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Ουρά Προτεραιότητας (priority queue)
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
19η Διάλεξη Εξωτερική Αναζήτηση και Β-δέντρα Ε. Μαρκάκης
14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης Ε. Μαρκάκης
Μεταγράφημα παρουσίασης:

Ταξινόμηση και Αναζήτηση ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση

To πρόβλημα της Αναζήτησης Δοθέντος δεδομένων, λ.χ. σε Πίνακα (P) Ψάχνω να βρω κάποιο συγκεκριμένο στοιχείο (key) Αν ο πίνακας δεν είναι ταξινομημένος Γραμμική Αναζήτηση (Linear search) Απλούστερη δυνατή Σύγκρινε σειριακά κάθε στοιχείο του πίνακα με την τιμή-κλειδί Χρήσιμο για μικρούς και ΜΗ ταξινομημένους πίνακες int linearSearch(int *P,int apo,int eos,int key) { int i; for (i = apo; i <= eos; ++i) if (P[i] == key) return i; } return -1;

To πρόβλημα της Αναζήτησης Αν ο πίνακας είναι ταξινομημένος λ.χ. τηλεφωνικός κατάλογος Μπορώ να κάνω πολύ πιο γρήγορα την αναζήτηση Δυαδική Αναζήτηση (Binary Search) Συγκρίνει το P[middle] στοιχείο με το ζητούμενο key Αν είναι ίσα βρέθηκε Αν key < P[middle], ψάχνει στο 1ο μισό του πίνακα Αν key > P[middle], ψάχνει στο 2ο μισό του πίνακα Επανάληψη Πολύ γρήγορη – χειρότερη περίπτωση log2(N), Ν # στοιχείων πίνακα Πίνακας 100 στοιχείων χρειάζεται το πολύ 7 βήματα Πίνακας 100.000 στοιχείων χρειάζεται το πολύ 20 βήματα Πίνακας 100.000.000 στοιχείων χρειάζεται το πολύ 27 βήματα

Binary Search – Υλοποίηση με επανάληψη int binaryLoopSearch(int p[], int searchkey, int low, int high) { int middle; while ( low <= high ) middle = (low + high ) / 2; if (searchkey == p[middle]) return middle; else if (searchkey < p[middle] ) high = middle – 1; else low = middle + 1; } return -1;

Binary Search – Υλοποίηση με αναδρομή int binarySearch(int p[], int searchkey, int low, int high) { int middle; middle = (low + high ) / 2; if (high < low) return -1; if (searchkey == p[middle]) return middle; else if (searchkey < p[middle]) return binarySearch(p, searchkey, low, middle-1); else return binarySearch(p, searchkey, middle+1,high); }

To πρόβλημα της Ταξινόμησης Δοθέντος δεδομένων, λ.χ. σε Πίνακα (P) Να γίνει αναδιάταξη των στοιχείων του ώστε να βρεθούν σε αύξουσα (ή φθίνουσα) σειρά, δηλαδή ταξινομημένα Λύση : Υπάρχουν διάφοροι αλγόριθμοι που το πετυχαίνουν και διαφοροποιούνται στο υπολογιστικό Straight Selection Sort - Bubble Sort : Ο(Ν2) Quick Sort : O(N log N) 12 31 4 32 134 13 42 1 43 2 1 2 12 4 13 31 32 42 43 134

QSort: Ψευδοκώδικας QSort(Πίνακας Π, δείκτης Α, δείκτης Τ) Ταξινομεί τον υποπίνακα Π[Α] έως Π[Τ] Αν Α  Τ, επέστρεψε Διαφορετικά, Διάλεξε ένα στοιχείο του πίνακα (pivot), έστω το μεσαίο Λ = Π[(Α+Τ)/2] Βρες την θέση Θ του Λ που θα έχει στην τελική ταξινόμηση Μετέφερε τα στοιχεία του Π[Α] έως και Π[Τ] έτσι ώστε: Π[Χ]  Λ, αν Χ < Θ Π[Χ] > Λ, αν Χ > Θ QSort(Π, Α, Θ-1) QSort(Π, Θ+1, Τ)

Qsort void qsort(int v[], int left, int right) { int i, last; if(left >= right) return; swap(v, left, (left + right)/2); last = left; for (i = left+1; i <= right; i++) if (v[i] < v[left]) swap(v, ++last, i); swap(v, left, last); qsort(v, left, last-1); qsort(v, last+1, right); } void swap(int v[], int i, int j) int temp; temp = v[i]; v[i] = v[j]; v[j] = temp;