Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Σχετικά έγγραφα
343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Δομζσ Δεδομζνων. Αναηιτθςθ και Ταξινόμθςθ Διάλεξθ 3

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

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

343 Ειςαγωγι ςτον Προγραμματιςμό

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Ηλεκτρονικοί Υπολογιστές

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

343 Ειςαγωγι ςτον Προγραμματιςμό

Δομζσ Δεδομζνων Πίνακεσ

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Μικροβιολογία & Υγιεινή Τροφίμων

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Οντοκεντρικόσ Προγραμματιςμόσ

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

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολές for, while, do-while Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

Οντοκεντρικός Προγραμματισμός

Πληροφορική και Εκπαίδευση

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

343 Ειςαγωγι ςτον Ρρογραμματιςμό

17. Πολυδιάςτατοι πίνακεσ

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Οντοκεντρικόσ Ρρογραμματιςμόσ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Οντοκεντρικός Προγραμματισμός

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

Ιδιότθτεσ πεδίων Γενικζσ.

Αλγόριθμοι και Δομές Δεδομένων(Θ) Ευάγγελος Γ. Ούτσιος

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολή if. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

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

Ειδικζσ Ναυπηγικζσ Καταςκευζσ και Ιςτιοφόρα κάφη (Ε)

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

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

Προγραμματισμός Η/Υ. Αναζήτηση & Ταξινόμηση. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Εργαςτιριο Βάςεων Δεδομζνων

Ιςοηυγιςμζνα δζντρα και Β- δζντρα. Δομζσ Δεδομζνων

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

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

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

Ηλεκτρονικοί Υπολογιστές I

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Οντοκεντρικός Προγραμματισμός

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Οικονομετρία. Εξειδίκευση του υποδείγματος. Μορφή της συνάρτησης: Πολυωνυμική, αντίστροφη και αλληλεπίδραση μεταβλητών

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Εισαγωγή στους Αλγορίθμους

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

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

Οντοκεντρικός Προγραμματισμός

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

Ειδικά Θζματα Βάςεων Δεδομζνων

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Οικονομετρία. Πολλαπλή Παλινδρόμηση. Στατιστικός έλεγχος γραμμικού συνδυασμού συντελεστών. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

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

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Εισαγωγή στους Αλγορίθμους

Γράφοι. Δομζσ Δεδομζνων Διάλεξθ 9

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

Γενικά Μαθηματικά ΙΙ

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

343 Ειςαγωγι ςτον Προγραμματιςμό

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Aντιπτζριςη (ΕΠ027) Ενότητα 6

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

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Ιστορία της μετάφρασης

Δζντρα. Δομζσ Δεδομζνων

Transcript:

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό Ενότητα: Εφαρμογές σε ταξινομήσεις και αναζήτηση στοιχείων Διδάσκων: Λέκτορας Xάρης Παπαδόπουλος Τμήμα: Μαθηματικών

343 Ειςαγωγι ςτον Προγραμματιςμό Τμιμα Μακθματικϊν Πανεπιςτιμιο Ιωαννίνων Ακαδθμαϊκό Ζτοσ 2013-2014 Χάρθσ Παπαδόπουλοσ 207δ, B όροφοσ e-mail: charis@cs.uoi.gr Ωρεσ Γραφείου: Δευτζρα 11-13 & Παραςκευι 11-13

Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Ημερολόγιο Μακιματοσ Q: Τεστ quiz Εβδομάδα Θζματα Υλθ βιβλιογραφίασ Οκτώβριος 2013 Πζ, 17 Οκτωβρίου Ειςαγωγικά μακιματοσ & Δυαδικι αναπαράςταςθ *1+: 1.1, Παράρτθμα 3 *2+: Κεφ. 1, Β, Δ Δ Τ Τ Π Π Είςοδοσ/Ζξοδοσ δεδομζνων, τφποι δεδομζνων & *1+: 1.2, 1.3, 1.4, 1.5, Παράρτθμα 1 Πζ, 24 Οκτωβρίου μεταβλθτϊν *2+: Κεφ. 2, Γ 14 15 16 17 Θ 18 21 22 23 24 Θ 25 Πζ, 31 Οκτωβρίου Προεπεξεργαςτισ, αρικμθτικοί και λογικοί [1]: 2.1, 2.2 Παράρτθμα 2 τελεςτζσ, Ροι ελζγχου: if/else *2+: 4.11, 4.12, Α, ΣΤ 28 29 30 31 Θ Δε Σρ, 4-5 Νοε 1 ο Εργαςτιριο [1]: 2.2, 2.3 Πζ, 7 Νοεμβρίου Ροι ελζγχου for, while, do-while Νοέμβριος 2013 *2+: Κεφ. 4, Κεφ. 5 Δ Τ Τ Π Π Δε Σρ, 11-12 Νοε 2 ο Εργαςτιριο 4 E 5 E 6 7 Θ 8 Πζ, 14 Νοεμβρίου υναρτιςεισ, εμβζλεια μεταβλθτϊν και αναδρομι [1]: 3.1, 3.2, 3.3, 4.1, 4.2, 13.1, 13.2 *2+: Κεφ. 6 11 E 12 E 13 14 Θ 15 Δε Σρ, 18-19 Νοε 3 ο Εργαςτιριο 18 E 19 E 20 21 Θ 22 Πζ, 21 Νοεμβρίου Επανάλθψθ με Παραδείγματα 25 Q 26 27 28 Θ 29 Δε Σρ, 25-26 Νοε 1 ο Quiz [1]: 5.1, 5.2, 5.4 Πζ, 28 Νοεμβρίου Πίνακεσ (μονοδιάςτατοι και πολυδιάςτατοι) Δεκέμβριος 2013 *2+: Κεφ. 7 Δ Τ Τ Π Π Δε Σρ, 2-3 Δεκ 4 ο Εργαςτιριο 2 E 3 E 4 5 Θ 6 Πζ, 5 Δεκεμβρίου Εφαρμογζσ ςε ταξινομιςεισ και αναηιτθςθ [1]: 5.3, 13.3 ςτοιχείων [2]: 7.7, 7.8, 8.6, Κεφ. 19 9 E 10 E 11 12 Θ 13 Δε Σρ, 9-10 Δεκ 5 ο Εργαςτιριο 16 Q 17 18 19 Θ 20 [1]: 9.1, 9.2, 9.3 Πζ, 12 Δεκεμβρίου Αλφαρικμθτικά και υμβολοςειρζσ *2+: 6.7, 6.8, Κεφ. 18 Ιανουάριος 2014 Δε Σρ, 16-17 Δεκ 2 ο Quiz Δ Τ Τ Π Π Πζ, 19 Δεκεμβρίου Δομζσ και χριςθ αρχείων [1]: 6.1, 12.1, 12.2, 12.4 *2+: Κεφ. 21, 17.1-17.10 6 7 8 9 Θ 10 Πζ, 9 Ιανουαρίου Επανάλθψθ ςε δομζσ και χριςθ αρχείων 13 14 15 16 Θ 17 Πζ, 16 Ιανουαρίου Επανάλθψθ 8-2

Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Ημερολόγιο Μακιματοσ Q: Τεστ quiz Εβδομάδα Θζματα Υλθ βιβλιογραφίασ Οκτώβριος 2013 Πζ, 17 Οκτωβρίου Ειςαγωγικά μακιματοσ & Δυαδικι αναπαράςταςθ *1+: 1.1, Παράρτθμα 3 *2+: Κεφ. 1, Β, Δ Δ Τ Τ Π Π Είςοδοσ/Ζξοδοσ δεδομζνων, τφποι δεδομζνων & *1+: 1.2, 1.3, 1.4, 1.5, Παράρτθμα 1 Πζ, 24 Οκτωβρίου μεταβλθτϊν *2+: Κεφ. 2, Γ 14 15 16 17 Θ 18 21 22 23 24 Θ 25 Πζ, 31 Οκτωβρίου Προεπεξεργαςτισ, αρικμθτικοί και λογικοί [1]: 2.1, 2.2 Παράρτθμα 2 τελεςτζσ, Ροι ελζγχου: if/else *2+: 4.11, 4.12, Α, ΣΤ 28 29 30 31 Θ Δε Σρ, 4-5 Νοε 1 ο Εργαςτιριο [1]: 2.2, 2.3 Πζ, 7 Νοεμβρίου Ροι ελζγχου for, while, do-while Νοέμβριος 2013 *2+: Κεφ. 4, Κεφ. 5 Δ Τ Τ Π Π Δε Σρ, 11-12 Νοε 2 ο Εργαςτιριο 4 E 5 E 6 7 Θ 8 Πζ, 14 Νοεμβρίου υναρτιςεισ, εμβζλεια μεταβλθτϊν και αναδρομι [1]: 3.1, 3.2, 3.3, 4.1, 4.2, 13.1, 13.2 *2+: Κεφ. 6 11 E 12 E 13 14 Θ 15 Δε Σρ, 18-19 Νοε 3 ο Εργαςτιριο 18 E 19 E 20 21 Θ 22 Πζ, 21 Νοεμβρίου Επανάλθψθ με Παραδείγματα 25 Q 26 27 28 Θ 29 Δεκέμβριος 2013 Δ Τ Τ Π Π 2 E 3 E 4 5 Θ 6 9 E 10 E 11 12 Θ 13 16 Q 17 18 19 Θ 20 Ιανουάριος 2014 Δ Τ Τ Π Π 6 7 8 9 Θ 10 13 14 15 16 Θ 17 Δε Σρ, 25-26 Νοε Πζ, 28 Νοεμβρίου Δε Σρ, 2-3 Δεκ Πζ, 5 Δεκεμβρίου Δε Σρ, 9-10 Δεκ Πζ, 12 Δεκεμβρίου Δε Σρ, 16-17 Δεκ Πζ, 19 Δεκεμβρίου Πζ, 9 Ιανουαρίου Πζ, 16 Ιανουαρίου 1 ο Quiz Πίνακεσ (μονοδιάςτατοι και πολυδιάςτατοι) 4 ο Εργαςτιριο Εφαρμογζσ ςε ταξινομιςεισ και αναηιτθςθ ςτοιχείων 5 ο Εργαςτιριο Αλφαρικμθτικά και υμβολοςειρζσ 2 ο Quiz Δομζσ και χριςθ αρχείων Επανάλθψθ ςε δομζσ και χριςθ αρχείων Επανάλθψθ [1]: 5.1, 5.2, 5.4 *2+: Κεφ. 7 [1]: 5.3, 13.3 [2]: 7.7, 7.8, 8.6, Κεφ. 19 [1]: 9.1, 9.2, 9.3 *2+: 6.7, 6.8, Κεφ. 18 [1]: 6.1, 12.1, 12.2, 12.4 *2+: Κεφ. 21, 17.1-17.10 8-3

Ενότθτα 17 ΑΛΓΟΡΙΘΜΟΙ ΣΑΞΙΝΟΜΘΘ 8-4

Αποτελεςματικότθτα Αλγορίκμου Θα εξετάςουμε διάφορουσ αλγορίκμουσ που επιλφουν ίδια προβλιματα. Όταν ςχεδιάηουμε ζναν αλγόρικμο μασ ενδιαφζρει θ αποτελεςματικότητά του (ταχφτθτα) Ζνασ γνωςτόσ τρόποσ για να ποςοτικοποιοφμε τθν αποτελεςματικότθτα ενόσ αλγορίκμου (πρόγραμμα) γίνεται με τθν εφρεςθ του πλήθοσ των ςυγκρίςεων που χρηςιμοποιεί. Το πλικοσ των ςυγκρίςεων μπορεί να εξαρτάται από τθν είςοδο. Περιπτϊςεισ: χειρότερη, μέςη, καλφτερη 8-5

Παραδείγματα if ( i < 5) i++; if ( i < 5 ) && ( i >0 ) i++; Γίνονται 1 και 2 ςυγκρίςεισ, αντίςτοιχα. Στο ακόλουκο κομμάτι πόςεσ ςυγκρίςεισ γίνονται; for(i=0; i<n; i++) cout << " i = " << i << endl; Στο ακόλουκο (δοκιμάςτε με αρχικζσ τιμζσ i=0 και i=4): while(i<5) cout << " i = " << i << endl; i+=2; 8-6

Ταξινόμθςθ Πινάκων Ταξινόμθςθ ςε αφξουςα τάξθ: a[0] a*1+... a[99] Ταξινόμθςθ ςε φκίνουςα τάξθ: a[0] a[1]... a[99] Πολφ ςπουδαία εφαρμογι Σχεδόν κάκε οργανιςμόσ πρζπει να ταξινομεί κάποια δεδομζνα Συνικωσ οι επιχειριςεισ πρζπει να ταξινομοφν ι να κρατάνε ταξινομθμζνα μεγάλο όγκο δεδομζνων Ταξινομοφμε ζνα πίνακα με n (< 100) ςτοιχεία Θεωροφμε τον πίνακα ωσ μερικϊσ ςυμπλθρωμζνο πίνακα 8-7

Χριςθ ςυναρτιςεων Σε όλουσ τουσ αλγορίκμουσ κα χρθςιμοποιιςουμε τισ ακόλουκεσ ςυναρτιςεισ: Εναλλαγι ςτοιχείων void swapvalues(int& v1, int& v2) int temp; temp = v1; v1 = v2; v2 = temp; Θα μποροφςε και με αυτι τθν διλωςθ void swap(int a[], int i, int j) int temp; temp = a[i]; a[i] = a[j]; a[j] = temp; 8-8

Χριςθ ςυναρτιςεων Σε όλουσ τουσ αλγορίκμουσ κα χρθςιμοποιιςουμε τισ ακόλουκεσ ςυναρτιςεισ: Διάβαςμα void fillarray(int a[], int size, int& numberused) cout << "Δώσε θετικούς αριθμούς (αρνητικό για τέλος).\n"; int next, index = 0; cin >> next; while ((next >= 0) && (index < size)) a[index] = next; index++; cin >> next; numberused = index; 8-9

Χριςθ ςυναρτιςεων Σε όλουσ τουσ αλγορίκμουσ κα χρθςιμοποιιςουμε τισ ακόλουκεσ ςυναρτιςεισ: Εκτφπωςθ void printarray(int a[], int size) for(int i = 0; i < size; i++) cout << a[i] << " "; cout << endl;... printarray(a, numberused)... 8-10

#include <iostream> using namespace std; const int MAX_SIZE = 100; void fillarray(int a[], int size, int& numberused); void printarray(int a[], int size); void swapvalues(int& v1, int& v2); void sort(int a[], int size); int main( ) int a[max_size], numberused; fillarray(a, MAX_SIZE, numberused); sort(a, numberused); printarray(a, numberused); return 0; 8-11

Ταξινόμθςθ Πινάκων - Bubble Sort Μζκοδοσ τθσ πζτρασ (παραλλαγι: μζκοδοσ φυςαλίδασ ) Κάνει n-1 περάςματα πάνω από τον πίνακα: p=1,2,,n-1 Κατά το p πζραςμα, διαδοχικά ηεφγθ ςτοιχείων ςτισ κζςεισ i=0,1,,n-p ςυγκρίνονται Εάν είναι ςε αφξουςα τάξθ (ι ίςα), τα αφινουμε ζτςι Εάν δεν είναι ςε αφξουςα τάξθ, τα ανταλλάςςουμε Σε κάκε πζραςμα το επόμενο μεγαλφτερο ςτοιχείο βυκίηεται ςτθν ςωςτι κζςθ Επαναλαμβάνουμε μζχρι πλιρουσ ταξινόμθςθσ Εφκολο πρόγραμμα αλλά αργό Αρχίηοντασ τισ ςυγκρίςεισ από το τζλοσ του πίνακα προσ τθν αρχι ζχουμε τον αλγόρικμο τθσ φυςαλίδασ, όπου ςε κάκε πζραςμα το επόμενο μικρότερο ςτοιχείο ανεβαίνει ςτθν ςωςτι κζςθ 8-12

Ταξινόμθςθ Πινάκων - Bubble Sort Παράδειγμα Αρχικόσ πίνακασ: 3 4 2 6 7 Πζραςμα 1: 3 2 4 6 7 Πζραςμα 2: 2 3 4 6 7 void sort(int a[], int size) for(int pass = 1; pass < size; pass++) for(int i = 0; i < size pass; i++) if( a[i] > a[i+1]) swapvalues(a[i], a[i+1]); 8-13

Ταξινόμθςθ Πινάκων Selection Sort Μζκοδοσ τθσ επιλογισ του επόμενου μικρότερου ςτοιχείου Κάνει n-1 περάςματα πάνω από τον πίνακα: p=0,1,2,3,,n-2 Στο p πζραςμα επιλζγουμε το μικρότερο ςτοιχείο μεταξφ των ςτοιχείων ςτισ κζςεισ i=p,,n-1 και το ανταλλάςςουμε με αυτό ςτθν p κζςθ του πίνακα Στο πρϊτο πζραςμα επιλζγουμε το μικρότερο ςτοιχείο και το βάηουμε ςτθν πρϊτθ κζςθ του πίνακα, μετά επιλζγουμε το επόμενο μικρότερο ςτοιχείο και το ανταλλάςςουμε με αυτό ςτθν δεφτερθ κζςθ, κ.ο.κ Επαναλαμβάνουμε μζχρι πλιρουσ ταξινόμθςθσ Εφκολο πρόγραμμα αλλά αργό 8-14

Ταξινόμθςθ Πινάκων Selection Sort Παράδειγμα Αρχικόσ πίνακασ: 6 5 2 4 3 Πζραςμα 1: 2 5 6 4 3 Πζραςμα 2: 2 3 6 4 5 Πζραςμα 3: 2 3 4 6 5 Πζραςμα 4: 2 3 4 5 6 Δυο εκδοχζσ Μποροφμε να δουλζψουμε και με maximum 8-15

Ταξινόμθςθ Πινάκων Selection Sort void sort(int a[], int size) int min; for(int pass = 0; pass < size-1; pass++) min = pass; for(int i = pass+1; i < size; i++) if( a[i] < a[min]) min = i; swapvalues(a[pass], a[min]); 8-16

Ταξινόμθςθ Πινάκων Insertion Sort Μζκοδοσ τθσ ειςαγωγισ του επόμενου ςτοιχείου ςτθν κατάλλθλθ κζςθ Κάνει n-1 περάςματα πάνω από τον πίνακα p=1,2,3,,n-1 Στο p πζραςμα το p ςτοιχείο ειςάγεται ςτθν ςωςτι κζςθ ςυγκρινόμενο με τα ςτοιχεία ςτισ κζςεισ i=0,1,,p-1. Θεωροφμε ότι τα ςτοιχεία ςτισ κζςεισ i=0,1,,p-1 είναι ιδθ ταξινομθμζνα Σε κάκε πζραςμα ζνα ςτοιχείο ςυγκρίνεται με τα ςτοιχεία πιο πάνω από αυτό και ειςάγεται ςτθν ςωςτι κζςθ (γίνονται ανταλλαγζσ με τα μεγαλφτερα από αυτό ςτοιχεία) Επαναλαμβάνουμε μζχρι πλιρουσ ταξινόμθςθσ Εφκολο πρόγραμμα αλλά αργό 8-17

Ταξινόμθςθ Πινάκων Insertion Sort void sort(int a[], int size) int i, j, temp; for( int i = 1; i < size; i++ ) temp = a[ i ]; Δεν ζχει βρεκεί ακόμα θ ςωςτι κζςθ for(j = i; j > 0 && temp < a[ j - 1 ]; j-- ) a[ j ] = a[ j - 1 ]; Μετακίνθςθ όλων των a[ j ] = temp; ςτοιχείων μια κζςθ δεξιά 8-18

Ενότθτα 18 ΑΝΑΗΘΣΘΘ ΣΟΙΧΕΙΟΤ 8-19

Αναηιτθςθ ςτοιχείου ςε πίνακα Αναηιτθςθ κάποιασ τιμισ κλειδί ςε ζνα μονοδιάςτατο πίνακα. Υπάρχουν δφο βαςικζσ μζκοδοι. Γραμμικι αναηιτθςθ Απλι Συγκρίνουμε κάκε ςτοιχείο με τθν τιμι κλειδί που αναηθτάμε Χριςιμθ για μικροφσ μθ ταξινομθμζνουσ πίνακεσ Πολφ αργι, είναι δυνατόν να κάνει n ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία 8-20

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=0 8-21

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=1 8-22

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=2 8-23

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=3 8-24

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=4 8-25

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=5 8-26

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=6 8-27

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=6 Αν δεν βρζκθκε (δεν επιςτρζψαμε τθν κζςθ i του πίνακα) τότε επιςτρζφουμε -1 (θ κζςθ -1 ςε πίνακα δεν υπάρχει) 8-28

int search(int a[ ], int numberused, int target) int index = 0; bool found = false; while ((!found) && (index < numberused)) if (target == a[index]) else found = true; index++; if (found) return index; else return -1; return -1; 8-29

Δυαδικι Αναηιτθςθ Για ταξινομθμζνουσ πίνακεσ Δυαδικι Αναηιτθςθ Συγκρίνουμε το μεςαίο ςτοιχείο (middle) του πίνακα με το κλειδί (key) που αναηθτάμε If key = middle, τότε βρζκθκε If key < middle, τότε θ αναηιτθςθ γίνεται ςτο αριςτερό ιμιςυ του πίνακα If key > middle, τότε θ αναηιτθςθ γίνεται ςτο δεξιό ιμιςυ του πίνακα Επαναλαμβάνουμε τθν δυαδικι αναηιτθςθ ςτο ιμιςυ που επιλζξαμε Πολφ γριγορθ, κάνει το πολφ log(n) ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία Για n = 1024 κάνει το πολφ 10 ςυγκρίςεισ 8-30

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] low mid high 8-31

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] low mid high 8-32

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] low high mid 8-33

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] high low mid 8-34

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] high low mid 8-35

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] high < low: δεν βρέθηκε! high low mid 8-36

bool binarysearch(int a[ ], int low, int high, int key) int mid; if (low > high) else return false; mid = (low + high)/2; if (key == a[mid]) return true; else if (key < a[mid]) return binarysearch(a, low, mid - 1, key); else if (key > a[mid]) return binarysearch(a, mid + 1, high, key); 8-37

bool binarysearch(int a[ ], int low, int high, int key) int mid; if (low > high) else return false; mid = (low + high)/2; if (key == a[mid]) return true; else if (key < a[mid]) return binarysearch(a, low, mid - 1, key); else if (key > a[mid]) Αν κζλουμε και τθν κζςθ που βρίςκεται το key; return binarysearch(a, mid + 1, high, key); 8-38

Ενότθτα 19 ΕΛΑΧΙΣΑ & ΜΕΓΙΣΑ ΣΟΙΧΕΙΑ 8-39

Εφρεςθ Μεγίςτου Ελαχίςτου ταυτόχρονα Αν κζλουμε το μζγιςτο και το ελάχιςτο ςτοιχείο ενόσ πίνακα: void minmax1(int a[], int size, int& min, int& max) max = 0; min = 0; for(int i=0; i < size; i++) if(a[i] > a[max]) max = i; if(a[i] < a[min]) min = i; Κάνει 2n-2 ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία 8-40

Εφρεςθ Μεγίςτου Ελαχίςτου ταυτόχρονα Αν κζλουμε το μζγιςτο και το ελάχιςτο ςτοιχείο ενόσ πίνακα: void minmax2(int a[], int size, int& min, int& max) max = 0; min = 0; for(int i=0; i < size; i++) if(a[i] > a[max]) max = i; else if(a[i] < a[min]) min = i; Κάνει κατά μζςο όρο n-1 + n/2 ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία 8-41

Εφρεςθ Μεγίςτου Ελαχίςτου ταυτόχρονα Πιο γριγοροσ: διαιρεί τον πίνακα ςε δφο ιμιςυ και βρίςκει αναδρομικά μζγιςτο και ελάχιςτο ςε κάκε μιςό Το ολικό ελάχιςτο είναι το ελάχιςτο των δφο ελαχίςτων και αντίςτοιχα για το ολικό μζγιςτο MaxMin m=(f+l) / 2 Α F m m+1 L max1, min1 max2, min2 Α F m Α m+1 L Kάνει το πολφ 3n/2-2 ςυγκρίςεισ max=maximum(max1,max2) min=minimum(min1,min2) 8-42

void minmax3(int a[], int low, int high, int& min, int& max) int min1, max1, min2, max2; int size; size = high low + 1; if(size == 1) min = a[low]; max = a[high]; else if(size == 2) if(a[low] < a[high]) min = a[low]; max = a[high]; else min = a[high]; max = a[low]; else minmax3(a, low, (low + size/2-1), min1, max1); minmax3(a, (low + size/2), high, min2, max2); min = (min1 < min2)? min1 : min2 ; max = (max1 > max2)? max1 : max2 ; 8-43

Πίνακεσ (ςφνοψθ) Είναι μια ςυλλογι από μεταβλθτζσ Βρόχοι for ταιριάηουν απόλυτα για τουσ πίνακεσ Είςτε υπεφκυνοι για να μθν βγείτε ζξω από τα όρια του πίνακα Η παράμετροσ Πίνακα είναι ζνα "νζοσ" τφποσ Παρόμοια με το παράμετρο με αναφορά Τα ςτοιχεία του πίνακα αποκθκεφονται ςειριακά "Συνεχόμενο" κομμάτι ςτθν μνιμθ Μόνο θ διεφκυνςθ του 1 ου ςτοιχείου περνάει ςε ςυν/ςεισ Μερικϊσ ςυμπλθρωμζνοι πίνακεσ περιςςότερεσ μεταβλθτζσ Πολυδιάςτατοι πίνακεσ "πίνακασ από πίνακεσ" 8-44

Βιβλιογραφία Καλι Μελζτθ [1] W. Savitch, Πλιρθσ C++, Εκδόςεισ Τηιόλα, 2011 [2+ Η. Deitel and P. Deitel, C++ Προγραμματιςμόσ 6θ Εκδοςθ, Εκδόςεισ Μ. Γκιοφρδασ, 2013 [1]: 5.3, 13.3 Υλθ βιβλιογραφίασ *2+: 7.7, 7.8, 8.6, Κεφ. 19 8-45

Ανοικτά Ακαδημαϊκά Μαθήματα Πανεπιστήμιο Ιωαννίνων Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. Σημειώματα Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Λέκτορας Χάρης Παπαδόπουλος «Εισαγωγή στον Προγραμματισμό». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1105. Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.