ΑΛΓΟΡΙΘΜΟΙ ΜΕ C ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής CMOR Lab Computational Methodologies and Operations Research
Συγχώνευση διανυσμάτων (1) Παράδειγμα. Δίνονται δυο ταξινομημένα κατά αύξουσα τάξη διανύσματα Α και Β με n και m στοιχεία αντίστοιχα. Να γραφεί αλγόριθμος ταξινόμησης του C = [A B] 1 2 3 Λύση Αλγόριθμος: merge1 Δεδομένα: A, B, n, m Αποτελέσματα: C C A για i από 1 μέχρι m C insert(c, B(i)) AN n > m 2
Συγχώνευση διανυσμάτων (2) Έστω Α = [10 14 22 36 42 56], n=6 και Β= [12 18 26 40 52], m=5. Θέτουμε C=A= [10 14 22 36 42 56]. Επανάληψη 1 η (i=1). C insert(c, B(1)=12). Νέο C= [10 12 14 22 36 42 56]. Επανάληψη 2 η (i=2). C insert(c, B(2)=18). Νέο C= [10 12 14 18 22 36 42 56]. Επανάληψη 3 η (i=3). C insert(c, B(3)=26). Νέο C= [10 12 14 18 22 26 36 42 56]. 3
Συγχώνευση διανυσμάτων (3) Επανάληψη 4 η (i=4). C insert(c, B(4)=40). Νέο C= [10 12 14 18 22 26 36 40 42 56]. Επανάληψη 5 η (i=5). C insert(c, B(5)=52). Νέο C= [10 12 14 18 22 26 36 40 42 52 56]. 4
Quiz [5] Exhibition Planning Ένα μουσείο έχει έναν εκθεσιακό χώρο ο οποίος αποτελείται από 16 δωμάτια. Η κάτοψη του ορόφου με τα δωμάτια φαίνεται στο επόμενο σχήμα. Υπάρχει μια πόρτα μεταξύ δυο διαδοχικών δωματίων οριζόντια και κάθετα. Επιπρόσθετα, κάθε βορινό και νότιο δωμάτιο έχει μια πόρτα στην εξωτερική πλευρά του. Η διοίκηση του μουσείου θέλει να οργανώσει μια νέα έκθεση στην οποία πρέπει να συμμετέχουν και τα 16 δωμάτια. Πρέπει λοιπόν να σχεδιαστεί μια διαδρομή όπου οι επισκέπτες πρέπει να μπαίνουν από ένα βορινό δωμάτιο, να επισκέπτονται όλα τα υπόλοιπα μόνο μια φορά και να εξέρχονται του μουσείου από ένα νότιο δωμάτιο. Τέλος, η διοίκηση του μουσείου θέλει να έχει όσο γίνεται λιγότερες πόρτες ανοικτές. (a) Ποιος είναι ο ελάχιστος αριθμός πορτών οι οποίες πρέπει να είναι ανοικτές (μαζί με τις πόρτες εισόδου/εξόδου)? (b) Ποιες πόρτες εισόδου και εξόδου πρέπει να είναι ανοικτές για την έκθεση? (πόσες είναι όλες οι πιθανές διαδρομές που μπορούν να σχεδιαστούν?) 5
Quiz [5] Κάτοψη ορόφου μουσείου 6
Quiz [5] 7
Αλγόριθμοι Ταξινόμησης (1) Ταξινόμηση: Πιθανότατα το περισσότερο χρησιμοποιούμενο πρόβλημα της πληροφορικής. Το πρόβλημα: Δίνεται διάνυσμα ταξινομηθεί (κατά αύξουσα τάξη). Τ =[t 1 t 2... t n ] καιζητείταινα Τ ταξινομημένο κατά αύξουσα (φθίνουσα ) τάξη t 1 t 2 t 3... t n 1 t n,(t 1 t 2 t 3... t n 1 t n ) Κριτήρια αποδοτικότητας μιας μεθόδου ταξινόμησης αποτελούν ο αριθμός των συγκρίσεων που απαιτούνται και ο αριθμός των μετακινήσεων που γίνονται προκειμένου να επιτευχθεί η ταξινόμηση. 8
Αλγόριθμοι Ταξινόμησης (2) Παράδειγμα: Ταξινόμηση ακεραίων 9
Αλγόριθμοι Ταξινόμησης (3) Eσωτερική ταξινόμηση. H μνήμη του υπολογιστή είναι περιορισμένη με αποτέλεσμα οι αλγόριθμοι να χρησιμοποιούν μόνο το διάνυσμα προς ταξινόμηση και πιθανόν μερικές ακόμη μεταβλητές Εξωτερική ταξινόμηση. Οι αριθμοί προς ταξινόμηση συνδέονται με αντικείμενα, συνήθως μεγάλες εγγραφές με αποτέλεσμα οι μεταφορές τους από μια θέση σε άλλη να είναι πολύ χρονοβόρες. Υπολογίζεται S, του οποίου το S(j) = θέση j αντικειμένου μετά την ταξινόμηση. 10
Ταξινόμηση με Επιλογή (1) Επέλεξε το μικρότερο από τα n στοιχεία του Τ και ενάλλαξέ το με το πρώτο, δηλ. το Τ(1). Από τα στοιχεία Τ(2), Τ(3),, Τ(n) επέλεξε το μικρότερο και ενάλλαξέ το με το Τ(2), κ.ο.κ 1 2 3 4 5 6 Αλγόριθμος: min1 Δεδομένα: T, n Αποτελέσματα: min, index min Τ(1) index 1 για i από 2 μέχρι n αν Τ(i) < min min T(i) index i Στον επόμενο ψευδοκώδικα χρησιμοποιείται ο min1 που υπολογίζει το ελάχιστο στοιχείο διανύσματος X και τη θέση του (index) στο Χ. 11
Ταξινόμηση με Επιλογή (2) 12
Ταξινόμηση με Επιλογή (3) Αλγόριθμος: selectsort Δεδομένα: T, n Αποτελέσματα: T 1 2 3 4 για i από 1 μέχρι n 1 [min, index] min1(t(i:n)) T(i+index 1) T(i) T(i) min index = θέση ελάχιστου στοιχείου στο Τ(i:n) (=X). Επειδή πλήθος (Τ(1:i 1))=i 1, το ελάχιστο στοιχείο X(index) του X=Τ(i:n) βρίσκεται στη θέση i+index 1 του διανύσματος Τ. 13
Ταξινόμηση με Επιλογή (4) Παράδειγμα. T=[10157254] i min index i + index - 1 εναλλαγή ιάνυσμα T [10 15 7 2 5 4] 1 2 4 4 T(1) T(4) [2 15 7 10 5 4] 2 4 5 6 T(2) T(6) [2 4 7 10 5 15] 3 5 3 5 T(3) T(5) [2 4 5 10 7 15] 4 7 2 5 T(4) T(5) [2 4 5 7 10 15] 5 10 1 5 T(5) T(5) [2 4 5 7 10 15 ] 14
Ταξινόμηση με Επιλογή (5) Άσκηση. Γράψτε τον κώδικα του αλγορίθμου selectsort ώστε να μη κάνει χρήση της συνάρτησης min1. Αλγόριθμος: min1 Δεδομένα: T, n Αποτελέσματα: min, index Αλγόριθμος: selectsort Δεδομένα: T, n Αποτελέσματα: T 1 2 3 4 5 6 min Τ(1) index 1 για i από 2 μέχρι n αν Τ(i) < min min T(i) index i 1 2 3 4 για i από 1 μέχρι n 1 [min, index] min1(t(i:n)) T(i+index 1) T(i) T(i) min 15
Ταξινόμηση με Επιλογή (6) Απάντηση για i από 1 μέχρι n 1 min T(i) index i για j από i+1 μέχρι n αν T(j)<min min T(j) index j T(index) T(i) T(i) min 16
Ταξινόμηση με Επιλογή (7) Πρόβλημα. Τροποποιήστε τον αλγόριθμο της ταξινόμησης με επιλογή έτσι ώστε να καταγράφονται και οι θέσεις των ταξινομημένων στοιχείων στο αρχικό μη ταξινομημένο διάνυσμα. Για παράδειγμα, αν Τ είναι το αρχικό διάνυσμα και Χ το τελικό διάνυσμα, που προκύπτει από την ταξινόμηση του Τ και είναι Χ(k) = Τ(m), τότε στο διάνυσμα των αρχικών θέσεων, theseis, θα είναι theseis(k) = m. 17
Ταξινόμηση με Επιλογή (8) Απάντηση theseis 1:n για i από 1 μέχρι n 1 min T(i) index i για j από i+1 μέχρι n αν T(j)<min min T(j) index j T(index) T(i) T(i) min temp theseis(i) theseis(i) theseis(index) theseis(index) temp 18
Ταξινόμηση με Εναλλαγή (1) Αποτελείται από στάδια: το πολύ n 1 Σε κάθε στάδιο ελέγχεται, αν το τρέχον διάνυσμα είναι ταξινομημένο, δηλαδή αν είναι: Τ(j) T(j+1), j = 1, 2, n 1 Αν πράγματι είναι, οι υπολογισμοί σταματούν. Αν δεν είναι, τότε κατά τη διάρκεια του σταδίου και για όλα τα j για τα οποία ισχύει: Τ(j) > T(j + 1), εναλλαγή(τ(j), Τ(j + 1)) 19
Ταξινόμηση με Εναλλαγή (2) 20
Ταξινόμηση με Εναλλαγή (3) Σημαντική παρατήρηση. Στο τέλος του σταδίου k τα τελευταία k στοιχεία είναι ταξινομημένα. Προέλευση ονοματολογίας: «ταξινόμηση με τη μέθοδο της φυσαλίδας bubblesort» Στον ψευδοκώδικα, όπου t=πλήθος εναλλαγών σε ένα στάδιο, (Αν t=0 STOP) i=δείκτης: τα στοιχεία i+1, i+2,..., n είναι ταξινομημένα 21
Ταξινόμηση με Εναλλαγή (4) Αλγόριθμος: bubblesort εδομένα: T, n Αποτελέσματα: T 1 2 3 4 5 6 7 8 9 i n t -1 όσο i 2 και t 0 t 0 για j από 1 μέχρι i-1 αν Τ(j) > T(j+1) [Τ(j), T(j+1)] εναλλαγή(t(j), T(j+1)) t t+1 i i 1 22
Ταξινόμηση με Εναλλαγή (5) Εφαρμογή : Τ =[102746], n=5 i = 5, t = 1, t = 0 j = 1, T = [ 2 10 7 4 6 ], t = 1 j = 2, T = [ 2 7 10 4 6 ], t = 2 j = 3, T = [ 2 7 4 10 6 ], t = 3 j = 4, T = [ 2 7 4 6 10 ], t = 4 i = 4, t = 0 j = 2, T = [ 2 4 7 6 10 ], t = 1 i = 3, j = 3, T = [ 2 4 6 7 10 ], t = 2 t = 0 i = 2 Demo: Bubblesort 23
Ταξινόμηση με Εναλλαγή (6) Άσκηση. Ο αλγόριθμος bubblesort που περιγράψαμε μπορεί να γίνει λίγο πιο αποτελεσματικός. Αν στην πρώτη επανάληψη του βρόχου του όσο η τελευταία εναλλαγή έγινε για την τιμή j=k, συμπεραίνουμε αμέσως ότι τα στοιχεία T(k+1), T(k+2),, T(n) είναι ταξινομημένα και ότι θα παραμείνουν στη θέση τους σε όλες τις επόμενες επαναλήψεις. Τροποποιήστε τον ψευδοκώδικα bubblesort ώστε να κάνει χρήση αυτής της βελτίωσης. 24
Ταξινόμηση με Εναλλαγή (7) Απάντηση. 1 2 3 4 5 6 7 8 9 10 i n t 1 όσο i 2 και t 0 t 0 για j από 1 μέχρι i 1 αν Τ(j) > T(j+1) [Τ(j), T(j+1)] εναλλαγή(t(j), T(j+1)) t t+1 k j i k 25
Πρόβλημα (για το σπίτι) Ένα παρόμοιο αποτέλεσμα με αυτό του προηγουμένου παραδείγματος ισχύει στην περίπτωση που ο αλγόριθμος bubblesort δουλεύει έτσι ώστε το μικρότερο στοιχείο να τοποθετείται όσο γίνεται αριστερά. Να αναπτυχθεί ψευδοκώδικας ο οποίος να συμπεριλαμβάνει εναλλακτικά τις βελτιώσεις αυτού του προβλήματος και του προηγούμενου. Για παράδειγμα, στο πρώτο στάδιο να εφαρμόζεται η βελτίωση του προηγουμένου προβλήματος, στο δεύτερο η βελτίωση του τρέχοντος προβλήματος κ.ο.κ. Ποιος είναι ο μέγιστος αριθμός των σταδίων; 26
Ταξινόμηση με Εναλλαγή (8) Άσκηση.Τροποποιείστε τον ψευδοκώδικα bubblesort έτσι ώστε να υπολογίζει και το διάνυσμα theseis. 1 2 3 4 5 6 7 8 9 10 11 theseis 1:n i n t 1 όσο i 2 και t 0 t 0 για j από 1 μέχρι i 1 αν Τ(j) > T(j+1) [Τ(j), T(j+1)] εναλλαγή(t(j), T(j+1)) [theseis(j), theseis(j+1)] εναλλαγή(theseis(j), theseis(j+1)) t t+1 i i 1 27
Ταξινόμηση με Εισαγωγή (1) Περιγραφή της μεθόδου: Αν τα πρώτα i στοιχεία του Τ είναι ταξινομημένα, κάνε εισαγωγή του Τ(i + 1) στο Τ(1:i) ώστε το διάνυσμα Τ(1:i + 1) ναταξινομηθεί. Αιτιολογία ονοματολογίας: Μέθοδος του χαρτοπαίκτη. Αλγόριθμος: insertsort Δεδομένα: T, n Αποτελέσματα: T 1 2 για i από 2 μέχρι n Τ(1:i) insert(t(1:i 1), T(i)) 28
Ταξινόμηση με Εισαγωγή (2) Εφαρμογή. T = [ 15 10 7 2 5 4 ] i = 2 Τ = [15 10 7 2 5 4] i = 3 Τ = [10 15 7 2 5 4] i = 4 Τ =[ 7 10 15 2 5 4] i = 5 Τ = [ 2 7 10 15 5 4] i = 6 Τ =[2 5 7 10 15 4] Τ = [ 2 4 5 7 10 15] 29
Ταξινόμηση με Εισαγωγή (3) Άσκηση. Γράψτε τον κώδικα του αλγόριθμου insertsort έτσι ώστε να μη κάνει χρήση της συνάρτησης insert. 1 2 3 4 5 6 7 Αλγόριθμος: insert Δεδομένα: T, m, a Αποτελέσματα: T T(m+1) a i m+1 όσο i > 1 και Τ(i 1) > T(i) temp T(i 1) T(i 1) T(i) T(i) temp i i 1 1 2 Αλγόριθμος: insertsort Δεδομένα: T, n Αποτελέσματα: T για i από 2 μέχρι n Τ(1:i) insert(t(1:i 1), T(i)) 30
Ταξινόμηση με Εισαγωγή (4) Άσκηση. Τροποποιείστε τον ψευδοκώδικα του αλγορίθμου ταξινόμησης με εισαγωγή (insertsort), χωρίς να κάνει χρήση της insert, και επιπρόσθετα να υπολογίζει και το διάνυσμα theseis. 31
Quiz [6] 100 διαφορετικοί αριθμοί είναι γραμμένοι σε 100 κάρτες, ένας αριθμός ανά κάρτα. Οι κάρτες είναι διατεταγμένες σε έναν πίνακα 10x10 σύμφωνα με τους παρακάτω κανόνες. 1. Κάθε γραμμή (από αριστερά δεξιά) περιλαμβάνει κάρτες με τους αριθμούς ταξινομημένους σε αύξουσα διάταξη. 2. Κάθε στήλη (από πάνω κάτω) περιλαμβάνει κάρτες με τους αριθμούς ταξινομημένους σε αύξουσα διάταξη. Όλες οι κάρτες είναι τοποθετημένες έτσι ώστε οι αριθμοί να μην είναι ορατοί. Σχεδιάστε έναν αλγόριθμο ο οποίος θα αναζητεί έναν αριθμό στους 100 γυρίζοντας το πολύ 20 κάρτες. 32
Quiz [6] x x x x x x x x x x x x x x x x x x x 33
Quiz [6] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 34