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

Σχετικά έγγραφα
ΗΥ-150. Προγραμματισμός

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

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150 Πξνγξακκατησκόο Ταμηλόκεσε θαη Αλαδήτεσε

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

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

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

Προγραμματισμός Αναδρομή

Προγραμματισμός Αναδρομή

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

Προγραµµατισµός. Αναδροµή (1/2)

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

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

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

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

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

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

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

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

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

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

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

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

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

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

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

Σημειώσεις δεύτερης εβδομάδας

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

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

ΗΥ-150. Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

p

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

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

ΗΥ-150. Πίνακες (Arrays)

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

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

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

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

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 5: Πίνακες [1/2] (Διανύσματα)

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

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

Ειδικά Θέματα Ι. Σήμερα!

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

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

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

Μεθόδων Επίλυσης Προβλημάτων

Διδάσκων: Κωνσταντίνος Κώστα

Μεθόδων Επίλυσης Προβλημάτων

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

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

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

Δείκτες στην C (επανάληψη)

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

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

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

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

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

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

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

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

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

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

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

Παράδειγµα χρήσης πίνακα

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

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

Αλγόριθμοι και Πολυπλοκότητα Φώτης Ε. Ψωμόπουλος, Περικλής Α. Μήτκας

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

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

Transcript:

ΗΥ-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; 2

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

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; 4

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); return -1; 5

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

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 36 24 10 6 12 Χωρίζει νοητά τον πίνακα σε 2 µέρη: -Ταξινοµηµένο -Μη ταξινοµηµένο Σε κάθε επανάληψη βρίσκει το µεγαλύτερο στοιχείο και το ανταλλάσει µε το πρώτο του αταξινόµητου υποπίνακα.

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 36 24 10 6 12 U N S O R T E D

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 12 24 10 6 36 SORTED U N S O R T E D

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 12 6 24 10 36 6 12 36 SORTED U N S O R T E D

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 12 6 10 6 24 10 36 24 SORTED U N S O R T E D 12 36

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 12 6 10 24 SORTED U N S O R T E D 36

Ταξινόµηση µε επιλογή values [ 0 ] 10 [ 1 ] UNSORTED [ 2 ] [ 3 ] [ 4 ] 6 12 24 36 S O R T E D

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 10 6 12 24 36 UNSORTED S O R T E D

Ταξινόµηση µε επιλογή values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 6 10 12 24 36 S O R T E D

Ταξινόµηση µε επιλογή: Απαρίθµηση συγκρίσεων (υπολογιστικό κόστος) values [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] 6 10 12 24 36 4 compares for values[4] 3 compares for values[3] 2 compares for values[2] 1 compare for values[1] = 4 + 3 + 2 + 1

Min Index minindex = 0; minvalue = arr[minindex]; for (j = 1; j < n; j++) if (arr[j] < minvalue) minindex = j; minvalue = arr[j]; 17

Swap int a = 6; int b = 5; int tmp = a; a = b; b = tmp; 18

Selection sort void selectionsort(int arr[], int n) int i, j, minindex, tmp; for (i = 0; i < n - 1; i++) minindex = i; for (j = i + 1; j < n; j++) if (arr[j] < arr[minindex]) minindex = j; if (minindex!= i) tmp = arr[i]; arr[i] = arr[minindex]; arr[minindex] = tmp;

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

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; 21

ΗΥ-150 Πολυδιάστατοι Πίνακες

Πίνακες πολλών διαστάσεων Πίνακες πολλών διαστάσεων Πίνακες µε γραµµές και στήλες (m Χ n πίνακας) Όπως και στα µαθηµατικά: πρώτα γραµµή και µετά στήλη Column 0 Column 1 Column 2 Column 3 Row 0 Row 1 Row 2 a[0][0] a[1][0] a[2][0] a[0][1] a[1][1] a[2][1] a[0][2] a[1][2] a[2][2] a[0][3] a[1][3] a[2][3] Array name Row subscript Column subscript 23

Ένας διδιάστατος πίνακας ορίζεται ως εξής: τύπος όνοµα[πλήθος_στοιχείων_1][πλήθος_στοιχείων_2]; Πίνακες περισσότερων διαστάσεων ορίζονται ανάλογα. Ένας ακέραιος 6 x 8 διδιάστατος πίνακας είναι ο int a[6][8]; Το στοιχείο π.χ. (3,2) του πίνακα αυτού είναι προσπελάσιµο ως a[3][2]. Απόδοση αρχικών τιµών γίνεται ανά γραµµή, ως εξής: int b[2][3] = 0, 1, 2, 3, 4, 5 ; 24

ισδιάστατοι Πίνακες ήλωση: int c[3][3]; Χρήση: c[k][j] = m; Αποθήκευση στη µνήµη c[0][0] c[0][1] c[0][2] c[1][0] c[1][1] c[1][2] c[2][0] c[2][1] c[2][2] Περιεχόµενα Μνήµης -45 6 0 72 1543-89 0 62-3 1 6453 78 Θέση µέσα στον πίνακα c 25

Πίνακες πολλών διαστάσεων Αρχικοποίηση int b[ 2 ][ 2 ] = 1, 2, 3, 4 ; διαχωρίζουν γραµµές του πίνακα Αν δεν είναι αρκετά τα στοιχεία, τα υπόλοιπα γίνονται 0 int b[ 2 ][ 2 ] = 1, 3, 4 ; 1 2 3 4 1 0 3 4 26

Παράδειγµα 2 πίνακα #include <stdio.h> int main() int magic[3][3] = 8, 1, 6, 3, 5, 7, 4, 9, 2 ; int i, j, sum; int sumrows[3]; int sumcolumns[3]; int sumdiagonal1; int sumdiagonal2; // Print the magic square for (i=0; i < 3; i++) for (j = 0; j < 3; j++) cout << magic[i][j]; cout << endl; // Now check that it is a magic square: // all rows and columns need to add to 15 sumdiagonal1 = 0; sumdiagonal2 = 0; for (i = 0 ; i < 3; i++) sumrows[i] = 0; sumcolumns[i] = 0; for (j = 0 ; j < 3; j++) sumrows[i] += magic[i][j]; sumcolumns[i]+= magic[j][i]; sumdiagonal1 += magic[i][i]; sumdiagonal2 += magic[i][2-i]; for (i=0; i < 3 ; i++) cout<<"sum Row <<i<< is <<sumrows[i]<<endl; cout<<"sum Column <<i<< is sumcolumns[i]<<endl; cout<< Sum diagonal 1 is <<sumdiagonal1 <<endl; cout<< Sum diagonal 2 is <<sumdiagonal2<<endl; return 0; 27

Πολυδιάστατους Πίνακες ως Ορίσµατα Πάντα πρέπει να δηλώνεται το µέγεθος κάθε διάστασης, εκτός από την πρώτη διάσταση (αριθµός γραµµών) int f(int a[][10][20]) int main(void) int b[40][10][20]; f(b); Γιατί µας υποχρεώνει η γλώσσα σε αυτόν τον περιορισµό; Σκεφτείτε. 28

Υπολογισµός Mean, Median and Mode Mean average 1, 1, 2, 2, 4 Mean = (1+1+2+2+4) / 5 = 2.0 Median number in middle of sorted list 1, 2, 3, 4, 5 3 is the median Mode number that occurs most often 1, 1, 1, 2, 3, 3, 4, 5 1 is the mode 29

Παράδειγµα 2 πίνακα - C++ int **dynamicarray = 0; //memory allocated for elements of rows. dynamicarray = new int *[ROWS] ; //memory allocated for elements of each column. for( int i = 0 ; i < ROWS ; i++ ) dynamicarray[i] = new int[columns]; //free the allocated memory for( int i = 0 ; i < ROWS ; i++ ) delete [] dynamicarray[i] ; delete [] dynamicarray ; 30

int A[10]; int N; int * dynamicarray ; dynamicarray = A; cin >> N; dynamicarray = new int [N] ; delete [] N; 31