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

Σχετικά έγγραφα
Προγραμματισμός Ι (ΗΥ120)

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

Ππογπαμμαηιζμόρ Ι (ΗΥ120)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αξιοποίηση Η/Υ και Πληροφορικής στην Μηχανική

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

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

Εχουμε ήδη συναντήσει μονοδιάστατους πίνακες, οι οποίοι ορίζονται ως εξής:

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

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

Η γλώσσα προγραμματισμού C

Υπολογισμός - Εντολές Επανάληψης

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

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

Η γλώσσα προγραμματισμού C

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές!

Κεφάλαιο : Επαναλήψεις (for, do-while)

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 8 : Πίνακες IΙ. Αλέξανδρος Τζάλλας

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

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

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

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

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

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

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

Πίνακες. FORTRAN και Αντικειμενοστραφής Προγραμματισμός

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Επανάληψη για τις Τελικές εξετάσεις

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

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

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

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

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

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

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

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΙΝΑΚΕΣ. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

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

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

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

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

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

ΑΣΚΗΣΕΙΣ ΘΕΩΡΙΑΣ. ΘΕΜΑ 1 Δίνεται το παρακάτω τμήμα δηλώσεων ενός προγράμματος σε «ΓΛΩΣΣΑ»: ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Π[10] ΛΟΓΙΚΕΣ: ΒΡΕΘΗΚΕ ΑΚΕΡΑΙΕΣ: i

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

Διάλεξη 5η: Εντολές Επανάληψης

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

for for for for( . */

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΙΝΑΚΕΣ. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

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

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

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

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

Ταξινόμηση. Ταξινόμηση ευθείας ανταλλαγής (Φυσαλίδα) 1) Να ταξινομηθεί ο πίνακας Α[Ν] σε αύξουσα σειρά με τη μέθοδο της φυσαλίδας.

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

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

Δομές Δεδομένων. Τι είναι η δομή δεδομένων; Έστω η ακολουθία αριθμών: 8, 10,17,19,22,5,12 Λογικό Επίπεδο. Φυσικό Επίπεδο RAM. Ταξινομημένος.

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Δομές ελέγχου ροής προγράμματος

IMPLICIT NONE INTEGER :: a, b, c

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

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

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

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

Transcript:

Προγραµµατισµός Ι (ΗΥ120) ιάλεξη 10: Ταξινόµηση Πίνακα Αναζήτηση σε Ταξινοµηµένο Πίνακα

Πρόβληµα ίνεται πίνακας tαπό Νακεραίους. Ζητούµενο: να ταξινοµηθούν τα περιεχόµενα του πίνακα σε αύξουσα αριθµητική σειρά: i : 0<=i<N-1 => data[i] <= data[i+1] Μια λύση (ταξινόµηση φυσαλίδας bubble sort): Αρχίζοντας από το 1ο στοιχείο και φτάνοντας µέχρι το Νο στοιχείο του πίνακα, βρίσκουµε το στοιχείο µε την µικρότερη τιµή και ανταλλάσσουµε την τιµή του µε την τιµή του 1ου στοιχείου. Επαναλαµβάνουµε τη διαδικασία, αρχίζοντας από το 2ο στοιχείο, µετά αρχίζοντας από το 3ο στοιχείο κλπ µέχρι και το Ν-1ο στοιχείο. 2

i 3 data ταξινοµηµένα στοιχεία περιοχή που δεν έχει ταξινοµηθεί ακόµα θέση όπου θα αποθηκευτεί η µικρότερη τιµή που θα βρεθεί στα data[i] data[n-1]

/* ταξινόµηση πίνακα */ int data[n]; /* πίνακας µε Ν ακεραίους */ int i,j; /* µετρητές βρόγχων */ int min; /* θέση τοποθέτησης µικρότερου στοιχείου */ int tmp; /* βοηθητική µεταβλητή για ανταλλαγή θέσης */ 4 /* αρχικοποίηση πίνακα t µε στοιχεία */ for (i=0; i<n; i++) { min = i; for (j=i+1; j<n; j++) { if (data[j] < data[min]) { min = j; if (min!= i) { tmp = data[i]; data[i] = data[min]; data[min] = tmp; Ανταλλαγή τιµών 2 µεταβλητών (swap)

Πρόβληµα ίνεται πίνακας tαπό Νακεραίους, τα περιεχόµενα του οποίου είναι ταξινοµηµένα. Ζητούµενο: Να βρεθεί η θέση όπου έχει αποθηκευθεί µια τιµή στον πίνακα (εφόσον υπάρχει) ) ηλαδή για µια τιµή v, να βρεθεί η τιµή i: i!=ν => t[i]==v i=n => j : 0<=j<N : t[j]!=v Εξετάζουµε δύο «κλασικές» λύσεις σειριακή αναζήτηση δυαδική αναζήτηση (µε διχοτόµηση) 5

Σειριακή αναζήτηση Αρχίζουµε από το πρώτο στοιχείο του πίνακα data[pos], pos=0, που έχει (εξ ορισµού) την µικρότερη τιµή και εκτελούµε σε βρόχο τις εντολές 2 έως 5. Αν pos==n, δηλαδή ο πίνακας δεν έχει στοιχείο data[pos], τότε τελειώσαµε (δεν υπάρχει στοιχείο µε τιµή val). ιαφορετικά,, αν data[pos]==val, τότε τελειώσαµε (αφού βρήκαµε το στοιχείο µε τιµή val). ιαφορετικά, αν data[pos]>val, τότε πάλι τελειώσαµε (είναι σίγουρο ότι δεν υπάρχει στοιχείο µε τιµή val). ιαφορετικά, (ισχύει data[pos]<val), τότε επαναλαµβάνουµε την διαδικασία από το 2 για το επόµενο στοιχείο (pos=pos+1). 6 Χρειάζονται κατά µέσο όρο «τάξη µεγέθους» Ν/2 βήµατα σύγκρισης.

0 pos Ν-1 7 data περιοχή πίνακα που έχει ήδη ελεγχθεί: 0<=j<pos:data[j]<val στοιχεία προς έλεγχο επόµενο στοιχείο προς έλεγχο

/* σειριακή αναζήτηση σε ταξινοµηµένο πίνακα */ int data[n]; /* πίνακας µε Ν ακεραίους */ int pos; /* τρέχουσα θέση */ int val; /* τιµή στοιχείου που αναζητούµε */ 8... /* αρχικοποίηση & ταξινόµηση πίνακα data */ for (pos=0; pos<n; pos++) { if (data[pos] >= val) { break; if (pos == N) { printf("not found\n"); else { if (data[pos]!= val) { printf("not found\n"); else { printf("found at position %d\n", pos);

/* σειριακή αναζήτηση σε ταξινοµηµένο πίνακα */ int data[n]; /* πίνακας µε Ν ακεραίους */ int pos; /* µεταβλητή βρόγχου */ int val; /* τιµή στοιχείου που αναζητούµε */ 9... /* αρχικοποίηση & ταξινόµηση πίνακα t */ for (pos=0; (pos<n) && (data[pos]<val); pos++) { if (pos == N) { printf("not found\n"); else if (data[pos]!= val) { printf("not found\n"); else { printf("found at position %d\n", pos); η σύµβαση εκτέλεσης του && εγγυάται ότι δεν θα επιχειρηθεί πρόσβαση t[i] όταν το i φτάσει το όριο Ν του πίνακα

υαδική αναζήτηση Θέτουµε τα όρια αναζήτησης beg=0 και end=n-1. Αρχίζουµε από το µεσαίο στοιχείο του πίνακα t[m], όπου m = (beg+end)/2. Αν t[m] == v, τελειώσαµε. Αν t[m] < v, συνεχίζουµε µε τον (µισό) υποπίνακα που έχει στοιχεία µε µεγαλύτερες τιµές του t[m] δηλαδή θέτουµε beg = m+1 (και πίσω στο 2). Αλλιώς (t[m] > v), συνεχίζουµε µε τον (µισό) υποπίνακα που έχει στοιχεία µε µικρότερεςτιµές του t[m] δηλαδή θέτουµε end = m-1 (και πίσω στο 2). Αν beg > end τελειώσαµε (η τιµή v δεν υπάρχει). Χρειάζονται «τάξη µεγέθους» log 2 Nβήµατα. 10

0 beg m end Ν-1 11 data περιοχή που έχει αποκλεισθεί : 0<=i<beg: data[i]<val περιοχή προς έλεγχο επόµενο στοιχείο προς έλεγχο περιοχή που έχει αποκλεισθεί : end<=i<n: data[i]>val

/* δυαδική αναζήτηση σε ταξινοµηµένο πίνακα */ int data[n]; /* πίνακας µε Ν ακεραίους */ int beg,end; /* όρια αναζήτησης [beg,end) */ int m; /* θέση µεσαίου στοιχείου */ int val; /* τιµή στοιχείου που αναζητούµε */ 12... /* αρχικοποίηση & ταξινόµηση πίνακα t */ beg = 0; end = N-1; while (beg <= end) { m = (beg+end)/2; if (data[m] == val) { break; else { if (data[m] < val) { beg = m+1; /* (data[m] > val) */ else { end = m-1; if (beg > end) { printf("not found\n"); else { printf("found at position %d\n", m);

Σύγκριση 13 # στοιχείων µ.ο βηµάτων µέγιστα βήµατα πίνακα σειριακής αναζ. δυαδικής αναζ. Ν Ν/2 log N 100 50 7 1.000 500 10 1.000.000 500.000 20 1.000.000.000 500.000.000 30 Η διαφορά γίνεται τεράστιαγια µεγάλες τιµές του Ν.