Π. ΚΡΗΤΗΣ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΗΥ 380, «ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ» Φ 08: ΟΡΘΟΤΗΤΑ: ΤΟ ΖΗΤΗΜΑ ΤΗΣ «ΠΡΟΟΔΟΥ» ΤΩΝ ΑΛΓΟΡΙΘΜΩΝ Το ζήτημα της προόδου εισαγωγικά σχόλια. Κάθε αλγόριθμος από τα δεδομένα παράγει τα αποτελέσματα όχι σε ένα βήμα, αλλά μέσω μιας διαδικασίας (του υπολογισμού). Κάθε αλγόριθμος λοιπόν «προοδεύει» από τα δεδομένα προς τα αποτελέσματα. Μπορούμε να «μετρήσουμε» αυτή την πρόοδο; Δυστυχώς δεν έχουμε να πούμε πολλά πάνω σε αυτό το καίριο και απολύτως κρίσιμο στοιχείο του υπολογισμού... Τα εξής όμως θα πρέπει να σας φανούν πολύ χρήσιμο «οδηγός» σκέψης σε τέτοια ζητήματα: «Οκνηρή» ταξινόμηση ένα μη τετριμμένο αφετηριακό παράδειγμα. Έχουμε στη διάθεσή μας έναν πίνακα Ν αριθμών και έναν «ελεγκτή ταξινόμησης». Θέλουμε να ταξινομήσουμε τους αριθμούς κατά τον εξής «τεμπέλικο» τρόπο: παραδίδουμε τον πίνακα στον ελεγκτή και εάν αυτός τον βρεί ταξινομημένο τότε ΟΚ τερματίζουμε. Αν όμως αυτός βρεί ένα «ανεστραμμένο» ζεύγος (οποιοδήποτε κρίνει εκείνος), δηλαδή δύο κ, λ ώστε κ < λ Ν, αλλά Τ[κ] > Τ[λ], τότε απλά εναλλάσουμε αυτά τα δύο στοιχεία ώστε να έλθουν σε «ορθή» σειρά και επαναλαμβάνουμε τα ίδια... Συνάρτηση Έλεγχος(Τ: πίνακας, παραδίδει κ,λ: θέσεις του Τ): ΑΛΗΘΕΣ/ΨΕΥΔΕΣ { Ελέγχουμε εάν ο πίνακας T είναι ταξινομημένος κατ αύξουσα σειρά. Αν ναι παραδίδεται ΝΑΙ Αν όχι, παραδίδεται ( ον ) ΟΧΙ (2 ον ) και ένα οποιοδήποτε ζεύγος κ,λ ώστε κ < λ αλλά Τ[κ] > Τ[λ] } ΟκνηρήΤαξινόμηση(Τ: πίνακας Ν αριθμών) { Εφόσον όχι Έλεγχος(Τ, κ,λ) { Εναλλάσουμε Τ[κ] Τ[λ] _ _ } } Θα τα καταφέρουμε (πάντοτε) να ταξινομήσουμε τον πίνακα; Ας προσέξουμε εδώ ότι ενώ διορθώνουμε το ανεστραμμένο ζεύγος, ίσως να αντιστρέφουμε άλλα ζεύγη, ίσως πολλά άλλα ζεύγη. Στο παρακάτω σχήμα φαίνεται ότι εάν εναλλάξουμε το ανεστραμμένο ζεύγος (6, 4), το περιεχόμενό τους θα έλθει στη σωστή σειρά, αλλά θα χαλάσει η σωστή σειρά των περιεχομένων στις θέσεις (6, 8) και στις θέσεις (6, 2). ( κ, μ ) ( μ, λ ) 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 8 42 9 23 35 7 33 2 ( i ) ( ii ) ( iii ) ( iv ) ( v ) ( iv ) ( v ) Επομένως είναι εύλογο να ρωτήσουμε: «προοδεύει» ο παραπάνω αλγόριθμος; Εφόσον οι ενέργειες μας αφορούν τα «ορθά» ή «ανεστραμμένα» ζεύγη, και εφόσον ο πίνακας είναι ταξινομημένος όταν και μόνον όλα τα ζεύγη θέσεων είναι ορθά, φαίνεται εύλογο αν όχι προφανές ότι πρέπει να μετρήσουμε το πλήθος των ορθών ζευγών και πώς αυτό μεταβάλλεται μετά από μια εναλλαγή (στο σημείο που είναι σημαιάκι: _ _) ενός ανεστραμμένου ζεύγους Τ[κ], Τ[λ]. Κάνουμε στη συνέχεια τον λογαριασμό: ΖΕΥΓΗ ΤΡΟΠΟΣ ΜΕΤΑΒΟΛΗΣ «ΟΡΘΑ» ΠΡΙΝ «ΟΡΘΑ» ΜΕΤΑ (i) Τα ζεύγη Τ[α], Τ[β] στη περιοχή α < β < κ δεν αλλάζουν ν (όσα τύχει να είναι... κατάσταση διότι το περιεχόμενό τους δεν μετακινείται. (ii) Για τα ζεύγη Τ[α], Τ[β] στη περιοχή κ < α < β < λ ομοίως. ν ν ν...τόσα θα μείνουν) Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, /0
(iii) Για τα ζεύγη Τ[α], Τ[β] στη περιοχή λ < α < β ομοίως. ν ν (iv) Τα ζεύγη T[α], T[κ], α < κ, δεν αλλάζουν κατάσταση, διότι ν ν αν και το Τ[κ] θα μετακινηθεί, θα παραμείνει μετά το Τ[α]. Το ίδιο συμβαίνει και με τα ζεύγη Τ[κ], Τ[β], β > λ. (v) Τα ζεύγη T[λ], T[β], λ < β, δεν αλλάζουν κατάσταση, διότι αν και το Τ[λ] θα μετακινηθεί, θα παραμείνει πριν το Τ[β]. Το ίδιο συμβαίνει και με τα ζεύγη Τ[α], Τ[λ], α < κ. ν ν Τα μόνα ζεύγη που μένει να εξετάσουμε είναι τα ζεύγη (Τ[κ], Τ[μ]) και (Τ[μ], Τ[λ]), για κ < μ < λ. Τί δυνατότητες υπάρχουν για αυτά τα ζεύγη; Εξετάζουμε όλες τις περιπτώσεις: ΠΡΙΝ ΠΡΙΝ ΠΡΙΝ ΜΕΤΑ ΜΕΤΑ ΜΕΤΑ (Τ[κ], Τ[λ]) (Τ[κ], Τ[μ]) (Τ[μ], Τ[λ]) (Τ[κ], Τ[λ]) (Τ[κ], Τ[μ]) (Τ[μ], Τ[λ]) ΑΝΕΣΤΡΑΜΜΕΝΟ ΟΡΘΟ ΟΡΘΟ ΑΔΥΝΑΤΟΝ! ΑΝΕΣΤΡΑΜΜΕΝΟ ΟΡΘΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΠΙΘΑΝΟΝ ΟΡΘΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΟΡΘΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΟΡΘΟ ΠΙΘΑΝΟΝ ΟΡΘΟ ΟΡΘΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΑΝΕΣΤΡΑΜΜΕΝΟ ΠΙΘΑΝΟΝ ΟΡΘΟ ΟΡΘΟ ΟΡΘΟ Αυτό που παρατηρούμε είναι ότι είναι αδύνατον τα ζεύγη (Τ[κ], Τ[μ]) και (Τ[μ], Τ[λ]) να είναι και τα δύο ορθά (προ της εναλλαγής), διότι μεταβατικά θα ήταν ορθό και το ζεύγος (Τ[κ], Τ[λ]) ενώ αυτό έχει διαπιστωθεί ως ανεστραμμένο. Παρατηρούμε επίσης ότι στις υπόλοιπες περιπτώσεις το πλήθος των ορθών ζευγών είτε μένει το ίδιο, είτε αυξάνεται, και φυσικά το ζεύγος (κ, λ) από ΑΝΕΣΤΡΑΜΜΕΝΟ τρέπεται πάντοτε σε ΟΡΘΟ, αυξάνοντας το πλήθος τους οπωσδήποτε κατά +. Επομένως, μετά από μια εναλλαγή ανεστραμμένου ζεύγους, το σύνολο των ορθών ζευγών, αν και θα τροποποιηθεί με προσθαφαιρέσεις, εν τούτοις το μέγεθός του θα αυξηθεί κατά τουλάχιστον +. Αφού το σύνολο των ζευγών (Τ[κ], Τ[λ]) με κ < λ Ν είναι το πολύ Ν(Ν )/2, μετά από Ο(Ν 2 ) το πολύ επανελέγχους θα έχουμε καταφέρει να ταξινομήσουμε τον πίνακα κατά αύξουσα σειρά! Τα κύρια χαρακτηριστικά της αλγοριθμικής προόδου. Σε ζητήματα (αλγοριθμικής) προόδου, εστιάζουμε στα εξής χαρακτηριστικά: Τί εκφράζει την πρόοδο δηλαδή ποιός είναι ο δείκτης προόδου; Το πρώτο καθήκον μας είναι να διαπιστώσουμε ποιά στοιχεία προόδου φέρει ο αλγόριθμος που αναλύουμε ή/και σχεδιάζουμε, και να τα εκφράσουμε μέσω ενός αριθμητικού δείκτη προόδου. Αυτό είναι από δύσκολο έως ακατόρθωτο: όπως φάνηκε στο ο παράδειγμά μας ο δείκτης προόδου συνάγεται μεν από τα στοιχεία του κώδικα και από τα δεδομένα και μεταβλητές που χειριζόμαστε, αλλά ίσως να μην εμφανίζεται στον κώδικα, ίσως δηλαδή να είναι συντακτικά «αόρατος». Οι δείκτες προόδου είναι από τα πιο καίρια στοιχεία που συχνότατα (και στις πιο αξιοσημείωτες περιπτώσεις) έχουν σημασιολογικό χαρακτήρα: αφορούν όχι στο τί γράφουμε (στον κώδικα του αλγορίθμου), αλλά στο τί εννοούμε με αυτό που γράφουμε. Σε ποιό τόπο _ _ πραγματοποιείται η πρόοδος δηλαδή σε ποιά σημεία του αλγορίθμου/κώδικα; Ο τρόπος που γράφουμε (τώρα πια) τον κώδικα ενός αλγορίθμου εστιάζει στην προοδευτική εκτέλεση των πράξεών του: οι εντολές εκτελούνται η μία μετά την άλλη, ή η μία μέσα στην άλλη. Και όλες τερματίζουν αργά ή γρήγορα, όμως πάντοτε εκτός από μία περίπτωση, την «αόριστη επανάληψη» (υπό τις μορφές της εντολής εφόσον (while) ή/και της αναδρομής (recursion)). Για να βεβαιωθούμε ότι οι αόριστες επαναλήψεις θα τερματίσουν πρέπει να εντοπίσουμε κάπου μέσα σε κάθε επαναληπτικό βρόχο ένα τουλάχιστον σημείο όπου τελείται πρόοδος, όπου δηλαδή ο δείκτης προόδου μεταβάλλει μονότονα την τιμή του. Ποιό είναι το ενδεχόμενο εύρος της προόδου όταν αυτή ληφθεί αθροιστικά; Ή, γενικότερα, μέσω μιας διάταξης, διότι τα στάδια προόδου υπονοούν μια διάταξη ως προς κάποιο βαθμό προόδου. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 2/0
Ο δείκτης προόδου θα κινηθεί αθροιστικά σε κάποιο εύρος τιμών, κατ ελπίδα μονότονα από μια αρχική τιμή έως μια τελική. Ποιό είναι αυτό το εύρος τιμών; Θα θέλαμε προφανώς αυτό να είναι φραγμένο (δηλαδή πεπερασμένο). Έχει αποτελεσματικό βήμα έχει δηλαδή (κάτω) φράγμα κάθε βήμα «προόδου»; Ακόμα και εάν ο δείκτης προόδου που διαλέξαμε να χρησιμοποιήσουμε κινηθεί μονότονα σε πεπερασμένο εύρος τιμών θα πρέπει να κάνει «ουσιώδη» βήματα ώστε να εξαντλήσει αυτό το έυρος τιμών. Αν λ.χ. στο κ στό βήμα μιας επαναληπτικής διαδικασίας ο δείκτης αυξάνεται κατά 2 τότε παρότι το εύρος τιμών του είναι φραγμένο, εν τούτοις μπορεί να κάνει εντός αυτού κ του εύρους άπειρα βήματα: το άθροισμα κ = 2 συγκλίνει... Ο απλούστερος (αν και όχι κ μοναδικός) τρόπος να εξασφαλίσουμε ότι δεν θα συμβεί απεριόριστο πλήθος βημάτων είναι να δείξουμε ότι ο δείκτης προόδου έχει ένα κάτω φράγμα ανά βήμα, δ. Αν το εύρος της προόδου είναι αθροιστικά το πολύ Π, και η πρόοδος είναι βηματικά τουλάχιστον δ, τότε προφανώς δεν θα έχουμε πάνω από Π βήματα. δ Είναι «δραστική»; Ακόμα και όταν όλα πάνε καλά ίσως να μην πηγαίνουν τόσο καλά. Θα θέλαμε ο δείκτης προόδου να κινείται δραστικά. Όσο πιο γρήγορα προοδεύει ο αλγόριθμος μας τόσο πιο γρήγορος θα είναι. Είναι (πάντοτε) γνήσια ή έχει και οπισθοδρομήσεις ή διαστήματα στασιμότητας; Τέλος θα πρέπει να υποδείξουμε ότι η μονότονη πρόοδος είναι χαρακτηριστικό των απλών αλγορίθμων. Όταν τα πράγματα (δηλαδή τα προβλήματα) γίνονται σοβαρά, εμφανίζονται περιπτώσεις όπου ο δείκτης προοδου ίσως να εμφανίζει στασιμότητα, ίσως ακόμα και οπισθοδρομήσεις! Σε αυτές τις περιπτώσεις η ανάλυσή μας γίνεται πολυεπίπεδη: εξετάζουμε τις τυχόν στασιμότητες ή και οπισθοδρομήσεις με την ίδια «λογική προόδου» για να δείξουμε ότι και αυτές δεν θα είναι πολλές: εάν σε μια διαδρομή μήκους L, τύχει περιστασιακά να οπισθοδρομούμε αλλά όχι περισσότερο από μήκος L, τότε η συνολική διαδρομή μας δεν θα είναι μεγαλύτερη από L + 2L Η ζωή παρέα με αποδείξεις είναι δύσκολη αποδεδειγμένα Οι παραπάνω εξηγήσεις συνδέονται με το προηγούμενο πρώτο παράδειγμά μας ως εξής: ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΕΞΗΓΗΣΕΙΣ Δείκτης προόδου Το πλήθος των «ορθών» ζευγών, δηλαδή των κ < λ Ν, όπου Τ[κ] Τ[λ]. Τόποι προόδου Στο σημαιάκι _ _, μετα την εναλλαγή Τ[κ] Τ[λ]. Εύρος προόδου Το πλήθος όλων των ζευγών, δηλαδή το Ν(Ν )/2 = Ο(Ν 2 ). Αποτελεσματικό βήμα Ναι κάθε βήμα προόδου αυξάνει τον δείκτη κατά τουλάχιστον +. Δραστικότητα Σχετική: το βήμα προόδου είναι μόλις Ω(), τουλάχιστον όμως εξαρτάται μόνον από το πλήθος των δεδομένων, και όχι από καθεαυτά τα δεδομένα. Γνησιότητα Ναι δεν έχουμε «οπισθοδρομήσεις» ή «στασιμότητα». «Μέγιστος κοινός διαιρέτης»: ένα κλασικό αριθμητικό παράδειγμα. Πολύ πιθανά τα γενέθλια της ανάλυσης των αλγορίθμων ήταν όταν ο Ευκλείδης ανέλυε αποδεικτικά τον ομώνυμο αλγόριθμο της εύρεσης του μέγιστου κοινού διαιρέτη. Ο αλγόριθμος που εξέταζε ήταν ο εξής: Ευκλείδου, «Στοιχεία» (ζ βιβλίο, α εδάφιο): Δύο ἀριθμῶν ἀνίσων ἐκκειμένων, ἀνθυφαιρουμένου δὲ ἀεὶ τοῦ ἐλάσσονος ἀπὸ τοῦ μείζονος, ἐὰν ὁ λειπόμενος μηδέποτε καταμετρῇ τὸν πρὸ ἑαυτοῦ, ἕως οὗ λειφθῇ μονάς, οἱ ἐξ ἀρχῆς ἀριθμοὶ πρῶτοι πρὸς ἀλλήλους ἔσονται. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 3/0
Σήμερα θα τον γράφαμε («κατά γράμμα») κάπως έτσι: Συνάρτηση ΠρώτοιΠροςΑλλήλους(Α,Β: φυσικοί): ΑΛΗΘΕΣ/ΨΕΥΔΕΣ { Περίπτωση: { Α=Β: ΠρώτοιΠροςΑλλήλους ΨΕΥΔΕΣ // δύο αριθμών ανίσων εκκειμένων Α Β: { Επαναλαμβάνουμε { α,β max(α,β), min(α,β) // του ελάσσονος από του μείζονος Εφόσον (α > β) // αεί { α α-β _ _ } // ανθυφαιρουμένου ΔΙΑΙΡΕΙ (β>) και (α=0) // ο λειπόμενος (...) καταμετρή? 2 } ΈωςΌτου ΔΙΑΙΡΕΙ ή (β=) // έως-ού λειφθή μονάς ΠρώτοιΠροςΑλλήλους ΟΧΙ ΔΙΑΙΡΕΙ // μηδέποτε πρώτοι έσονται } } } Ο εξής πίνακας περιέχει τις σχετικές εξηγήσεις όχι τόσο δύσκολες σε αυτή την περίπτωση της «αφαιρετικής» εκδοχής του Ευκλείδη. ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΕΞΗΓΗΣΕΙΣ (ΑΦΑΙΡΕΤΙΚΗ ΕΚΔΟΧΗ) Δείκτης προόδου Το άθροισμα των αριθμών/μεταβλητών (α+β): μειούται διαρκώς. Τόποι προόδου Η πράξη της αφαίρεσης α α-β. Εύρος προόδου Ως το 0 με αρχική τιμή το αρχικό άθροισμα (α+β). Αποτελεσματικότητα Ναι σε κάθε βήμα έχουμε μείωση του δείκτη κατά τουλάχιστον. Δραστικότητα Μικρή: το βήμα προόδου ίσως είναι μόλις Θ(), και η αρχική τιμή τουλάχιστον όμως εξαρτάται μόνον από το πλήθος των δεδομένων, και όχι από καθεαυτά τα δεδομένα. Γνησιότητα Ναι δεν έχουμε «οπισθοδρομήσεις» ή «στασιμότητα». Είναι πιο ενδιαφέρουσα η διαιρετική εκδοχή του παραπάνω κώδικα: Συνάρτηση ΠρώτοιΠροςΑλλήλους(Α, Β: φυσικοί): ΑΛΗΘΕΣ/ΨΕΥΔΕΣ { Περίπτωση: { Α=Β: ΠρώτοιΠροςΑλλήλους ΨΕΥΔΕΣ // δύο αριθμών ανίσων εκκειμένων Α Β: { Επαναλαμβάνουμε { α,β max(α,β), min(α,β) // του ελάσσονος από του μείζονος α α υπόλοιπο-ωςπρος β _ _ } // «αεί-ανθυφαιρουμένου» ΔΙΑΙΡΕΙ (β>) και (α=0) // ο λειπόμενος (...) καταμετρή; } ΈωςΌτου ΔΙΑΙΡΕΙ ή (β=) // έως-ού λειφθή μονάς ΠρώτοιΠροςΑλλήλους ΟΧΙ ΔΙΑΙΡΕΙ // μηδέποτε πρώτοι έσονται } } } Αφού η διαρκής αφαίρεση του β από το α οδηγεί απλώς στον υπολογισμό του υπολοίπου (α mod β), αρκεί να υπολογίσουμε «κατ ευθείαν» αυτό το υπόλοιπο. Θα έχουμε πάλι πρόοδο κατ ελπίδα πιο δραστική. Πόσο πολύ; Επειδή το υπόλοιπο υ = (α mod β) είναι μικρότερο από το β, αλλά και από α β, το υ θα είναι μικρότερο από α/2: εάν β α/2 αυτό θα συμβεί επειδή υ < β, και εάν β > α/2 αυτό θα συμβεί επειδή υ < (α β). Άρα ο μεγαλύτερος των δύο αριθμών που χειριζόμαστε (ο «α» ή ο «β») θα μειωθεί τουλάχιστον κατά το ήμισυ. Αυτό σημαίνει ότι θα έχει ένα δυαδικό ψηφίο λιγότερο και η ανάλυση προόδου θα έχει όπως στον επόμενο πίνακα: 2 Στους αρχαίους η μονάδα δεν εθεωρείτο «διαιρέτης» κανενός αριθμού. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 4/0
ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΕΞΗΓΗΣΕΙΣ (ΔΙΑΙΡΕΤΙΚΗ ΕΚΔΟΧΗ) Δείκτης προόδου Το σύνολο των δυαδικών ψηφίων των α και β (βαίνει μειούμενο). Τόποι προόδου Η πράξη του υπολοίπου α α mod β. Εύρος προόδου Ως το 2 με αρχική τιμή το σύνολο των δυφίων των α και β. Αποτελεσματικότητα Ναι σε κάθε βήμα έχουμε μείωση του δείκτη κατά τουλάχιστον. Δραστικότητα Καλή: το βήμα μείωσης είναι ίσως μόλις, αλλά η αρχική τιμή είναι πολύ μικρή (μόλις logα + logβ ). Γνησιότητα Ναι δεν έχουμε «οπισθοδρομήσεις» ή «στασιμότητα». «Απλοποίηση πολυγωνικής γραμμής»: ένα γεωμετρικό παράδειγμα. Θέλουμε να φτιάξουμε μια απλή πολυγωνική γραμμή με Ν σημεία, όπου «απλή» σημαίνει ότι δεν τέμνει τον εαυτό της. Με το «χέρι» θα ήταν εύκολο, αλλά πώς θα το κάναμε αλγοριθμικά; Είναι εύκολο να φτιάξουμε Ν τυχαία σημεία στο επίπεδο, αλλά πώς θα τα συνδέσουμε; Αν τα πάρουμε σε μια τυχαία σειρά Ρ[], Ρ[2],..., Ρ[Ν] και συνδέσουμε ευθύγραμμα το Ρ[κ] με το Ρ[κ+], (κυκλικά), θα έχουμε μια πολυγωνική γραμμή, ίσως όμως όχι απλή. Λ.χ. μια πλευρά ΑΓ ίσως να τέμνει μιαν άλλη ΒΔ (βλ. σχήμα (i)). Εδώ η γεωμετρία μας προσφέρει ένα απλό τέχνασμα: αφού η πολυγωνική γραμμή περνάει «κυκλικά» από όλα τα σημεία, θα πρέπει να συνδέει το Β με το Γ, και το Δ με το Α (βλ. σχήμα (i), ή χ.α.γ. τα Β, Γ και Α, Δ). Αυτό μας δίνει την δυνατότητα να αφαιρέσουμε τις πλευρές ΑΓ και ΒΔ, και να προσθέσουμε τις πλευρές ΑΒ και ΓΔ, (βλ. σχήμα (ii)), κρατώντας έτσι τα σημεία επί μίας πολυγωνικής γραμμής και απαλείφοντας την τομή των ΑΓ, ΒΔ κάτι που φαίνεται ως στοιχείο προόδου. Α Β... Α Β... Α Β Α Β Μ Δ Γ Δ Γ Δ Δ Γ ( i ) ( ii ) ( iii ) ( iv ) Γ Αλλά αυτό δεν είναι αρκετό: η εναλλαγή που κάνουμε ίσως προκαλέσει σημεία τομής που δεν υπήρχαν προηγουμένως, όπως υποδεικνύεται στο σχήμα (iii). Η πρόοδος δεν είναι όπως θα θέλαμε... Εδώ η γεωμετρία έχει πάλι τον κρίσιμο λόγο: σε κάθε τετράπλευρο ΑΒΓΔ με δύο τεμνόμενες διαγωνίους ΑΓ και ΒΔ, το μήκος των διαγωνίων είναι μικρότερο από το μήκος δύο απέναντι πλευρών, (όπως εδώ οι ΑΒ και ΓΔ): ( ΑΓ + ΒΔ ) > ( ΑΒ + ΓΔ ) ( ) Ο λόγος είναι ότι, εάν οι διαγώνιοι τέμνονται στο Μ, στα δύο τρίγωνα ΜΑΒ και ΜΓΔ (βλ. σχήμα (iv)) έχουμε δύο τριγωνικές ανισότητες, τις οποίες εάν αθροίσουμε παίρνουμε την ( ), ( ΜΑ + ΜΒ ) > ΑΒ, και ( ΜΓ + ΜΔ ) > ΓΔ. Επομένως έχουμε πράγματι πρόοδο: αυτό που μειώνεται διαρκώς είναι το μήκος της εκάστοτε πολυγωνικής γραμμής... Δίνουμε όλες τις υπόλοιπες λεπτομέρειες στο παρακάτω πινακάκι: ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ Δείκτης προόδου Τόποι προόδου Εύρος προόδου ΕΞΗΓΗΣΕΙΣ Το μήκος της πολυγωνικής γραμμής μειούμενο. Στο σημείο εναλλαγής δύο πλευρών. Το ελάχιστο δυνατόν μήκος, δηλαδή Ν φορές η απόσταση, L = min{ XY : όπου XY ζεύγος σημείων }, αρχίζοντας από το μέγιστο δυνατόν μήκος, δηλαδή Ν φορές τη μέγιστη απόσταση, L = max{ XY : όπου XY ζεύγος σημείων }. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 5/0
Αποτελεσματικότητα Δραστικότητα Γνησιότητα Ναι κάθε βήμα προόδου είναι τουλάχιστον όσο η εξής ελάχιστη ποσότητα: min{ ( ΑΓ + ΒΔ ) ( ΑΒ + ΓΔ ): όπου ΑΓ τέμνει ΒΔ }, η οποία υπάρχει και είναι θετική αφού αναφερόμαστε σε πεπερασμένο πλήθος σημείων. Μικρή και εξαρτώμενη από τα εκάστοτε δεδομένα. Ναι δεν έχουμε «οπισθοδρομήσεις» ή «στασιμότητα» (όσο έχουμε γνήσια και όχι εκφυλισμένα τρίγωνα / τετράπλευρα). «Αποκοπή»: ένα γραφοθεωρητικό παράδειγμα. Έστω ότι εμείς και ένας συνεργάτης μας ελέγχουμε ένα δίκτυο μονόδρομων συνδέσεων από μια αφετηρία α σε ένα τερματισμό τ. Ο σκοπός μας είναι να αποκόψουμε την αφετηρία από τον προορισμό. Εμείς ελέγχουμε εάν υπάρχει υπάρχει μια σύνδεση από το α στο τ, και ο συνεργάτης μας αναλαμβάνει να αντιστρέψει την κατεύθυνση μιας ακμής (όποια τύχει και μπορέσει...) επ αυτής της διαδρομής ώστε να αχρηστεύσει αυτή την διαδρομή. Είναι αυτή η συνεργασία «προοδευτική»; Θα τα καταφέρει να αποκόψει την αφετηρία από τον τερματισμό; Και πόσο «γρήγορα»; α τ α τ α τ 2 διαλέγουμε α - - 2 - τ αντιστρέφει (, 2 ) 2 διαλέγουμε α - 2 - - τ αντιστρέφει (2, ) διαλέγουμε α - - 2 - τ αντιστρέφει (, 2 ), κοκ... 2 Το πρόβλημα είναι ότι ο συνεργάτης μας «κάνει ότι (εκείνος) μπορεί» και αυτό μπορεί να μην είναι αρκετό. Στο παραπάνω σχήμα εάν ο συνεργάτης μας δεν μπορεί παρά να αντιστρέφει κάθε φορά την ακμή (, 2), (αλλά και εμείς επιμένουμε να χρησιμοποιούμε αυτήν...) τότε δεν θα δούμε πρόοδο ποτέ! Συναντάμε εδώ ένα σαφώς μη τετριμμένο παράδειγμα όπου η ανάλυση προόδου λειτουργεί και οδηγός της σχεδίασης του αλγορίθμου ώστε να παρουσιάζει ουσιώδη πρόοδο. η πρόοδος δεν είναι μονότονη αλλά μπορεί να παρουσιάζει και στασιμότητα. Η ιδέα είναι να χρησιμοποιήσουμε μια διαδρομή σύνδεσης της α με τον τ, τέτοια ώστε κάθε ακμή αυτής να είναι κρίσιμη, ώστε οποιαδήποτε ακμή και εάν καταφέρει ο συνεργάτης μας τελικά να αντιστρέψει, κάποια «ζημιά» να έχει επέλθει στην συνδεσιμότητα των α και τ. Και μια τέτοια η διαδρομή είναι η βραχύτερη διαδρομή α β, δηλαδή αυτή με τις λιγότερες ακμές: σε αυτήν την διαδρομή κάθε ακμή είναι (σχετικά) κρίσιμη διότι δεν μπορεί να αντικατασταθεί χωρίς βλάβη της βραχύτητας της διαδρομής. Ας δούμε πως βρίσκουμε την βραχύτερη διαδρομή από το α στο τ. Διαδικασία Επίπεδα(G: ένα γράφημα συνδέσεων, α,τ: αφετηρία/τερματισμός) { Για όλους τους κόμβους x του G { Επίπεδο(x) 0 } k 0 Επαναλαμβάνουμε Για κάθε κόμβο u στο k-στό επίπεδο { Εάν υπάρχει σύνδεση (u,v) και Επίπεδο(v)=0 τότε { Επίπεδο(v)= Επίπεδο(u)+ } // δηλαδή (k+) } k k+ ΈωςΌτου (Επίπεδο(τ) 0) } Η αξία της παραπάνω κατασκευής είναι ότι δεν υπάρχουν ακμές που να οδηγούν από ένα επίπεδο κ σε ένα επίπεδο λ > κ+ δηλαδή οι ακμές «προς τα δεξιά» (στο επόμενο σχήμα) δεν υπερπηδούν ποτέ επίπεδο, διότι αν υπήρχε μια τέτοια ακμή (u, v), ο κόμβος v θα είχε τοποθετηθεί λόγω u στο κ+ Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 6/0
επίπεδο, και όχι σε μετέπειτα επίπεδο. Άρα η βραχύτερη απόσταση ανάμεσα σε κόμβο στο κ επίπεδο προς κόμβο στο λ κ επίπεδο είναι τουλάχιστον (λ κ). α 2 3 4 6 7 τ 5 Αναφερόμενοι λοιπόν στο σχήμα, έστω ότι διαλέγουμε την βραχύτερη διαδρομή μήκους μ = 4 ακμών, από α στο τ, μέσω 2, 5, και 7, και ότι ο συνεργάτης μας καταφέρνει να αντιστρέψει την ακμή e = (2, 5). Αυτό που πρέπει να παρατηρήσουμε είναι ότι κανένας κόμβος δεν θα έλθει πλησιέστερα στο α εξαιτία της αντιστροφής της ακμής e (εδώ (2, 5)): οι αριθμοί των επιπέδων θα μείνουν ίδιοι ή θα αυξηθούν. Έτσι η ακμή (5, 2) μετά την αντιστροφή της δεν θα μπορέσει να χρησιμεύσει σε μια βραχύτερη διαδρομή παρά μόνον εάν υπάρχει ή δημιουργηθεί μια διαδρομή από το α στο 5, και, μέσω της (5, 2), από το 2 στο τ. Αυτή η διαδρομή όμως θα έχει μήκος μ = μ+2, ή περισσότερο (εάν οι αποστάσεις των επιπέδων έχουν «χειροτερέψει» που είναι και το μόνο που μπορεί να συμβεί). Επομένως εάν μια ακμή e αντιστραφεί, αναφανεί επί της βραχύτερης διαδρομής και αντιστραφεί εκ νέου, τότε η βραχύτερη διαδρομή έχει καταστεί κατά τουλάχιστον +2 ακμές μεγαλύτερη από εκείνην της προηγούμενης χρήσης της e. Μια τέτοια επιμήκυνση δεν μπορεί όμως να συμβεί πάνω από Ν/2 φορές, όπου Ν ο αριθμός των κόμβων: η βραχύτερη σύνδεση α με τ απαιτεί το πολύ Ν κόμβους, εκτός εάν οι κόμβοι α και τ έχουν αποσυνδεθεί αλλά τότε θα έχουμε επιτύχει τον σκοπό μας. Ακολουθεί η συνοπτική περιγραφή της κατάστασης. ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΕΞΗΓΗΣΕΙΣ Δείκτης προόδου Το μήκος της ελάχιστης διαδρομής γ: α τ. Τόποι προόδου Η αντιστροφή μιας ακμής που ανήκει στη βραχύτερης διαδρομής γ. Φράγμα προόδου Το πολύ Ν (το πλήθος των κόμβων). Αποτελεσματικότητα Όταν αντιστρέφουμε ξανά μια ακμή e το μήκος της νέας βραχύτερης διαδρομής γ, δεν μειώνεται και μάλιστα αυξάνεται κατά +2, εφόσον η γ τύχει να χρησιμοποιεί αυτή την ακμή e. Μια τέτοια αύξηση μπορεί να συμβεί το πολύ Ν/2 φορές. Η επόμενη όμως βραχύτερη διαδρομή γ ίσως να μην χρησιμοποιεί την e οπότε το μήκος της ίσως μείνει στάσιμο και δεν αυξηθεί. Δεν είναι όμως δυνατόν να αποφεύγουμε διαρκώς διαφορετικές ακμές αυτές είναι το πολύ Μ = Ο(Ν 2 ). Επομένως μετά από το πολύ Μ στάσιμα «βήματα», στη βραχύτερη διαδρομή, κάποια ακμή θα επανααντιστραφεί, και η βραχύτερη διαδρομή (θα έχει) αυξηθεί κατά +2. Δηλαδή μετά από το πολύ Μ Ν /2 επαναλήψεις συνολικά, δεν θα μπορούμε να έχουμε άλλη «πρόοδο». Δραστικότητα (χωρίς σχόλιο) Γνησιότητα Το μήκος της βραχύτερης διαδρομής μπορεί να παρουσιάσει φάσεις στασιμότητας, αλλά κάθε μία από αυτές δεν μπορεί να παραμείνει επ αόριστον, αλλά μόνον Μ το πολύ φορές. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 7/0
Ακρότητες... Δεν είναι όλες οι περιπτώσεις τόσο εύκολες τρόπος του λέγειν όσο οι παραπάνω. Οι αλγόριθμοι βασλεύουν στην χώρα των εκπλήξεων, και σε πολλές περιπτώσεις η πρόοδος (ακόμα και εάν υπάρχει) κρύβεται με δυστροπία. Δίνουμε λίγα παραδείγματα, για «εγκυκλοπαιδικούς» λόγους:...πρώτος παράγοντας. Έχουμε ένα φυσικό αριθμό Ν και θέλουμε να βρούμε έναν πρώτο αριθμό p μεγαλύτερο από το Ν. Η αναζήτηση είναι απλή: θέτουμε p (N+), και ελέγχουμε την πρώτευση του p. Αν είναι πρώτος ΟΚ, αλλιώς θέτουμε p p+ και συνεχίζουμε. Η πρόοδος είναι σαφής, και η επιτυχία βέβαιη, αφού γνωρίζουμε ότι υπάρχουν άπειροι πρώτοι αριθμοί, άρα κάποιος θα βρεθεί μεγαλύτερος από το Ν όσο μεγάλο και εάν είναι αυτό. Αλλά για πόσο θα ψάχνουμε, πόσο «δραστική» είναι αυτή η βήμαβήμα αναζήτησή μας; Το θεώρημα περί απείρου πλήθους πρώτων δεν μας λέει παρά ότι το εύρος της αναζήτησής μας δεν είναι το [Ν+.. ] αλλά το [Ν+.. ). Την απάντηση δίνει ένα σχετικά βαθύ θεώρημα που λέει: «για κάθε m υπάρχει ένας τουλάχιστον πρώτος αριθμός ανάμεσα στο m και το 2m.» και άρα δεν θα χρειαστούμε περισσότερα από Ν βήματα. Δείτε στο διαδίκτυο τα κλειδόλεκτα Bertrand s postulate, Chebyshev s theorem για την ιστορία αυτού του θεωρήματος....πολυγωνικές αναστροφές. Μας δίδονται Ν σημεία στο επίπεδο, συνδεδεμένα με μια απλή πολυγωνική γραμμή. Αυτή ίσως να μην είναι κυρτή. Σχεδιάζουμε το κυρτό περίβλημα, και εάν βρούμε μια πλευρά του περιβλήματος (λ.χ. την ΧΥ, στο σχήμα), που σχηματίζει ένα «εσωτερικό θύλακα» τότε αναστρέφουμε την πολυγωνική γραμμή από Χ έως το Υ, καθιστώντας πλέον αυτό τον θύλακα εξωτερικό. Προφανώς κάνουμε έτσι κάποιου είδους πρόοδο προς τον σχηματισμό ενός κυρτού πολυγώνου. Αν μη τί άλλο το εμβαδόν του εκάστοτε πολυγώνου που σχηματίζουμε αυξάνεται γνήσια. Νέα σημεία όμως δημιουργούνται διαρκώς και αυτή η αύξηση ίσως να εκφυλίζεται σε τιμές που τείνουν στο μηδέν. Θα τελειώσουμε αυτές τις «αναστροφές» σε πεπερασμένο πλήθος βημάτων; X Y Δείτε στο διαδίκτυο τα κλειδόλεκτο Erdös Nagy theorem για τις περιπέτειες αυτού του αλγορίθμου, και για το πόσα (πολλά) χρόνια πέρασαν μέχρι η ορθή απάντηση (ΝΑΙ) να τεκμηριωθεί πλήρως....εικασία του Collatz. Η εξής περίπτωση μένει αναπάντητη εδώ και πολλές 0ετίες (...) παρά την απλοϊκή μορφή της: Συνάρτηση Collatz(N: φυσικός): φυσικός { k 0 Εφόσον (Ν>) { Περίπτωση (Ν mod 2) { 0: Ν Ν δια 2 : Ν 3Ν+ } k k+ } } Collatz k _ _ } Υπάρχει φραγμένη πρόοδος στον παραπάνω κώδικα τερματίζει δηλαδή για οποιοδήποτε Ν; Κανείς δεν γνωρίζει... Δείτε στο διαδίκτυο το κλειδόλεκτο Collatz conjecture για πληροφορίες σχετικά με αυτή την περιπέτεια. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 8/0
Προς ΕΞΑΣΚΗΣΗ Βασιζόμενοι στις προηγούμενες εξηγήσεις θα πρέπει να είστε σε θέση να λύσετε τα παρακάτω προβλήματα. Δώσατε γραπτώς 2 από αυτά με όλες τις απαραίτητες εξηγήσεις.. Δίδεται ένα δυαδικό δένδρο «διχοτομικής αναζήτησης» δηλαδή τέτοιο ώστε για κάθε κόμβο χ τα στοιχεία στο αριστερό υπόδενδρο του χ (το Α(χ)) να είναι μικρότερα του χ, και εκείνα στο δεξιό υπόδενδρο (το Δ(χ)) να είναι μεγαλύτερα του χ. Αναζητούμε ένα στοιχείο σ στο υπόδενδρο του κόμβου χ (αρχίζοντας από τον ριζικό κόμβο ρ) ως εξής: εάν σ=χ τότε τέλος αλλιώς εάν σ < χ το αναζητούμε στο αριστερό υπόδενδρο Α(χ), αλλιώς εάν σ > χ το αναζητούμε στο δεξιό υπόδενδρο Δ(χ). Τί προοδεύει σε αυτή τη διαδικασία; Ποιό είναι το όριο προόδου; Εάν για κάθε χ ίσχυε Α(χ) ½ Δ(χ), και Δ(χ) ½ Α(χ) πόσο πιο ταχεία πρόοδο θα είχαμε; 2. Χωρίζουμε τους κόμβους από ένα αμφιδρομικό γράφημα G, σε δύο μέρη, το αριστερό Α και το δεξιό Δ. Εξετάζουμε κάθε κόμβο στο Α, και εάν δούμε ότι συνδέεται με κ κόμβους στο Α και λ κόμβους στο Β, όπου κ > λ, τότε τον μετακινούμε από το Α στο Δ. Το συμμετρικό ανάλογο κάνουμε στο Δ: εξετάζουμε κάθε κόμβο στο Δ, και εάν δούμε ότι συνδέεται με κ κόμβους στο Δ και λ κόμβους στο Α, όπου κ > λ, τότε τον μετακινούμε από το Δ στο Α. Προοδεύει αυτή η διαδικασία; Πώς και πόσο; 3. Έχουμε δύο δυαδικά δένδρα Τ και Τ2 με το ίδιο πλήθος κόμβων Ν. Επιτρέπεται να περιστρέφουμε τους κόμβους σε αυτά, όπως στο παρακάτω σχήμα: v...... u u C A v A B B C Πώς μπορούμε με τέτοιες περιστροφές εντός του Τ να το μετασχηματίσουμε στο Τ2; Ποιά «προοδευτική» διαδικασία μπορούμε να χρησιμοποιήσουμε. Μπορούμε να το κάνουμε σε Ο(Ν) βήματα; Εξηγείστε την απάντησή σας. 4. Ποιά πρόοδος παρατηρείται στον παρακάτω κώδικα; Πώς θα την περιγράφατε με βάση το σχήμα περιγραφής που δώσαμε στα προηγούμενα; Επεξεργασία(Α[..Ν]: πίνακας Ν αριθμών) { Τέλος ΨΕΥΔΕΣ Εφόσον (όχι Τέλος) { Τέλος ΑΛΗΘΕΣ Για κ = έως Ν { Εάν Α[κ]>Α[κ+] τότε { Α[κ] Α[κ+} // εναλλαγή Τέλος ΨΕΥΔΕΣ } } } } 5. Πάνω στην «ευθεία» των ακεραίων τοποθετούμε στις θέσεις 0 έως Ν από ένα κέρμα. Επιτρέπεται να μετακινούμε τα κέρματα με τους εξής και μόνον τρόπους: ένα κέρμα από τη θέση κ μπορεί να μετακινηθεί στην κ, εφόσον αυτή είναι ελεύθερη (δηλαδη δεν φέρει κανένα κέρμα). ένα κέρμα από την θέση κ μπορεί να μετακινηθεί στην κ+2, εφόσον, (α) η θέση κ+ φέρει κέρμα, (β) η θέση (κ+2) είναι ελεύθερη, και, (γ) κατά την μετακίνηση του κέρματος από την θέση κ, αφαιρέσουμε το κέρμα από την θέση (κ+) (η κίνηση αυτή θυμίζει τις κινήσεις στο παιγνίδι της «ντάμας»). Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 9/0
Εκτελώντας κινήσεις σύμφωνα με τους παραπάνω κανόνες είναι δυνατόν να μετακινήσουμε κέρματα σε θέσεις και μετά την Ν στή θέση. Σε πόσες το πολύ θέσεις μετά την Ν στή μπορούμε να κινήσουμε ένα κέρμα (ως συνάρτηση του Ν); Δείξατε ότι αυτή η «πρόοδος» είναι φραγμένη! Υπόδειξη: παρατηρείστε την ομοιότητα του άλματος ενός κέρματος προς τα δεξιά, με την ακολουθία Fibonacci, «Φκ + Φκ+ = Φκ+2», δώστε στη θέση κ αξία ίση με Φκ αν φέρει κέρμα, (αλλιώς: = 0), και μετρείστε πόση αξία έχει το «πορτοφόλι» μας. Πανεπιστήμιο Κρήτης Τμ. Επιστήμης υπολογιστών «Αλγόριθμοι & πολυπλοκότητα, ΗΥ380 Γεώργιος Φ.Δ. Γεωργακόπουλος, /5/204, 0/0