I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11

Σχετικά έγγραφα
I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11

3η Σειρά Γραπτών Ασκήσεων

Outline. 6 Edit Distance

3η Σειρά Γραπτών Ασκήσεων

2η Σειρά Γραπτών Ασκήσεων

1η Σειρά Γραπτών Ασκήσεων

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 Άσκηση 5 6 Προγραμματιστική Άσκηση 1 7 Προγραμματιστική Άσκηση 2 (CoReLab - NTUA) Αλγόριθμοι - 3

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

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

Μη γράφετε στο πίσω μέρος της σελίδας

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

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

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

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

Μη γράφετε στο πίσω μέρος της σελίδας

Outline 1 Άσκηση 1: Εφαρμογές BFS DFS 2 Άσκηση 2: Μια Συνάρτηση Κόστους σε Κατευθυνόμενα Γραφήματα 3 Άσκηση 3: Ανάλυση Ασφάλειας 4 Άσκηση 4: Το Σύνολο

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

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

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

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

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

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

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

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

Θεωρία Γραφημάτων 6η Διάλεξη

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

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

4η Γραπτή Ασκηση Αλγόριθμοι και Πολυπλοκότητα CoReLab ΣΗΜΜΥ 7 Φεβρουαρίου 2017 CoReLab (ΣΗΜΜΥ) 4η Γραπτή Ασκηση 7 Φεβρουαρίου / 38

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

4η Γραπτή Ασκηση Αλγόριθμοι και Πολυπλοκότητα CoReLab ΣΗΜΜΥ 3/2/2019 CoReLab (ΣΗΜΜΥ) 4η Γραπτή Ασκηση 3/2/ / 37

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

Κατανεμημένα Συστήματα Ι

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

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

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

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

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Τεχνικές Σχεδιασμού Αλγορίθμων

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

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

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

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

Μη γράφετε στο πίσω μέρος της σελίδας

Αλγόριθμοι και πολυπλοκότητα Δυναμικός Προγραμματισμός

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

Δυναμικός προγραμματισμός για δέντρα

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

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

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Δρομολόγηση Και Πολύχρωματισμός. Γραφημάτων ΚΑΡΑΓΕΩΡΓΟΣ ΤΙΜΟΘΕΟΣ Α.Μ 1026

Κατανεμημένα Συστήματα Ι

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

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

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

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

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

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

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

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

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

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

Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα:

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

Προσεγγιστικοί Αλγόριθμοι

Άπληστοι Αλγόριθµοι (CLR, κεφάλαιο 17)

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

Υπολογιστικά & Διακριτά Μαθηματικά

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

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

Πληρότητα της μεθόδου επίλυσης

4.3 Ορθότητα και Πληρότητα

HY Λογική Διδάσκων: Δ. Πλεξουσάκης

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

Ερώτημα 1. Μας δίνεται μια συλλογή από k ακολοθίες, k >=2 και αναζητούμε το πρότυπο Ρ, μεγέθους n.

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

(Γραμμικές) Αναδρομικές Σχέσεις

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

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Ξέρουμε ότι: Συνάρτηση-απεικόνιση με πεδίο ορισμού ένα σύνολο Α και πεδίο τιμών ένα σύνολο Β είναι κάθε μονοσήμαντη απεικόνιση f του Α στο Β.

Στοχαστικές Στρατηγικές. διαδρομής (1)

(Γραμμικές) Αναδρομικές Σχέσεις

Λύσεις για τις ασκήσεις του lab5

Advanced Data Indexing

Ασκήσεις (2) Άσκηση 1

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

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

Σειρά Προβλημάτων 4 Λύσεις

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

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

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

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

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

Transcript:

Αλγόριθμοι και Πολυπλοκότητα 2η Σειρά Γραπτών και Προγραμματιστικών Ασκήσεων CoReLab ΣΗΜΜΥ - Ε.Μ.Π. Δεκέμβριος 2016 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 1 / 65

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 1η προγραμματιστική 6 2η προγραμματιστική (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 2 / 65

Άσκηση 1 (α.1): Δρομολόγηση Μαθημάτων Το Πρόβλημα Δρομολόγησης Μαθημάτων Είσοδος: Χρονικά διαστήματα διδασκαλίας μαθημάτων [s i, f i ), i = 1,..., n. Ζητείται: Μεγίστου πλήθους σύνολο μαθημάτων χωρίς επικαλύψεις. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 3 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 1. Λιγότερες Επικαλύψεις Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 Λύση Κριτηρίου, S 1 : Επιλέγει τα I 6, I 1, I 4. = S 1 = 3. Βέλτιστη Λύση, OPT : {I 1, I 2, I 3, I 4 } = OPT = 4. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 4 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 1. Λιγότερες Επικαλύψεις Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 Λύση Κριτηρίου, S 1 : Επιλέγει τα I 6, I 1, I 4. = S 1 = 3. Βέλτιστη Λύση, OPT : {I 1, I 2, I 3, I 4 } = OPT = 4. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 4 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 1. Λιγότερες Επικαλύψεις Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 Λύση Κριτηρίου, S 1 : Επιλέγει τα I 6, I 1, I 4. = S 1 = 3. Βέλτιστη Λύση, OPT : {I 1, I 2, I 3, I 4 } = OPT = 4. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 4 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 2. Μεγαλύτερη Διάρκεια Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 Λύση Κριτηρίου, S 2 : Διαγράφει πρώτα το I 1 και μετά το I 2 = S 2 = {I 3 } = 1. Βέλτιστη Λύση, OPT : {I 1, I 3 } = OPT = 2. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 5 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 2. Μεγαλύτερη Διάρκεια Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 Λύση Κριτηρίου, S 2 : Διαγράφει πρώτα το I 1 και μετά το I 2 = S 2 = {I 3 } = 1. Βέλτιστη Λύση, OPT : {I 1, I 3 } = OPT = 2. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 5 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 2. Μεγαλύτερη Διάρκεια Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 Λύση Κριτηρίου, S 2 : Διαγράφει πρώτα το I 1 και μετά το I 2 = S 2 = {I 3 } = 1. Βέλτιστη Λύση, OPT : {I 1, I 3 } = OPT = 2. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 5 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 3. Περισσότερες Επικαλύψεις Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 I 4 I 5 I 6 I 7 Λύση Κριτηρίου, S 3 : Διαγράφει πρώτα το I 4, έπειτα τα I 3, I 5, I 2, I 6. = S 3 = {I 1, I 7 } = 2. Βέλτιστη Λύση, OPT : {I 1, I 4, I 7 } = OPT = 3. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 6 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 3. Περισσότερες Επικαλύψεις Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 I 4 I 5 I 6 I 7 Λύση Κριτηρίου, S 3 : Διαγράφει πρώτα το I 4, έπειτα τα I 3, I 5, I 2, I 6. = S 3 = {I 1, I 7 } = 2. Βέλτιστη Λύση, OPT : {I 1, I 4, I 7 } = OPT = 3. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 6 / 65

Άσκηση 1 (α.1): Άπληστα Κριτήρια Δρομολόγησης Μαθημάτων 3. Περισσότερες Επικαλύψεις Λάθος! Αντιπαράδειγμα: I 1 I 2 I 3 I 4 I 5 I 6 I 7 Λύση Κριτηρίου, S 3 : Διαγράφει πρώτα το I 4, έπειτα τα I 3, I 5, I 2, I 6. = S 3 = {I 1, I 7 } = 2. Βέλτιστη Λύση, OPT : {I 1, I 4, I 7 } = OPT = 3. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 6 / 65

Άσκηση 1 (α.2): Δρομολόγηση Μαθημάτων με Βάρη Είσοδος: Χρονικά διαστήματα μαθημάτων [s i, f i ), i = 1,..., n με αντίστοιχες διδακτικές μονάδες w i. Ζητείται: Σύνολο μαθημάτων χωρίς επικαλύψεις με μέγιστο συνολικό άθροισμα διδακτικών μονάδων. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 7 / 65

Άσκηση 1 (α.2): Δρομολόγηση Μαθημάτων με Βάρη Λύση: Ταξινομούμε τα χρονικά διαστήματα σε αύξουσα σειρά με βάση το χρόνο ολοκλήρωσής τους, έστω για ευκολία f 1,..., f n αυτή η σειρά. Συμβολίζουμε με C[i] το μέγιστο σύνολο διδακτικών μονάδων μίας βέλτιστης λύσης για τα μαθήματα {1,..., i}. Προφανώς, η ζητούμενη λύση είναι η C[n] και η σχέση αρχικοποιείται στο C[1] = w 1. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 8 / 65

Άσκηση 1 (α.2): Δρομολόγηση Μαθημάτων με Βάρη Λύση: Για την κατασκευή της αναδρομικής σχέσης, χρειαζόμαστε έναν πίνακα μήκους n, κάθε στοιχείο prev[i] του οποίου θα περιέχει το δείκτη του μαθήματος που τελειώνει αργότερα και δεν έχει επικάλυψη με το i. Η αναδρομική σχέση είναι: C[i] = max{w i + C[prev[i]], C[i 1]} (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 9 / 65

Άσκηση 1 (α.2): Δρομολόγηση Μαθημάτων με Βάρη Ταξινόμηση διαστημάτων και κατασκευή πίνακα prev: O(n log n). Εύρεση ενός εκ των n στοιχείων του πίνακα της C : O(1). Άρα συνολικά: Πολυπλοκότητα O(n log n) Σημείωση: Η ανακατασκευή της λύσης γίνεται από τον πίνακα, σε O(n). (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 10 / 65

Άσκηση 1 (β): Ανακοινώσεις Είσοδος: Χρονικά διαστήματα μαθημάτων [s i, f i ), i = 1,..., n. Ζητείται: Σύνολο στιγμών που αγγίζουν όλα τα μαθήματα και έχουν ελάχιστο πλήθος. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 11 / 65

Άσκηση 1 (β): Ανακοινώσεις Λύση: Θεωρούμε ότι μία ανακοίνωση τη χρονική στιγμή f i ενημερώνει και τους φοιτητές του μαθήματος i. Ταξινομούμε τα χρονικά διαστήματα σε αύξουσα σειρά με βάση το χρόνο ολοκλήρωσής τους, έστω για ευκολία f 1,..., f n αυτή η σειρά. Βάζουμε στη λύση μας το σημείο f i του πρώτου ακάλυπτου διαστήματος, σημειώνουμε ποιά διαστήματα έχουμε καλύψει και συνεχίζουμε με το επόμενο ακάλυπτο διάστημα. (βλ. Ἁσκήσεις σε άπληστους αλγόριθμους και δυναμικό προγραμματισμό ) Πολυπλοκότητα O(n log n) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 12 / 65

Άσκηση 1 (β): Ανακοινώσεις Απόδειξη ορθότητας: Εστω P το σύνολο στιγμών που επέλεξε ο αλγόριθμός μας, O το σύνολο της βέλτιστης λύσης και έστω ότι στο πρώτο σημείο στο οποίο διαφέρουν ο αλγόριθμός μας επιλέγει p = f k 1 (για να καλύψει το διάστημα [s k, f k )) ενώ η βέλτιστη λύση έχει στην ίδια θέση τη στιγμή o. Αν o > p, τότε η βέλτιστη λύση δεν αγγίζει το διάστημα k (αφού μέχρι τώρα καλύπτουν τα ίδια διαστήματα) και οι φοιτητές του μαθήματος k μένουν ανενημέρωτοι στη βέλτιστη λύση! Άτοπο. Αν o < p: Μέχρι τώρα και οι δύο λύσεις έχουν καλύψει όλα τα διαστήματα που τελειώνουν πριν τη στιγμή f k. Άρα αντικαθιστώντας το o με p = f k 1 η βέλτιστη λύση συνεχίζει να καλύπτει το [s k, f k ) και αποκλείεται να χάνει κάποιο άλλο διάστημα γιατί κάθε άλλο ακάλυπτο διάστημα τελειώνει μετά το f k άρα αν το άγγιζε με το o θα το αγγίζει και με το p. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 13 / 65

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 1η προγραμματιστική 6 2η προγραμματιστική (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 14 / 65

Άσκηση 2 (α): Πομποί και Δέκτες Είσοδος: Ακολουθία a = a 1,..., a n όπου i a i = r ή a i = t. Ζητείται: Μέγιστη υπακολουθία όπου κάθε πομπός αντιστοιχεί σε ένα δέκτη προς τα δεξιά του. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 15 / 65

Άσκηση 2 (α): Πομποί και Δέκτες Λύση: Με χρήση στοίβας Διατρέχουμε την είσοδο από αριστερά προς τα δεξιά, έχοντας αρχικοποιήσει ένα μετρητή ζευγών p = 0. Κάθε φορά που συναντάμε πομπό, τον βάζουμε στη στοίβα. Κάθε φορά που συναντάμε δέκτη, αν η στοίβα είναι μη κενή βγάζουμε έναν πομπό και αυξάνουμε το μετρητή p + +, διαφορετικά προχωράμε στο επόμενο στοιχείο. Μήκος μέγιστης ζητούμενης υπακολουθίας: 2p. Πολυπλοκότητα O(n) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 16 / 65

Άσκηση 2 (α): Πομποί και Δέκτες Λύση: Με χρήση στοίβας Διατρέχουμε την είσοδο από αριστερά προς τα δεξιά, έχοντας αρχικοποιήσει ένα μετρητή ζευγών p = 0. Κάθε φορά που συναντάμε πομπό, τον βάζουμε στη στοίβα. Κάθε φορά που συναντάμε δέκτη, αν η στοίβα είναι μη κενή βγάζουμε έναν πομπό και αυξάνουμε το μετρητή p + +, διαφορετικά προχωράμε στο επόμενο στοιχείο. Μήκος μέγιστης ζητούμενης υπακολουθίας: 2p. Πολυπλοκότητα O(n) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 16 / 65

Άσκηση 2 (α): Πομποί και Δέκτες Λύση: Με χρήση στοίβας Διατρέχουμε την είσοδο από αριστερά προς τα δεξιά, έχοντας αρχικοποιήσει ένα μετρητή ζευγών p = 0. Κάθε φορά που συναντάμε πομπό, τον βάζουμε στη στοίβα. Κάθε φορά που συναντάμε δέκτη, αν η στοίβα είναι μη κενή βγάζουμε έναν πομπό και αυξάνουμε το μετρητή p + +, διαφορετικά προχωράμε στο επόμενο στοιχείο. Μήκος μέγιστης ζητούμενης υπακολουθίας: 2p. Πολυπλοκότητα O(n) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 16 / 65

Άσκηση 2 (α): Πομποί και Δέκτες Λύση: Με χρήση στοίβας Διατρέχουμε την είσοδο από αριστερά προς τα δεξιά, έχοντας αρχικοποιήσει ένα μετρητή ζευγών p = 0. Κάθε φορά που συναντάμε πομπό, τον βάζουμε στη στοίβα. Κάθε φορά που συναντάμε δέκτη, αν η στοίβα είναι μη κενή βγάζουμε έναν πομπό και αυξάνουμε το μετρητή p + +, διαφορετικά προχωράμε στο επόμενο στοιχείο. Μήκος μέγιστης ζητούμενης υπακολουθίας: 2p. Πολυπλοκότητα O(n) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 16 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Είσοδος: Ακολουθία n (άρτιος) ζευγών (T i, R i ), όπου T i η κατανάλωση ισχύος της κεραίας i όταν λειτουργεί ως πομπός και R i T i όταν λειτουργεί ως δέκτης. Ζητείται: Ελάχιστη συνολική κατανάλωση ισχύος, όπου για κάθε i που λειτουργεί ως πομπός υπάρχει ένα και μοναδικό j > i που λειτουργεί ως δέκτης. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 17 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Λύση: Δυναμικός Προγραμματισμός Αναδρομική Σχέση C[i, j] = min{c[i 1, j + 1] + R i, C[i 1, j 1] + T i } όπου C[i, j] το κόστος της βέλτιστης λύσης μέχρι και την i-οστή κεραία, έχοντας j i πομπούς που δεν έχουν αντιστοιχηθεί σε δέκτες προς το παρόν. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 18 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Λύση: C[i, j] = min{c[i 1, j + 1] + R i, C[i 1, j 1] + T i } Αν έχουμε τη βέλτιστη λύση για i 1 κεραίες τότε: Είτε υπάρχουν j + 1 πομποί που δεν έχουν αντιστοιχηθεί σε δέκτες και η i-οστή κεραία γίνεται δέκτης οπότε μένουν j πομποί που δεν έχουν αντιστοιχηθεί σε δέκτες και προστίθεται R i στη συνολική κατανάλωση ισχύος. Είτε υπάρχουν j 1 πομποί που δεν έχουν αντιστοιχηθεί σε δέκτες και η i-οστή κεραία γίνεται πομπός οπότε μένουν j πομποί που δεν έχουν αντιστοιχηθεί σε δέκτες και προστίθεται T i στη συνολική κατανάλωση ισχύος. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 19 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Λύση: Η ζητούμενη λύση είναι η C[n, 0]. Πολυπλοκότητα Υπολογισμός ενός εκ των Θ(n 2 /2) στοιχείων του C σε O(1) = O(n 2 ) Υπάρχει πιο αποδοτικός αλγόριθμος; (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 20 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Λύση: Η ζητούμενη λύση είναι η C[n, 0]. Πολυπλοκότητα Υπολογισμός ενός εκ των Θ(n 2 /2) στοιχείων του C σε O(1) = O(n 2 ) Υπάρχει πιο αποδοτικός αλγόριθμος; (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 20 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Καλύτερη Λύση: Για κάποια ανάθεση πομπών-δεκτών έστω S[i] το πλήθος πομπών μείον το πλήθος δεκτών στο διάστημα [1, i]. Μία ανάθεση είναι έγκυρη αν και μόνο αν για κάθε i {1,..., n} ισχύει S[i] 0 και S[n] = 0. Θεωρούμε ότι έχουμε μια βέλτιστη έγκυρη ανάθεση στο διάστημα [1, i]. Αν ο i είναι περιττός, για να την επεκτείνουμε βάζουμε ένα δέκτη στο i + 1 (S[i + 1] = 0). Αν είναι άρτιος, βάζουμε ένα δέκτη στο i + 1, αλλά έχουμε S[i + 1] = 1, άρα κάποιος δέκτης στο [1, i + 1] πρέπει να μετατραπεί σε πομπό: Μετατρέπουμε αυτόν που ελαχιστοποιεί την κατανάλωση, δηλαδή αυτόν με το ελάχιστο T j R j. Τώρα έχουμε S[i + 1] = 0. Για να βρίσκουμε το δέκτη με το ελάχιστο T j R j θα χρειαστούμε ένα min-heap στο οποίο οι λειτουργίες εισαγωγής και εξαγωγής ελαχίστου στοιχείου γίνονται το πολύ σε O(log n). (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 21 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Αλγόριθμος: Αρχικοποίησε ένα κενό min-heap Q Για i = 1...n Θεώρησε τον i ως δέκτη, πρόσθεσε R i στο συνολικό κόστος και βάλε το ζεύγος (T i R i, i) στο Q Αν S[i] < 0, αφαίρεσε από το Q το δέκτη με το ελάχιστο T j R j, μετάτρεψέ τον σε πομπό και αύξησε το συνολικό κόστος κατά T j R j. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 22 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Χρονική Πολυπλοκότητα O(n log n) Μένει να δείξουμε το επαγωγικό βήμα, δηλαδή ότι η λύση στο διάστημα [1, i + 1] είναι βέλτιστη, δεδομένου ότι η λύση στο [1, i] είναι βέλτιστη. Αν i περιττός (S[i] = 1), τότε προφανώς η θέση i + 1 πρέπει να έχει δέκτη για να είναι έγκυρη η λύση και γιατί είναι το φθηνότερο. Άρα η λύση μας είναι βέλτιστη. Αν i άρτιος (S[i] = 0) τότε αν προσθέσουμε δέκτη στη θέση i + 1 για να είναι έγκυρη η λύση πρέπει να μετατρέψουμε ένα δέκτη σε πομπό. Προφανώς αφού η λύση είναι μέχρι στιγμής ελαχίστου κόστους, προσθέτοντας το μικρότερο T j R j λόγω της αλλαγής (και R i+1 αντί T i+1 ) έχουμε λύση μικρότερου δυνατού κόστους άρα ακόμα βέλτιστη. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 23 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 0 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 24 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) -1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 0 + 6 = 6 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 25 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 6 + (8-6) = 8 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 26 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 8 + 3 = 11 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 27 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0-1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 11 + 1 = 12 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 28 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 12 + (5-1)=16 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 29 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 1 0 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 16 + 4 = 20 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 30 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 1 0-1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 20 + 3 = 23 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 31 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 1 2 1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 23 + (6-4)=25 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 32 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 1 2 1 0 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 25+7=32 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 33 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 0 1 2 1 0-1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 32+5=37 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 34 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 2 3 4 3 2 1 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 37+(9-3)=43 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 35 / 65

Άσκηση 2 (β): Πομποί και Δέκτες Παράδειγμα: i 1 2 3 4 5 6 7 8 S(i) 1 2 3 4 3 2 1 0 T i 8 9 5 6 10 30 12 2 R i 6 3 1 4 3 7 5 1 Κατανάλωση: 43+1=44 (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 36 / 65

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 1η προγραμματιστική 6 2η προγραμματιστική (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 37 / 65

Άσκηση 3 (α): Διαγωνισμός Χορού Είσοδος: Βαθμολογία score[i] και χρόνος ξεκούρασης rest[i] για κάθε τραγούδι i {1,..., n}. Ζητείται: Επιτρεπόμενο σύνολο τραγουδιών που μεγιστοποιεί τη συνολική βαθμολογία. Λύση: Δυναμικός Προγραμματισμός (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 38 / 65

Άσκηση 3 (α): Διαγωνισμός Χορού Λύση: Εστω S[i] η μέγιστη συνολική βαθμολογία από το i μέχρι και το n. Εχουμε δύο επιλογές: Επιλέγουμε το i και μένει η μέγιστη συνολική βαθμολογία από το i + rest[i] + 1 και μετά. Δεν επιλέγουμε το i και κρατάμε τη μέγιστη συνολική βαθμολογία από το επόμενο κιόλας τραγούδι και μετά. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 39 / 65

Άσκηση 3 (α): Διαγωνισμός Χορού Λύση: Επομένως, η αναδρομική σχέση είναι: S[i] = max{score[i] + S[i + rest[i] + 1], S[i + 1]} Κατασκευάζουμε τον πίνακα από το n προς το 1 και το ζητούμενο είναι το S[1]. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 40 / 65

Άσκηση 3 (α): Διαγωνισμός Χορού Χρονική Πολυπλοκότητα Εύρεση ενός εκ των n στοιχείων του πίνακα: O(1). Άρα συνολικά: O(n) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 41 / 65

Άσκηση 3 (β): Διαγωνισμός Χορού Είσοδος: Βαθμολογία score[i], χρόνος ξεκούρασης rest[i] και χρόνος προετοιμασίας prep[i] για κάθε τραγούδι i {1,..., n}. Ζητείται: Επιτρεπόμενο σύνολο τραγουδιών που μεγιστοποιεί τη συνολική βαθμολογία. Λύση: Δυναμικός Προγραμματισμός (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 42 / 65

Άσκηση 3 (β): Διαγωνισμός Χορού Λύση: Εστω S[i] η μέγιστη συνολική βαθμολογία από το i μέχρι και το n. Εχουμε δύο επιλογές: Επιλέγουμε το i και μένει η μέγιστη συνολική βαθμολογία από το επόμενο επιτρεπόμενο τραγούδι (λόγω προετοιμασίας του και ξεκούρασης του i) και μετά. Δεν επιλέγουμε το i και κρατάμε τη μέγιστη συνολική βαθμολογία από το επόμενο επιτρεπόμενο (λόγω προετοιμασίας του) τραγούδι και μετά. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 43 / 65

Άσκηση 3 (β): Διαγωνισμός Χορού Λύση: Επομένως, η αναδρομική σχέση είναι: S[i] = max{score[i] + S[next[1, i]], S[next[0, i]]} όπου next[x, i] = min j {i + rest[i] x + 1,..., i + M + 1} τέτοιο ώστε j prep[j] 1 i. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 44 / 65

Άσκηση 3 (β): Διαγωνισμός Χορού Χρονική Πολυπλοκότητα Εύρεση ενός εκ των n στοιχείων του πίνακα: O(M). Άρα συνολικά: O(nM) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 45 / 65

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 1η προγραμματιστική 6 2η προγραμματιστική (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 46 / 65

Άσκηση 4: Βγάζοντας Βόλτα το Σκύλο Είσοδος: Ακολουθίες σημείων (p 1,..., p n ) και (q 1,..., q m ). Ζητείται: Αν p(t) {p 1,..., p n } και q(t) {q 1,..., q m } τα σημεία στα οποία βρίσκεστε εσείς και ο σκύλος σας αντίστοιχα τη χρονική στιγμή t, ζητείται το min p,q max t d(p(t), q(t)). (Δηλαδή για την καλύτερη παράλληλη διάσχιση, η μέγιστη απόσταση σημείων στα οποία βρίσκεστε ταυτόχρονα.) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 47 / 65

Άσκηση 4: Βγάζοντας Βόλτα το Σκύλο Λύση: Δυναμικός Προγραμματισμός Αναδρομική Σχέση c[i, j] = max{min{c[i 1, j], c[i 1, j ]), c[i, j 1]}, d(p i, p j )} όπου c[i, j] το ελάχιστο μήκος λουριού για είσοδο (p 1,..., p i ) και (q 1,..., q j ) Σίγουρα κάποια στιγμή θα βρεθείτε και οι δύο στις τελικές θέσεις p i, q j, άρα το λουρί πρέπει να έχει μήκος τουλάχιστον d(p i, q j ). Για να φτάσετε εκεί, είτε κινηθήκατε και οι δύο ταυτόχρονα, είτε μόνο ο σκύλος, είτε μόνο εσείς. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 48 / 65

Άσκηση 4: Βγάζοντας Βόλτα το Σκύλο Λύση: c[i, j] = max{min{c[i 1, j], c[i 1, j 1], c[i, j 1]}, d(p i, p j )} Η ζητούμενη λύση είναι η c[n, m] και αρχικοποιούμε c[i, 0] = c[0, j] = 0, i [n], j [m]. Πολυπλοκότητα O(nm) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 49 / 65

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 1η προγραμματιστική 6 2η προγραμματιστική (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 50 / 65

1η Προγραμματιστική: Εμπόριο Σοκολάτας Είσοδος: Ακολουθία τιμών p(1),..., p(n) και επιτρεπόμενο πλήθος αγοραπωλησιών K. Εξοδος: Μέγιστο κέρδος, αν οι ενέργειες αγοράς και πώλησης πρέπει να γίνονται εναλλάξ. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 51 / 65

1η Προγραμματιστική: Εμπόριο Σοκολάτας Ιδέα Δυναμικού Προγραμματισμού Αν j είναι το πλήθος των αγοραπωλησιών, μπορούμε να χρησιμοποιούμε το j%2 για να ξεχωρίζουμε αν βρισκόμαστε σε σημείο πώλησης ή αγοράς. Συμβολίζουμε με C[i, j%2] το μέγιστο κέρδος που μπορούμε να πετύχουμε μέχρι και την i-οστή μέρα με j αγοραπωλησίες. Η αναδρομική σχέση είναι: C[i, j%2] = max{c[i 1, j%2], max 1 z i 1 {C[z, (j 1)%2]+p(i) p(z)}} (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 52 / 65

1η Προγραμματιστική: Εμπόριο Σοκολάτας Λύση C[i, j%2] = max{c[i 1, j%2], max 1 z i 1 {C[z, (j 1)%2]+p(i) p(z)}} Είτε δεν πραγματοποιούμε αγοραπωλησία τη μέρα i Είτε επιλέγουμε να πουλήσουμε, αγοράζοντας κάποια από τις προηγούμενες μέρες (τη φθηνότερη) Συμπληρώνουμε τον πίνακα στήλη-στήλη και η λύση βρίσκεται στο C[N, (K 1)%2]. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 53 / 65

1η Προγραμματιστική: Εμπόριο Σοκολάτας Χρονική Πολυπλοκότητα Για κάθε στοιχείο από τα O(KN) στοιχεία που πρέπει να υπολογίσουμε κάνουμε χρόνο O(i) άρα συνολικά η λύση μας έχει πολυπλοκότητα O(KN 2 ). Μπορούμε καλύτερα; Παρατήρηση Αν έχουμε υπολογίσει τη φθηνότερη τιμή μέχρι ένα σημείο δε χρειάζεται να ξανακοιτάξουμε αυτές τις τιμές. Αντί αυτού την κρατάμε και την ανανεώνουμε όποτε χρειαστεί συγκρίνοντάς την με νέες τιμές. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 54 / 65

1η Προγραμματιστική: Εμπόριο Σοκολάτας Ιδέα για λύση O(KN) C[i, j%2] = max{c[i 1, j%2], cheaper + p(i)} όπου cheaper = max{cheaper, C[i 1, (j 1)%2] p(i 1)} (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 55 / 65

1η Προγραμματιστική: Εμπόριο Σοκολάτας Χρονική Πολυπλοκότητα Για κάθε ένα εκ των O(KN) στοιχείων που πρέπει να υπολογίσουμε χρειάζεται να κάνουμε δύο συγκρίσεις άρα O(1) χρόνο. Συνολικά επομένως η λύση έχει πολυπλοκότητα O(KN). (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 56 / 65

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 1η προγραμματιστική 6 2η προγραμματιστική (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 57 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Είσοδος: Ενας πίνακας A[i, j] με διαστάσεις N N όπου η θέση (i, j) περιέχει το ποσό ενέργειας που εκλύεται αν αντιδράσει η ουσία i με την ουσία j. Επίσης δίνεται το πλήθος K των φιαλών. Εξοδος: Το ελάχιστο ποσό ενέργειας που μπορεί να εκλυθεί αν τοποθετήσουμε της χημικές ουσίες σε φιάλες με κατάλληλο τρόπο (οι ουσίες πρέπει να τοποθετηθούν στις φιάλες με την ίδια σειρά με την οποία είναι αριθμημένες). (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 58 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Ιδέα Δυναμικού Προγραμματισμού Συμβολίζουμε με dp[i, j] την ελάχιστη ενέργεια που μπορεί εκλυθεί αν τοποθετήσουμε τις i πρώτες χημικές ουσίες σε j φιάλες. Η λύση που αναζητούμε είναι η dp[n, K]. Μπορούμε να υπολογίσουμε το dp[i, j] με την εξής αναδρομική σχέση: dp[i, j] = min {dp[t, j 1] + energy(t + 1, i)} 1 t i 1 όπου energy(x, y) είναι η ενέργεια που εκλύεται αν τοποθετηθούν στην ίδια φιάλη όλες οι ουσίες l για τις οποίες x l y. Τις τιμές energy(x, y) για κάθε x, y μπορούμε να υπολογίσουμε από πριν σε χρόνο O(NK) (πώς;) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 59 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Χρονική Πολυπλοκότητα Για κάθε θέση του πίνακα dp χρειάζεται να το ελέγξουμε O(N) τιμές για το t και έτσι για να γεμίσει όλος ο πίνακας χρειάζεται χρόνος: O(N 2 K) Μπορούμε καλύτερα; Ιδέα (για bonus) Για σταθερό j (πλήθος φιαλών) θα προσπαθήσουμε να υπολογίσουμε τα dp[i, j] για κάθε i > j σε χρόνο O(N log N) (αντί για O(N 2 ) που ήταν πρίν) με χρήση Διαίρει και Βασίλευε. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 60 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Ιδέα Μαζί με τον πίνακα dp θα χρειαστούμε κι έναν πίνακα opt ο οποίος στη θέση (i, j) κρατάει την τιμή του t για την οποία επιτυγχάνεται η βέλτιση λύση κατά τον υπολογισμό του dp[i, j], δηλαδή: opt[i, j] = argmin 1 t n 1 {dp[t, j 1] + energy(t + 1, i)} Αν υπάρχουν πολλά τέτοια t κρατάμε το μικρότερο. Παρατήρηση Αν σταθεροποιήσουμε το j τότε ο opt είναι αύξουσα συνάρτηση του i, δηλαδή: Απόδειξη; opt[1, j] opt[2, j]... opt[j, j] (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 61 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Βελτιστοποίηση Διαίρει και Βασίλευε (παράδειγμα) Εστω ότι n = 100 και για σταθερό j θέλουμε να υπολογίσουμε όλα τα dp[i, j] έχοντας ήδη υπολογίσει όλο τον πίνακα dp για τα μικρότερα j. Μπορούμε να υπολογίσουμε πρώτα το dp[50, j] (ελέγχοντας όλα τα t) και μαζί το opt[50, j] = x. Από την προηγούμενη Παρατήρηση προκύπτει ότι το x είναι ένα άνω φράγμα για τα t που πρέπει να ελέγξουμε όταν θα υπολογίζουμε τα dp[i, j] για i < 50 και αντίστοιχα είναι κάτω φράγμα για τα t όταν είμαστε σε i > 50. Μπορούμε να συνεχίσουμε αυτή τη διαδικασία αναδρομικά, δηλαδή για να υπολογίσουμε τα dp[i, j] για i = 1,..., 49 βρίσκουμε πρώτα το dp[25, j] (ελέγχοντας πλέον μόνο t x). Αντίστοιχα για i > 50 και κάθε φορά ανανεώνουμε τα φράγματα που έχουμε βρεί. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 62 / 65

2η Προγραμματιστική: Χημικά Απόβλητα 1: procedure Solve(j, L, R, optl, optr) 2: if L == R then 3: compute dp opt(l, j, optl, optr) 4: else 5: M (L + R)/2 6: compute dp opt(m, j, optl, optr) 7: Solve(j, L, M 1, optl, opt[m][j]) 8: Solve(j, M + 1, R, opt[m][j], optr) όπου η διαδικασία Compute dp opt(i, j, optl, optr) υπολογίζει το dp[i, j] και το opt[i, j] με την αναδρομική σχέση του δυναμικού προγραμματισμού περιορίζοντας τη αναζήτηση για το κατάλληλο t στο διάστημα [optl, optr]. (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 63 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Χρονική Πολυπλοκότητα Κάθε κόμβος του δέντρου αναδρομής χαρακτηρίζεται από δύο διαστήματα: το [L, R] και το [optl, optr]. Χρεώνουμε σε κάθε κόμβο το υπολογιστικό κόστος της γραμμής 6 (ή της 3 αν είναι φύλλο). Κάθε αναδρομική κλήση μειώνει το διάστημα [L, R] στο μισό. Συνεπώς το δέντρο αναδρομής θα έχει ύψος Θ(log N). Το κόστος ενός κόμβου με διάστημα [optl, optr] είναι optr optl + 1. Κάθε κόμβος του δέντρου αναδρομής διαμερίζει το διάστημα [optl, optr] στα δύο παιδιά του (πιθανώς όχι ισόποσα). Σε κάθε περίπτωση το αθροιστικό κόστος κάθε επιπέδου του δέντρου είναι O(N). (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 64 / 65

2η Προγραμματιστική: Χημικά Απόβλητα Ανάλυση Χρονικής Πολυπλοκότητας Συνεπώς μια κλήση στην Solve για συγκεκριμένο j κάνει χρόνο O(N log N). Για την τελική λύση του προβλήματος καλούμε την Solve για όλα τα j = 1,..., K και έτσι ο αλγόριθμος έχει πολυπλοκότητα: O(NK log N) (CoReLab - NTUA) Αλγόριθμοι - 2η σειρά ασκήσεων Δεκέμβριος 2016 65 / 65