(17 ο ) ΚΛΑΣΜΑΤΙΚΗ ΑΝΑΓΩΓΗ - I: «ελάχιστος περιβάλλων κύκλος» Αναγωγή σε «1» υποπρόβλημα Στις προηγούμενες ενότητες είδαμε δύο κλασικές πια τεχνικές σχεδίασης αλγορίθμων, την «διαίρει & βασίλευε» και τον «δυναμικό προγραμματισμό». Και οι δύο ανάγουν το προς επίλυση πρόβλημα αναδρομικά στον «εαυτό» χρησιμοποιώντας ένα πλήθος υποπροβλημάτων. Η πρώτη κατά κάποια έννοια διασπά το πρόβλημα σε 2, 3, και εν γένει Θ(1) μικρότερα υποπροβλήματα, και η δεύτερη το ανάγει σε πολλά (ενδεχομένως και μεταβλητού πλήθους) μικρότερα υποπροβλήματα. Θα δούμε στη συνέχεια, στις επόμενες ενότητες μια τρίτη τεχνική η οποία ακολουθεί την τρίτη οδό που έχει απομείνει: να ανάγει το προς επίλυση πρόβλημα σε ένα δραστικά μικρότερο υποπρόβλημα. Η ιδέα αυτή μοιάζει παράξενη: εάν εκκινήσει κάποιος από Ν δεδομένα για να βρεί τα ζητούμενα, και είναι σε θέση να ανάγει το πρόβλημα σε λ.χ. ¾ Ν δεδομένα, τότε είναι σαν να λέει ότι το ¼ Ν από αυτά «δεν παίζουν ρόλο» στη λύση. Αλλά αυτό είναι δυνατόν να συμβαίνει: υπάρχουν προβλήματα η λύση των οποίων ορίζεται από ένα μικρό ή και ελάχιστο μέρος των δεδομένων (απλά δεν ξέρουμε στην αρχή, ποιά θα μπορούσαν να είναι αυτά). Η τεχνική αυτή δείχνει την μεγάλη ικανότητά της να δίδει δραστικούς αλγορίθμους, κυρίως όταν η μείωση των δεδομένων που επιτυγχάνει είναι «κλασματική», δηλαδή όταν από «Ν» δεδομένα, απομένουμε με «αν» δεδομένα, όπου το α είναι ένα κλάσμα μικρότερο της μονάδος, λχ. α = 2 /3, ή 3 /4 ή έστω και 11 /12. Ο λόγος είναι ότι η επανάληψη αυτής της κλασματικής μείωσης οδηγεί στη μείωση των δεδομένων με «γεωμετρική πρόοδο»: λ.χ. από το Ν στο 3 /4Ν, στο ( 3 /4) 2 Ν, ( 3 /4) 3 Ν κλπ. Κατ αυτόν τον τρόπο αρκούν μόλις Θ(logN) βήματα για απομείνει κάποιος με μόλις Θ(1) δεδομένα. Για την τεχνική αυτή δεν έχουμε ένα επίσημο όνομα, αλλά εδώ (για προφανείς λόγους) θα την αποκαλέσουμε «κλασματική αναγωγή». Θα την παρουσιάσουμε με 3-4 παραδείγματα στις επόμενες ενότητες. Ένα θεμελιακό και πανταχού παρόν παράδειγμα Είτε το πιστεύετε είτε ότι το πιο γνωστό παράδειγμα αυτής της σχεδόν ανώνυμης τεχνικής, είναι ο πιο θεμελιακός αλγόριθμος στην πληροφορική, η λεγόμενη δυαδική (ή καλύτερα διχοτομική) αναζήτηση: Μας δίνονται Ν διαστήματα [ακ, βκ] πάνω σε μια ευθεία, ξένα μεταξύ τους. Αυτό που ζητείται είναι να μπορούμε να διαπιστώνουμε για κάθε διδόμενο σημείο σ, σε ποιό από αυτά τα διαστήματα ανήκει (ή ότι δεν ανήκει σε κανένα από αυτά). «ΕΝΤΟΠΙΣΜΟΣ ΣΗΜΕΙΟΥ ΣΕ ΔΙΑΣΤΗΜΑΤΑ» ΔΙΔΕΤΑΙ: Ν διαστήματα (ακ, βκ) επί ευθείας, ξένα μεταξύ τους, και σημεία σ1, σ2,..., σμ,... ΖΗΤΕΙΤΑΙ: Οι απαντήσεις δi {0, 1, 2,...,Μ,...}, i = 1, 2,..., Μ,... ΩΣΤΕ: το σημείο σi να ανήκει στο διάστημα δi (ή σε κανένα εάν δi = 0). σ i δ i α 1 β 1 α κ β κ α? β? α Ν β Ν Η παραδοσιακή λύση σε αυτό το πρόβλημα είναι να ταξινομήσουμε τα διαστήματα επί της ευθείας, έτσι ώστε δεδομένου ενός σημείου σ να μπορούμε να προβαίνουμε σε μια διχοτομική αναζήτηση: Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-1 -
ελέγχουμε εάν το διδόμενο σημείο σ είναι στο «μεσαίο» διάστημα, δηλαδή το υπ. αρ. κ Ν/2. Εάν ναί, δηλαδή ακ σ & σ βκ, τότε έχουμε την απάντησή μας. Αλλιώς είτε σ < ακ, είτε βκ < σ. Στη 1 η περίπτωση το σημείο σ δεν μπορεί παρά να ευρίσκεται στα πρώτα Ν/2 διαστήματα, και στη 2 η περίπτωση, σε κάποιο από τα τελευταία Ν/2. Σε κάθε περίπτωση έχουμε μια δραστική πρόοδο: απορρίπτουμε στη συνέχεια της αναζήτησης ένα κλάσμα των δεδομένων, εδώ τα μισά. Αλγόριθμος «Εντοπισμός σημείων σε σύνολο ξένων διαστημάτων» ΑναζήτησηΣημείου( α,β: πίνακας Ν άκρων, σ: Μ σημεία) Συνάρτηση Διάστημα(σ: σημείο, κ,λ: θέσεις στον πίνακα) { Περίπτωση λ < κ: Διάστημα 0 λ κ: { μ (κ+λ) δια 2 Περίπτωση { σ < α[μ]: Διάστημα Διάστημα(κ,μ-1) σ > β[μ]: Διάστημα Διάστημα(μ+1,λ) } Αλλιώς : Διάστημα μ } } Τ(Ν) Θ(1) Θ(1) ή Τ(Ν/2) ή Τ(Ν/2) ή Θ(1) { Ταξινομούμε τα [α κ,β κ ] ως προς τα άκρα τους (λχ το α ) Για i = 1 έως Μ { ΑναζήτησηΣημείου Διάστημα(σ[i], 1,Ν)... // επεξεργασία απάντησης } } Η κοστολόγηση αυτής της αναζήτησης (συνάρτηση «Διάστημα») λαμβάνει μια χαρακτηριστική μορφή. Η αναζήτηση ανάμεσα σε Ν διαστήματα μετά από Θ(1) ενέργειες ανάγεται στην αναζήτηση ανάμεσα σε Ν/2 το πολύ διαστήματα, επομένως το κόστος Τ(Ν) αυτής, ικανοποιεί την σχέση: Τ(Ν) Τ(Ν/2) + Θ(1) η οποία επιλυόμενη δίδει Τ(Ν) = Ο(logΝ). Αυτή η τεχνική αναζήτησης είναι η πιο διαδεδομένη στον χώρο της επιστήμης του υπολογισμού θα την συναντάμε σχεδόν παντού και σε μύριες παραλλαγές. Στο παραπάνω παράδειγμα και ίδίως στη σχέση που δίδει την πλοκή, βλέπουμε σε απλή και αρχετυπική μορφή τα χαρακτηριστικά της μεθόδου που θέλουμε να πειργράψουμε Στο αριστερό μέλος έχουμε το κόστος και στο δεξιό σε τι αυτό αναλύεται: (α) σε ένα μέρος του κόστους των ενεργειών για οδηγούν στην απόρριψη ενός κλάσματος των δεδομένων, (εδώ το κόστος είναι ελάχιστο-μόλις Θ(1), και τα απορριπτόμενα δεδομένα είναι πολλά ~Ν/2), και (β) στο κόστος χειρισμού κατά τον ίδιο τρόπο των δεδομένων που υπολείπονται, τα οποία εδώ είναι «μόλις» τα μισά από τα αρχικά: ~Ν/2 ( = Ν Ν/2). Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-2 -
Ένα γεωμετρικό και χαρακτηριστικό παράδειγμα Θα δούμε στην συνέχεια ένα εξαιρετικό παράδειγμα «κλασματικής αναγωγής». Το παράδειγμα είναι αρκετά σύνθετο, αλλά καθώς έρχεται από την επίπεδη γεωμετρία μας επιτρέπει να έχουμε μια καλή οπτική απεικόνιση και σύλληψη των χαρακηριστικών του. Έστω ότι θέλουμε να τοποθετήσουμε επί μιας ευθείας οδού ένα κέντρο εξυπηρέτησης (λ.χ. εμπορικό κατάστημα, αποθήκη προμηθειών, ιατρικός σταθμός, κεραία εκπομπής ραδιοφώνου ή TV, κττ). Στην πέριξ περιοχή υπάρχουν Ν τοποθεσίες τις οποίες θέλουμε να εξυπηρετήσουμε: οικισμοί, χώροι εργασίας, δημόσιες υπηρεσίες, κττ. Είναι εύλογο να επιλέξουμε ως θέση του κέντρου εξυπηρέτησης εκείνη που ελαχιστοποιεί την μέγιστη απόσταση μιας τοποθεσίας από αυτό το κέντρο υπηρέτησης: «ΕΛΑΧΙΣΤΟΣ ΠΕΡΙΒΑΛΛΩΝ ΚΥΚΛΟΣ» ΔΙΔΕΤΑΙ: Ν σημεία Ρκ στο επίπεδο και μια ευθεία ε. ΖΗΤΕΙΤΑΙ: Ένας «περιβάλλων» κύκλος, ΩΣΤΕ: (α) να έχει το κέντρο του επί της ευθείας ε, (β) να περιέχει όλα τα σημεία Ρκ, (γ) και να έχει την μικρότερη δυνατόν ακτίνα. Διακριτοποίηση και εξαντλητική αναζήτηση: Κατά την εξέταση του προβλήματος που πρόκειται να ακολουθήσει καλόν είναι να μην ξεχάσουμε ότι εξετάζουμε όλα τα προβλήματα σε αυτές τις σημειώσεις και για τον εαυτό του, αλλά και ως παραδείγματα. Να μην ξεχάσουμε λοιπόν ότι δεν μας ενδιαφέρει μόνον η λύση τους, αλλά και ο τρόπος που φθάνουμε σε αυτήν τα στοιχεία μεθοδολογίας που περιέχει και μας προσφέρει ως μάθημα. Ας παρακολουθήσουμε λοιπόν βήμα-βήμα την λύση ενός προβλήματος σαν αυτό που μόλις αναφέραμε. Κατ αρχάς, δεν γνωρίζουμε κάν εάν το πρόβλημά μας έχει έστω μία λύση, ούτε εάν αυτή είναι μοναδική. Η πηγή αυτού του προβλήματος είναι ότι οι υποψήφιοι κύκλοι είναι άπειροι, (και ως προς το κέντρο του κύκλου, και ως προς την ακτίνα του), άρα, εκ πρώτης τουλάχιστον όψεως, δεν είμαστε σε θέση να καταφύγουμε ούτε σε μια αφελή εξαντλητική αναζήτηση. Π.χ. εάν η ακτίνα του κύκλου πρέπει να είναι η 2, ένας άρρητος αριθμός δηλαδή, με άπειρα δεκαδικά ψηφία, πώς θα μπορούσαμε να παραδώσουμε την απάντηση; Στο συγκεκριμμένο παράδειγμα θα μπορούσαμε να απαντήσουμε «ακτίνα = τετραγωνική ρίζα του 2», αλλά και πάλι αυτή η διαφυγή δεν αποτελεί αποτελεί μια καθολική λύση η ακτίνα θα μπορούσε να ήταν κάποιος άλλος άρρητος αριθμός. Εκ πρώτης δηλαδή όψεως, το πρόβλημά μας ενδέχεται να μην είναι κάν αλγοριθμικό... Ας επιστρέψουμε λοιπόν στα ζητούμενα. Όταν ζητείται ένας αντικείμενο, εδώ ένας κύκλος, δεν ζητείται φυσικά να μας τον συσκευάσουν και να μας τον αποστείλουν... :-) Αυτό που ζητείται να μας υποδείξουν από ποιά στοιχεία, διαθέσιμα ή υπολογίσιμα ορίζεται αυτός ο κύκλος. Γνωρίζουμε ότι ένας κύκλος είναι δυνατόν να ορίζεται με διάφορους τρόπους: λ.χ. από το κέντρο του και την ακτίνα του, από τρία σημεία της περιφέρειάς του, κά. Ας προσέξουμε λοιπόν ότι εδώ ο ζητούμενος κύκλος «ορίζεται» από το κέντρο του και μόνον (επί της ευθείας ε), διότι η απαίτηση να περιέχει όλα τα σημεία και να έχει την ελάχιστη ακτίνα, προσδιορίζει και την ακτίνα, ως το ελάχιστο τμήμα ΚΡi, i = 1,...,N. Περιμένουμε λοιπόν ο ζητούμενος κύκλος να περιέχει στην περιφέρειά του ένα τουλάχιστον σημείο από τα δεδομένα το πιο απομεμακρυσμένο από το κέντρο του. Και πράγματι, ας αναρωτηθούμε: είναι δυνατόν όλα τα σημεία από τα δεδομένα να μην κείνται επί της περιφέρειας; Είναι δηλαδή δυνατόν όλα να βρίσκονται στο εσωτερικό ενός τέτοιου κύκλου; Προφανώς όχι, διότι τότε (βλ. επόμενο σχήμα, αριστερά) όλα τα σημεία Ρj θα είχαν επί της ακτίνας ΚΡj ένα «περιθώριο» δj > 0 έως την περιφέρεια, το οποίο θα μας επέτρεπε να κρατήσουμε το κέντρο Κ στην ίδια θέση επί της ε, και να μειώσουμε την ακτίνα κατά min{ δj } χωρίς να πάψει ο νέος κύκλος να περιέχει όλα τα σημεία. Ο αρχικός κύκλος λοιπόν δεν θα ήταν ο ελάχιστος περιβάλλων. Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-3 -
δ i Ρ i δ i Ρ' i Ρ i δ j Ρ j δ j Ρ j ε K ε Π i K Ρ k Ρ k δ k δ k Είναι δυνατόν ένα μόνον σημείο, έστω το Ρi, από τα δεδομένα να κείται επί της περιφέρειας; Στη «γενική περίπτωση» ούτε αυτό είναι δυνατόν... Σκεφθείτε την ευθεία που άγεται από το Ρi παράλληλα με την ε (βλ. σχήμα, δεξιά). Έστω ότι τέμνει την περιφέρεια στο σημείο Ρ i. Το τμήμα Ρi Ρ i, μήκους δi μας δίνει ένα περιθώριο να διολισθήσουμε το κέντρο του κύκλου προς την προβολή Πi του Ρi επί της ε (προς τα αριστερά στο σχήμα), ώστε να φέρουμε το Ρi στο εσωτερικό του κύκλου. Μπορούμε μάλιστα να κρατήσουμε όλα τα υπόλοιπα σημεία εντός του κύκλου: τα υπόλοιπα σημεία Ρj, (όλα στο εσωτερικό του κύκλου), έχουν ένα «περιθώριο» δj > 0 έως την περιφέρεια κατά μήκος της ημιευθείας που άγεται από αυτά και είναι παράλληλη και ομόρροπη Ρi Ρ i. Αρκεί λοιπόν να διολισθήσουμε το κέντρο Κ κατά 1 /2 min{ δj } «προς» το Ρi. Φέρνοντας όλα τα σημεία εντός του κύκλου μπορούμε στη συνέχεια να μειώσουμε την ακτίνα του όπως έχουμε ήδη παρατηρήσει. Έτσι βρίσκουμε έναν νέο κύκλο που έχει το κέντρο του επί της ε, συνεχίζει να περιέχει όλα τα σημεία, και έχει μικρότερη ακτίνα άρα ο κύκλος από τον οποίο ξεκινήσαμε δεν μπορεί να είναι ο βέλτιστος... (Γράψαμε πιο πριν στην «γενική περίπτωση», διότι σε μια ακραία περίπτωση θα μπορούσε το Ρi να συνέπιπτε με το Ρ i, και άρα το περιθώριο δi να ήταν μηδενικό. Τότε όμως η παράλληλη προς την ε από το Ρi είναι εφαπτομένη του κύκλου, και άρα η ευθεία το κέντρο ΡiΚ κάθετη στην ευθεία ε. Σε αυτή την περίπτωση ο κύκλος ορίζεται από ένα μόνο σημείο από τα δεδομένα.) Καταλήγουμε λοιπόν στο συμπέρασμα ότι ο κύκλος που ζητάμε εάν υπάρχει... θα πρέπει να έχει μία από δύο ειδικές μορφές: 1 η μορφή: Είτε περιέχει επί της περιφέρειάς του 2 σημεία Α και Β, από τα δεδομένα. Σε αυτή την περίπτωση το κέντρο του Κ ανήκει στην μεσοκάθετο μαβ του τμήματος ΑΒ, και άρα το Κ προσδιορίζεται ως η μία και μοναδική τομή των ευθειών ε και μαβ. 2 η μορφή: Είτε περιέχει επί της περιφέρειάς του 1 μόνον σημείο Ρ από τα δεδομένα. Σε αυτή την περίπτωση όπως είδαμε, το κέντρο Κ προσδιορίζεται ως η μοναδική προβολή του Ρ επί της ε. Το κέντρο του ζητουμένου λοιπόν κύκλου θα είναι είτε μία από τις προβολές των Ρi επί της ε, (το οποίο δίδει Ν υπολογίσιμες δυνατότητες), ή θα προέρχεται από ένα ζεύγος σημείων Ρi Ρj, (το οποίο δίδει Ν(Ν 1)/2 υπολογίσιμες δυνατότητες). Είναι δυνατόν λοιπόν να διακριτοποιήσουμε το πρόβλημά μας, να περιορίσουμε δηλαδή την χώρο των ενδεχόμενων λύσεων σε ένα πεπερασμένο σύνολο πεπερασμένων απαντήσεων. Αυτές είμαστε σε θέση να τις εξετάσουμε «εξαντλητικά», άρα το πρόβλημά μας είναι όντως αλγοριθμικό. Ο σχετικός κώδικας είναι ο εξής: Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-4 -
Αλγόριθμος «Ελάχιστος περιγεγραμμένος κύκλος» (εξαντλητική εκδοχή) ΒέλτιστοΚέντρο( Ρ: πίνακας Ν σημείων, ε: ευθεία) Συνάρτηση ΑπόμακροΣημείο(Ρ: πίνακας Ν σημείων, Κ: σημείο) { m 1 Για i = 2 έως Ν { Εάν ΚΡ[i] > ΚΡ[m] τότε m i } ΑπόμακροΣημείο m } { Κέντρα Για i = 1 έως N Κέντρα Κέντρα + (προβολή Ρ[i] επί ευθείας ε) Για i = 1 έως N Για j = (i+1) έως Ν Κέντρα Κέντρα + (τομή μεσο (Ρ[i]Ρ[j]) με ευθεία ε) ΒέλτιστοΚέντρο το Κ Κέντρα που δίδει ελάχιστη απόσταση ΚΡ[ΑπόμακροΣημείο(Ρ,Ν,Κ)] } Δεν είναι δύσκολο να εκτιμήσουμε την πλοκή του παραπάνω κώδικα: έχουμε Θ(Ν 2 ) υποψήφια κέντρα, και η αξιολόγηση καθενός κοστίζει Θ(Ν), επομένως έχουμε συνολικό χρονικό κόστος Θ(Ν 3 ) υψηλό μεν, αλλά πάντως «πολυωνυμικό». Ακόμα και εάν σταματούσαμε σε αυτό το σημείο θα είχαμε σημειώσει μια μικρή επιτυχία. Πρώτον, διότι αρχικά δεν είχαμε καμμία γνώση για το πρόβλημά μας, αν δηλαδή είναι αλγοριθμικό ή όχι. Και δεύτερον διότι η προηγούμενη ανάλυση και ο «εξαντλητικός» αλγόριθμος στον οποίον οδήγησε, αποτελεί ταυτόχρονα και μια απόδειξη ότι πάντοτε υπάρχει λύση κάτι που επίσης αγνοούσαμε αρχικά. Το εντυπωσιακό μέρος που ακολουθεί είναι ότι η παραπάνω λύση επιδέχεται μια δραματική βελτίωση από Θ(Ν 3 ) σε Θ(Ν)... Αν δύο σημεία αρκούν για τον ορισμό του κέντρου τί τα θέλουμε τα υπόλοιπα; Σε αυτό το σημείο μπορούμε πια να εκθέσουμε την ιδέα της «κλασματικής αναγωγής». Είδαμε ότι η λύση στο πρόβλημα μας, αυτό του ελαχίστου περιβάλλοντος κύκλου με κέντρο επ ευθείας, προσδιορίζεται από δύο δεδομένα σημεία. Καλώς. Ας πάρουμε δύο σημεία Α, Β από τα δεδομένα έστω τυχαία. Σε μια ακραία (και εξ αυτού, μάλλον αδιάφορη περίπτωση) αυτά τα δύο θα μας δίδουν την λύση. Το εάν αυτό συμβαίνει ή όχι, διαπιστώνεται έυκολα: υπολογίζουμε το κέντρο ΚΑΒ που αντιστοιχεί σε αυτά: αφού ισαπέχει από τα Α και Β και ευρίσκεται επί της είναι απλώς η τομή της μεσο (ΑΒ) και ευθείας ε. Στη συνέχεια εντοπίζουμε το πιο απόμακρο σημείο ΡΑΒ από το (υπό-έλεγχο) κέντρο ΚΑΒ. Εάν η απόσταση-ακτίνα ΚΑΒΡΑΒ είναι μεγαλύτερη από την R = ΚΑΒΑ = ΚΑΒΒ, τότε προφανώς ο κύκλος (ΚΑΒ, R), δεν περιέχει όλα τα σημεία (αφήνει το ΡΑΒ απέξω...) και το ζεύγος Α, Β δεν είναι αυτό που ψάχνουμε. Εάν όμως η λύση δεν ορίζεται από το ζεύγος Α, Β, ένα από τα δύο (τουλάχιστον) δεν ορίζει την λύση, και αφού είναι περιττό θα μπορούσαμε «στη συνέχεια» να το αγνοήσουμε. Ποιό όμως από τα δύο; Το ερώτημα αυτό έχει ενδιαφέρον, και αξίζει να διακόψετε εδώ την ανάγνωση και να δώσετε λίγο χρόνο στον εαυτό σας να σκεφθείτε το ζήτημα μόνοι σας. Το σκεπτικό μας είναι το εξής: Κατ αρχήν, η απόρριψη ενός δεδομένου (ενός σημείου εδώ) επηρρεάζει την απάντηση στο πρόβλημά μας αφού αυτή εξαρτάται πάντοτε από τα δεδομένα. Δεν μπορούμε λοιπόν να αγνοήσουμε ένα δεδομένο και ως εκ τούτου να επηρρεάσουμε την λύση χωρίς προηγουμένως να έχουμε αποκτήσει, κάπως, μια πληροφορία για την λύση-απάντηση. Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-5 -
Δοκιμάζουμε λοιπόν ένα τυχαίο ζεύγος σημείων, διαπιστώνουμε ότι δεν δίδει την λύση, άρα ένα εκ των δύο είναι περιττό ΟΚ αλλά τί άλλο μάθαμε για την λύση; Γνωρίζουμε ότι για την λύση αρκεί ο προσδιορισμός του κέντρου του ζητουμένου κύκλου, επομένως τί μάθαμε για το κέντρο; Προσέξτε εδώ ένα επανερχόμενο στερεότυπο: ψάχνουμε για μια βέλτιστη λύση, δοκιμάζουμε μία ενδεχόμενη λύση, διαπιστώνουμε ότι δεν είναι βέλτιστη, και περιμένουμε αυτή η αποτυχία να μας δώσει μια κάποια πληροφορία περί της βέλτιστης λύσης. Ποιά είναι αυτή η πληροφορία στη περίπτωσή μας; Ας καταφύγουμε στο παρακάτω σχετικό σχήμα: μέσο (ΑΒ) B Ρ ΑΒ A K ΑΒ K * Π ΑΒ ε όλα πλησιέστερα στο Α <= => όλα πλησιέστερα στο Β Το σκηνικό είναι το εξής: για να εξετάσουμε ένα ζεύγος Α, Β εκ των δεδομένων σημείων, φέρνουμε την μεσοκάθετο του ΑΒ, και βρίσκουμε την τομή της ΚΑΒ με την ευθεία ε. Είναι αυτό το σωστό κέντρο; Υπολογίζουμε την μέγιστη απόσταση ΚΡi, i = 1, 2,..., N, (Θ(Ν) βήματα αρκούν), και έστω ότι αυτή δίδεται από το σημείο ΡAB. Έστω ότι διαπιστώνουμε πως αυτό διαφέρει από τα Α και Β, και ότι επομένως το ΚΑΒ δεν είναι το βέλτιστο κέντρο. Τί μάθαμε για το βέλτιστο κέντρο έστω Κ* εκτός από ότι διαφέρει από το ΚΑΒ :-); Αφού ο κύκλος με ακτίνα «ΚΡ» περιέχει όλα τα σημεία και δεν είναι ο βέλτιστος, τότε η βέλτιστη ακτίνα είναι μικρότερη από την ΚΡ, και άρα το κέντρο πρέπει να μετακινηθεί προς την προβολή ΠΑΒ του σημείου ΡΑΒ επί της ε: αν κινηθεί προς την αντίθετη κατεύθυνση η ακτίνα Κ*Ρ μόνο να μεγαλώσει μπορεί. Η (ουσιώδης) πληροφορία που έχουμε δηλαδή είναι ότι το βέλτιστο κέντρο Κ* ευρίσκεται προς εκείνο το μέρος της ευθείας ε που περιέχει την προβολή ΠΑΒ. Ας προσέξουμε ότι η μεσοκάθετος των ΑΒ, μαβ, χωρίζει το επίπεδο σε δύο ημιεπίπεδα, και, αντίστοιχα, την ευθεία ε σε 2 ημιευθείες. Εάν (σε μια ακραία περίπτωση) η προβολή του ΡΑΒ ήταν το ίδιο το κέντρο ΚΑΒ τότε η απόσταση Κ*ΡΑΒ δεν μπορεί να μειωθεί, και άρα αυτό το κέντρο ΚΑΒ είναι η λύση κατά την «2 η μορφή» από τις δύο που έχουμε ήδη αναφέρει στην προηγούμενη ενότητα. Αλλιώς η προβολή ΠΑΒ είναι είτε από τη μία είτε από την άλλη πλευρά της ε ως προς το ΚΑΒ, και το Κ* περιορίζεται σε εκείνη την πλευρά που περιέχει αυτή την προβολή ΠΑΒ. Στο σχήμα αυτή η πλευρά της ε είναι σε εκείνο το ημιεπίπεδο ως προς την μεσοκάθετο μαβ που περιέχει το Β. Προσέξτε εδώ ότι εάν τα πιο απομακρυσμένα σημεία τύχει να είναι τα Α, Β, (αναγκαστικά, αφού και τα δύο αφού ισαπέχουν από το ΚΑΒ) τότε ουσιαστικά εξετάζουμε τις προβολές του ΠΑ και ΠΒ επί της ε. Αν και οι δύο είναι προς την αυτή πλευρά του ΚΑΒ, τότε προς αυτήν την πλευρά πρέπει να κινηθούμε. Αν όμως ευρίσκονται σε διαφορετικές πλευρές τότε αφού δεν μπορούμε να κινηθούμε... και προς τις δύο πλευρές, το ΚΑΒ είναι το βέλτιστο κέντρο (βλ. επόμενο σχήμα). Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-6 -
μέσο (ΑΒ) B μέσο (ΑΒ) B A A K ΑΒ ε K ΑΒ Π ΠΑ Β?? Π Α Π Β K * όλα πλησιέστερα στο Α <= => όλα πλησιέστερα στο Β Η συνάρτηση που αποφασίζει σε ποιά πλευρά, ως προς το ελεγχόμενο «κέντρο» ΚΑΒ, περιορίζεται το βέλτιστο κέντρο Κ είναι η ακόλουθη. (Θα υποθέσουμε ότι η ευθεία ε φέρει έναν προσανατολισμό ώστε κάθε σημείο επ αυτής να έχει δύο πλευρές: δεξιά προς την κατεύθυνση της ε, αλλιώς αριστερά.) Συνάρτηση «Πλευρά-Κ*» Συνάρτηση Πλευρά-Κ*( Ρ: πίνακας Ν σημείων, ε: ευθεία, Κ: σημείο) Συνάρτηση ΑπόμακροΣημείο(Ρ: πίνακας Ν σημείων, Κ: σημείο) {... // όπως προηγουμένως } { R η απόσταση ΚΡ[ΑπόμακροΣημείο(Ρ,Ν,Κ)] Π τα σημεία-προβολές επί της ε όσων σημείων Ρ j έχουν KΡ j = R Περίπτωση { όλα τα σημεία Π δεξιά Κ: Πλευρά-Κ* δεξιά όλα τα σημεία Π αριστερά Κ: Πλευρά-Κ* αριστερά } Αλλιώς { Πλευρά-Κ* ακριβώς } } } Το αξιοσημείωτο είναι το εξής: όταν η προβολή ΠΑΒ είναι πλησιέστερα στο Β, όπως στο προ-προηγούμενο σχήμα, όλα τα σημεία της ημιευθείας ΚΑΒ ΠΑΒ είναι πλησιέστερα στο Β παρά στο Α δηλαδή ακόμα και για το άγνωστο μέχρι στιγμής βέλτιστο κέντρο Κ* έχουμε εξασφαλίσει ότι θα απέχει λιγότερο από το Β, παρά από το Α: Κ*Β < Κ*Α. Αυτό όμως μας λέει, επιτέλους, ποιό από τα δύο σημεία είναι πια άχρηστο: το Β δεν χρειάζεται πια να το λάβουμε υπόψι μας διότι όπως μόλις είδαμε ένας κύκλος ελάχιστης ακτίνας και με κέντρο Κ* επί της ε, εάν περιέχει όλα τα σημεία (εκτός ίσως από το Β), τότε οπωσδήποτε θα περιέχει και το Β. Μπορούμε λοιπόν να λάβουμε τα Ν σημεία ανά Ν/2 ζεύγη, να αποφασίσουμε σε Θ(Ν) βήματα για το καθένα πιό σημείο από κάθε ζεύγος να απορρίψουμε, και να συνεχίσουμε (αναδρομικά) με όσα απομένουν, έως ότου απομείνουμε με Θ(1) σημεία, από τα οποία η λύση θα προέκυπτε εύκολα, λ.χ. με εξαντλητικό έλεγχο κόστους, πια, Θ(1). Το κόστος χειρίστης περιπτώσεως Τ(Ν) μιας τέτοιας απόπειρας θα προέκυπτε από την σχέση Τ(Ν) = Τ(Ν/2) + Θ(Ν 2 ). Φαίνεται στην προηγούμενη σχέση Τ(Ν) = Τ(Ν/2) + Θ(Ν 2 ) το καινούργιο στοιχείο στην μέθοδο που θέλουμε να εξηγήσουμε εδώ: εξετάζουμε τα δεδομένα, και με κάποιο μικρό ή μεγάλο κόστος (εδώ Ο(Ν 2 )) απορρίπτουμε ένα κλάσμα αυτών (εδώ τα μισά) ως «άσχετα με την λύση», και με αυτό τον τρόπο ανάγουμε την λύση ενός στιγμιότυπου μεγέθους Ν, σε ένα στιγμιότυπο με κλασματικά Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-7 -
μικρότερο μέγεθος (εδώ Ν/2). Αν λύσουμε την σχέση που βρήκαμε, (τηλεσκοπικά - κατά τα γνωστά), θα καταλήξουμε στο Τ(Ν) = Ο(Ν 2 ), πλοκή σημαντικά μικρότερη από την αρχική «εξαντλητική» Θ(Ν 3 ). Πολλές αποφάσεις; προσοχή στις σχέσεις μεταξύ τους! Μπορούμε όμως να κάνουμε κάτι ακόμα καλύτερο! Έστω ΑjBj τα Ν δεδομένα σημεία ανά ζεύγη, και ΚΑΒ,j τα κέντρα που αντιστοιχούν σε αυτά, επί της ευθείας ε. Για κάθε τέτοιο κέντρο είδαμε πώς να αποφασίζουμε εάν το βέλτιστο κέντρο Κ* θα είναι «προς-τα-δεξιά» ή «προς-τα-αριστερά» του επί της ε. Αυτές οι αποφάσεις όμως είναι πολλές (Θ(Ν)), και κοστίζουν αθροιστικά πολύ (Θ(Ν) εκάστη), δεν είναι όμως ανεξάρτητες μεταξύ τους. Αν έχουμε διαπιστώσει ότι το βέλτιστο Κ* βρίσκεται αριστερά του Κ, και ένα άλλο κέντρο υπό έλεγχο Κ, ευρίσκεται δεξιά από το Κ, τότε σε «ένα» μόνο βήμα μπορούμε να διαπιστώσουμε ότι το Κ* είναι επίσης αριστερά του Κ (δείτε επόμενο σχήμα). Συμφέρει λοιπόν να εντοπίσουμε πιό από τα Ν/2 κέντρα ΚΑΒ,j είναι στη μέση, (έχει δηλαδή τα μισά (= ~Ν/4) υπόλοιπα κέντρα προς τα δεξιά του και τα άλλα μισά προς τα αριστερά του), και να κρίνουμε την θέση του βέλτιστου κέντρου Κ* μόνον ως προς αυτό το «μεσαίο» κέντρο ΚΔ. Εάν διαπιστώσουμε (σε Θ(Ν) βήματα) ότι το Κ* είναι προς τα αριστερά του ΚΔ, τότε εξετάζοντας όλα τα κέντρα ΚΑΒ,j και κρίνοντας για το καθένα σε «1» βήμα εάν είναι δεξιά ή αριστερά του ΚΔ, για τα ~Ν/4 από αυτά που είναι δεξιά του θα γνωρίζουμε χωρίς περαιτέρω κόστος ότι το Κ* είναι αριστερά και από αυτά. Εάν διαπιστώσουμε ότι το Κ* είναι προς τα δεξιά του ΚΔ, θα ενεργούσαμε κατά συμμετρικό τρόπο. Μπορούμε λοιπόν να αποφασίσουμε την θέση του βέλτιστου κέντρου ως προς ~Ν/4 κέντρα ΚΑΒ,j σε Θ(Ν) βήματα αρκεί να ελέγξουμε αυτή την θέση του μόνο για το «μεσαίο» κέντρο. Και με κάθε τέτοια απόφαση μπορούμε να καταλήξουμε στο εάν μπορούμε να αγνοήσουμε το αντίστοιχο Aj ή Bj σημείο. Κατά συνέπεια μπορούμε σε μόνον Θ(Ν) βήματα, να απορρίψουμε ~Ν/4 σημεία και να συνεχίσουμε με «μόνο» 3 /4Ν από αυτά. τα ~ Ν / 2 κέντρα K ΑΒ, j K K' ε τo "μεσαίο" κέντρο Κ Δ ~ Ν / 4 ~ Ν / 4 η θέση του βέλτιστου κέντρου ως προς Κ Δ K * ~ Ν / 4 και ακόμα ~Ν/4 αποφάσεις κόστους μόνον Θ(1) εκάστη... Για να εντοπίσουμε ποιό είναι το «μεσαίο κέντρο» ΚΔ, αρκεί φυσικά να ταξινομήσουμε τα ~Ν/2 κέντρα ΚΑΒ,j επί της ευθείας ε, και να θεωρήσουμε ως ΚΔ ως το υπ. αρ. ½(Ν/2) = Ν/4 από αυτά. Η ταξινόμηση κοστίζει Ο(ΝlogΝ) χρόνο, και έτσι η σχέση που δίνει το συνολικό χρονικό κόστος γίνεται: Τ(Ν) = Τ( 3 /4Ν) + Ο(ΝlogΝ), σχέση η οποία, (επιλυόμενη τηλεσκοπικά), δίδει Τ(Ν) = Ο(ΝlogN) (!) χρόνος εντυπωσιακά μικρότερος και από τον Θ(Ν 3 ), και από τον Θ(Ν 2 ). Ο σχετικός κώδικας δίδεται στο τέλος αυτής της ενότητας. Μπορούμε ακόμα καλύτερα! Και σε αυτό το πρόβλημα, όπως και σε προηγούμενα, συναντήσαμε την ανάγκη να «κόβουμε-στημέση», να βρίσκουμε δηλαδή το μεσαίο, ή διάμεσο όπως ονομάζεται στοιχείο από Ν στοιχεία μιας Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-8 -
διάταξης. Αυτό το πρόβλημα έχει θεμελιακό χαρακτήρα και καλόν θα ήταν να γνωρίζαμε την βέλτιστη δυνατή λύση του. Στο πρόβλημα αυτής της ενότητας για να εντοπίσουμε τον διάμεσο ταξινομήσαμε τα σημεία ΚΑΒ «κατά μήκος» της ευθείας ε: Συνάρτηση «Διάμεσος» Συνάρτηση Διάμεσος( Κ ΑΒ : πίνακας Ν σημείων, ε: ευθεία) { Διαλέγουμε (αυθαίρετα) σημείο αναφοράς Ο επί της ευθείας ε Ταξινομούμε τα σημεία Κ ΑΒ [-] ως προς τις αποστάσεις ΟΚ ΑΒ [-] κατά την φορά της ε και παραδίδουμε το «μεσαίο»: Διάμεσος Κ ΑΒ [Ν δια 2] } Είναι όμως αναγκαίο να ταξινομήσουμε για να βρούμε το μεσαίο στοιχείο από Ν δεδομένα; Αυτό είναι εκ πρώτης όψεως περίεργο, διότι η ταξινόμηση μας πληροφορεί για την διάταξη όλων των στοιχείων μεταξύ τους, ενώ το διάμεσο στοιχείο μας πληροφορεί για την διάταξη αυτού και μόνον του στοιχείου (ως προς τα υπόλοιπα). Μήπως λοιπόν είναι δυνατόν να εντοπίζουμε το διάμεσο στοιχείο χωρίς ταξινόμηση; Όπως θα δούμε στην επόμενη ενότητα αυτό είναι πράγματι δυνατόν: για την εύρεση του διάμεσου στοιχείου από Ν διατάξιμα στοιχεία αρκεί χρόνος Θ(Ν), και μάλιστα η σχετική τεχνική είναι πάλι αυτή της «κλασματικής αναγωγής». Χρησιμοποιώντας αυτή την βέλτιστη εκδοχή του υπολογισμού του διαμέσου, η σχέση που δίνει την πλοκή του αλγορίθμου μας γίνεται: Τ(Ν) = Τ( 3 /4Ν) + Θ(Ν), η οποία επιλυόμενη δίδει Τ(Ν) = Θ(Ν) (γραμμικός χρόνος!) ως εάν δηλαδή να αρκεί «μιά» ματιά στα Ν σημεία μας ίσως Θ(«μιά») για να διαπιστώσουμε πού είναι το κέντρο του ελαχίστου περιβάλλοντος κύκλου. Ένα πολύ πλούσιο παράδειγμα, και ένας αλγόριθμος κομψοτέχνημα! Αλγόριθμος «Ελάχιστος περιγεγραμμένος κύκλος» (ταχεία εκδοχή) ΒέλτιστοΚέντρο( Ρ: πίνακας Ν σημείων, ε: ευθεία) Τ(Ν) Συνάρτηση ΑπόμακροΣημείο(Ρ: πίνακας Ν σημείων, Κ: σημείο) {... // όπως προηγουμένως } Συνάρτηση Πλευρά-Κ*( Ρ: πίνακας Ν σημείων, ε: ευθεία, Κ ΑΒ : σημείο) {... // όπως προηγουμένως } Συνάρτηση Διάμεσος( Κ ΑΒ : πίνακας Ν σημείων, ε: ευθεία) {... // όπως προηγουμένως } Διαδικασία ΈλεγχοςΑπόρριψης(πλευρά, Κ Δ ) { i 0 Για j = 1 έως M { Εάν (Κ ΑΒ, j κείται στην πλευρά του Κ Δ ) ή δεν-υπάρχει (*) τότε Περίπτωση { Κ Δ Α j < Κ Δ B j : { i i+1, Ρ[i] Β j } // απόρριψη Α Κ Δ Α j > Κ Δ B j : { i i+1, Ρ[i] A j } // απόρριψη Β } } } // λίγη προσοχή δεν βλάπτει... Εάν (Ν mod 2)=1 (περιττό) τότε { i i+1, Ρ[i] Ρ[Ν] } Ν i } { Περίπτωση { Ν=1: ΒέλτιστοΚέντρο προβολή Ρ[1] επί της ε Ν=2: ΒέλτιστοΚέντρο τομή μεσο (Ρ[1]Ρ[2]) με ευθεία ε) Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-9 -
Ν 3: { // «ζευγαρώνουμε» τα σημεία - εκτός ίσως από το τελευταίο... Μ Ν δια 2 // π.χ. αν Ν=13, τότε Μ 6 Για j = 1 έως Μ { Α j Ρ[2j-1], Β j Ρ[2j] } // εντοπισμός «μεσαίου κέντρου» Για j = 1 έως Μ { Κ ΑΒ,j (τομή μεσο (A j B j ) με ευθεία ε) } Κ Δ Διάμεσο(Κ ΑΒ, Μ, ε) // απόρριψη περιττών Περίπτωση Πλευρά-Κ*(Ρ, Ν, ε, Κ Δ ) { ακριβώς : { Ν 1, Ρ[Ν] Κ Δ } // τέλος! δεξιά : ΈλεγχοςΑπόρριψης( αριστερά, Κ Δ ) αριστερά : ΈλεγχοςΑπόρριψης( δεξιά, Κ Δ ) } // και αναδρομή ΒέλτιστοΚέντρο ΒέλτιστοΚέντρο(Ρ,Ν,ε) } } } } Θ(Ν) Θ(Ν) Θ(ΝlogΝ)? Θ(Ν) ή Θ(Ν) Τ( 3 /4Ν) (*) Στην (ακραία) περίπτωση όπου η μεσοκάθετος(ab) είναι παράλληλη με την ε, και επομένως δεν υπάρχει η σχετική τομή Κ ΑΒ, μπορούμε να απορρίψουμε από τα A,Β εκείνο που κείται πλησιέστερα προς την ε η επόμενη εντολή αρκεί προς τούτο. Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών Γ.Φ. Γεωργακόπουλος ver: 30/4/2012-10 -