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

Σχετικά έγγραφα
Δομές Δεδομένων & Αλγόριθμοι

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

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

ιαφάνειες παρουσίασης #9 (α)

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

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

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

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

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

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

ιαφάνειες παρουσίασης #5 (β)

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

ιαφάνειες παρουσίασης #6 (α)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ

ιαφάνειες παρουσίασης #6 (β)

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

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

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

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

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

Περιεχόμενα. Πρόλογος... 17

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

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

int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

ιαφάνειες παρουσίασης #10 (β)

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

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

Εισαγωγή στον Προγραμματισμό

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

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

ΠΙ Ν Α Κ Ε Σ (arrays)

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

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

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

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

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

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

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

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

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

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Συναρτήσεις και Πίνακες

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

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

Ουρές προτεραιότητας

Δείκτες & Πίνακες Δείκτες, Πίνακες

Προγραμματισμός HY: Γλώσσα Προγραμματισμού C

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

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

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

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

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

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

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

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

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

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

Αλγόριθµοι Ταξινόµησης

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

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

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

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

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

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

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

οµές εδοµένων 3 ο Εξάµηνο Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ

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

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

Επεξεργασία Ερωτήσεων

Transcript:

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης #4!Πίνακες ως ΑΤ!Αναζήτηση σε πίνακες!ταξινόµηση πινάκων!ορισµός τύπων!απαριθµήσεις 1

Πίνακες ως ΑΤ (i) " Βασική πράξη: προσπέλαση στοιχείου a[i] " Συνήθως υλοποιούνται µε κάποιο ΣΤ πινάκων (arrays) # Κόστος προσπέλασης: O(1) " Ο ΣΤ του µονοδιάστατου πίνακα επαρκεί για την υλοποίηση κάθε ΑΤ πίνακα # Συνάρτηση loc υπολογίζει τη θέση ενός στοιχείου του ΑΤ πίνακα στο µονοδιάστατο ΣΤ πίνακα της υλοποίησης 2

Πίνακες ως ΑΤ (ii) " ΑΤ πίνακα δύο διαστάσεων n m i = 1 i = 2 0 1 2 3 4 5 6 7 8 9 10 11 i = 3 12 13 14 15 16 17 j = 1 2 3 4 5 6 n = 3 m = 6 loc (n, m, i, j) = m (i 1) + j 1 " Αρίθµηση κατά στήλες loc (n, m, i, j) = n (j 1) + i 1 3

Πίνακες ως ΑΤ (iii) " ΑΤ κάτω τριγωνικού πίνακα n n i = 1 i = 2 i = 3 i = 4 i = 5 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 j = 1 2 3 4 5 n = 5 loc (n, i, j) = i (i 1) / 2 + j 1 " Οµοίως για συµµετρικούς πίνακες 4

Πίνακες ως ΑΤ (iv) " ΑΤ τριδιαγώνιου πίνακα n n i = 1 i = 2 i = 3 i = 4 i = 5 0 1 2 3 4 5 6 7 8 9 10 11 12 j = 1 2 3 4 5 n = 5 loc (n, i, j) = 2 i + j 3 5

Πίνακες ως ΑΤ (v) " ΑΤ αραιού πίνακα n m i = 1 a 1 i = 2 a 2 i = 3 a 3 a 4 i = 4 j = 1 2 3 4 5 # Υλοποίηση µε δυαδικό πίνακα # Υλοποίηση µε τρεις πίνακες row = [ 1, 2, 3, 3, 4 ] col = [ 1, 3, 2, 3, 5 ] val = [ a 1, a 2, a 3, a 4, a 5 ] a 5 n = 4 m = 5 6

Αναζήτηση σε πίνακες (i) " Σειριακή αναζήτηση # Τα στοιχεία διατρέχονται κατά σειρά # Κόστος: O(n) 12 9 72 22 42 99 14 61 n = 8 x = 42 (1) (2) (3) (4) (5) # Βελτίωση: στοιχείο φρουρός (sentinel) 12 9 72 22 42 99 14 61 7 n = 8 x = 7 7

Αναζήτηση σε πίνακες (ii) " Υλοποίηση σε C int ssearch (int a[], int n, int x) { int i; for (i = 0; i < n; i++) if (a[i] == x) return i; return -1; 8

Αναζήτηση σε πίνακες (iii) " Υλοποίηση σε C µε φρουρό int ssearch_s (int a[], int n, int x) { int i; a[n] = x; for (i = 0; a[i]!= x; i++); return (i < n)? i : -1; 9

Αναζήτηση σε πίνακες (iv) " υαδική αναζήτηση # Ο πίνακας πρέπει να είναι ταξινοµηµένος # Κόστος: O(logn) 3 7 14 22 42 61 72 99 n = 8 x = 42 (1) (3) (2) " Άλλες µέθοδοι αναζήτησης # Μικρότερο κόστος περισσότερος χώρος # Πίνακες κατακερµατισµού (hash tables) 10

Ταξινόµηση πινάκων (i) " Ταξινόµηση επιλογής (selection sort) # Ιδέα: για κάθε i κατ αύξουσα σειρά βρες το µικρότερο των στοιχείων µετά το a[i] αντιµετάθεσέ το µε το a[i] # Κόστος: Ο(n 2 ) # Βελτίωση: στοιχείο φρουρός 11

Ταξινόµηση πινάκων (ii) " Ταξινόµηση επιλογής, υλοποίηση σε C void ssort (int a[], int n) { int i, j; for (i = 0; i < n-1; i++) { int min = a[i], minj = i; for (j = i+1; j < n; j++) if (a[j] < min) min = a[minj = j]; a[minj] = a[i]; a[i] = min; 12

Ταξινόµηση πινάκων (iii) " Ταξινόµηση εισαγωγής (insertion sort) # Χρησιµοποιούµε αυτό τον τρόπο όταν ταξινοµούµε τα χαρτιά µιας τράπουλας # Ιδέα: για κάθε i από το δεύτερο και κατ αύξουσα σειρά τοποθέτησε το a[i] στη σωστή του θέση µεταξύ των στοιχείων που είναι πριν από αυτό # Κόστος: Ο(n 2 ) # Βελτιώσεις: στοιχείο φρουρός δυαδική εισαγωγή 13

Ταξινόµηση πινάκων (iv) " Ταξινόµηση εισαγωγής, υλοποίηση σε C void isort (int a[], int n) { int i, j; for (i = 1; i < n; i++) { int x = a[i]; for (j = i-1; j >= 0; j--) if (x < a[j]) a[j+1] = a[j]; else break; a[j+1] = x; 14

Ταξινόµηση πινάκων (v) " Ταξινόµηση φυσαλίδας (bubble sort) # Ιδέα: για κάθε i κατ αύξουσα σειρά για κάθε j > i κατά φθίνουσα σειρά αν a[j-1] > a[j] αντιµετάθεσε τα a[j-1] και a[j] # Κόστος: Ο(n 2 ) # Βελτιώσεις: σταµατά αν σε ένα πέρασµα δεν γίνει αντιµετάθεση σε ποιο σηµείο έγινε η τελευταία αντιµετάθεση αλλαγή κατεύθυνσης µεταξύ διαδοχικών περασµάτων (shake sort) 15

Ταξινόµηση πινάκων (vi) " Ταξινόµηση φυσαλίδας, υλοποίηση σε C void bsort (int a[], int n) { int i, j; for (i = 0; i < n; i++) for (j = n-1; j > i; j--) if (a[j-1] > a[j]) { int temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; 16

Ταξινόµηση πινάκων (vii) " Ταξινόµηση µε διαµέριση (quick sort) # Ιδέα: διάλεξε ένα τυχαίο στοιχείο x του πίνακα διαµέρισε τον πίνακα, µεταφέροντας: τα στοιχεία µικρότερα του x στην αρχή τα στοιχεία µεγαλύτερα του x στο τέλος αναδροµικά, ταξινόµησε τα δύο µέρη # Κόστος: Ο(n 2 ) στη χειρότερη περίπτωση Ο(n logn) κατά µέσο όρο 17

Ταξινόµηση πινάκων (viii) " Quick sort, υλοποίηση σε C void qsort (int a[], int n) { qsort_auxil(a, 0, n-1); void qsort_auxil (int a[], int lower, int upper) { if (lower < upper) { int x = a[(lower + upper) / 2]; int i, j; for (i = lower, j = upper; i <= j; i++, j--) { while (a[i] < x) i++; while (a[j] > x) j--; 18

Ταξινόµηση πινάκων (ix) " Quick sort, υλοποίηση σε C (συνέχεια) if (i <= j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; qsort_auxil(a, lower, j); qsort_auxil(a, i, upper); 19

Ταξινόµηση πινάκων (x) " Άλλοι τρόποι ταξινόµησης # Ταξινόµηση του Shell (shell sort), κόστος: Ο(n 2 ) # Ταξινόµηση σε σωρό (heap sort), κόστος: Ο(n logn) # Ταξινόµηση µε συγχώνευση (merge sort), κόστος: Ο(n logn) 20

Ορισµοί τύπων " Συνώνυµα απλών τύπων typedef double real; real x, y; " Συνώνυµα σύνθετων τύπων typedef double vector [10]; vector v; for (i = 0; i < 10; i++) v[i] = i; 21

Απαριθµήσεις (enumerations) " Ο τύπος enum enum color_tag { GREEN, RED, BLUE, WHITE, BLACK ; enum color_tag c; c = GREEN; typedef enum { GREEN, RED, BLUE, WHITE, BLACK color; color c = WHITE; 22