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

Κεφάλαιο 2Θεωρητικό Υπόβαθρο

Στο κεφάλαιο αυτό θα εξετασθούν τρία αντικείμενα. Πρώτον, θα παρουσιασθούν επί τροχάδην μερικά βασικά μαθηματικά εργαλεία που είναι απαραίτητα κατά την ανάλυση των αλγορίθμων. Πολλά από αυτά θα χρησιμοποιηθούν σε επόμενα κεφάλαια του βιβλίου. Δεύτερον, θα εισαχθούν με τυπικό τρόπο οι έννοιες της πολυπλοκότητας και των συμβολισμών Ο, Ω, Θ, ο και ω, που αναφέρθηκαν ακροθιγώς στο προηγούμενο κεφάλαιο. Τρίτον, θα γίνει μία πρώτη χρήση των μαθηματικών εργαλείων και των συμβολισμών στην πράξη για την μεθοδικότερη ανάλυση μερικών απλών αλγορίθμων.

2.1 Μαθηματικά Εργαλεία

Συνάρτηση Πάτωμα και Συνάρτηση Οροφή


Δεδομένου πραγματικού αριθμού x, το x ισούται με το ακέραιο μέρος του x, ενώ το x ισούται με τον μεγαλύτερο (ή ίσο) ακέραιο αριθμό του x. Για τις συναρτήσεις αυτές ισχύουν οι εξής ιδιότητες (όπου τα n,a,b ακέραιοι):

x-1xxxx+1 (2.1)
n/2+n/2=n (2.2)
n/ab=nab       n/ab=n/ab (2.3)

Εκθετικά και Δυνάμεις


Για τους πραγματικούς αριθμούς a0,m,n ισχύουν οι εξής βασικές ιδιότητες:

a0=1   a1=a   a-1=1/a   (am)n=amn=(an)m   aman=am+n (2.4)

Για πραγματικές σταθερές a>0,b ισχύει:

limnnban= 0 (2.5)

Για κάθε πραγματικό αριθμό x ισχύει:

ex= 1+x+x22!+x33!+=i=0xii!1+x (2.6)

Για |x|1 ισχύει:

1+xex 1+x+x2 (2.7)

Τέλος, ισχύει:

limn(1+xn)=ex (2.8)

όπου e2,71828, η βάση των φυσικών λογαρίθμων.

Λογάριθμοι


Για κάποιο φυσικό ή πραγματικό αριθμό x, οι λογάριθμοι συμβολίζονται με logbx, όπου b είναι η βάση του λογάριθμου. Συνήθως, οι χρησιμοποιούμενοι λογάριθμοι αναφέρονται σε δυαδική βάση και θα δηλώνονται με lgx, ενώ οι φυσικοί/νεπέριοι λογάριθμοι θα δηλώνονται με lnx. Για τους πραγματικούς αριθμούς a>0,b>0,c>0,n ισχύουν οι εξής βασικές ιδιότητες:

a=blogba   logc(ab)=logca+logcb   logban=nlogba   logba=logcalogcb (2.9)
logb(1/a)=-logba    logba=1logab    alogbn=nlogba (2.10)

Σε ό,τι αφορά στις εκφράσεις με τη βοήθεια των συμβολισμών Ο, Θ κλπ. δεν έχει σημασία αν ο λογάριθμος είναι δυαδικός, νεπέριος ή οποιοσδήποτε άλλος και για το λόγο αυτό μπορεί γενικώς να χρησιμοποιείται η έκφραση lg.

Σημαντικές σχέσεις είναι οι επόμενες. Για |x|<1 ισχύει:

ln(1+x)=x-x22+x33-x44+x55- (2.11)

ενώ για x>-1 ισχύει:

x1+xln(1+x)x (2.12)

Παραγοντικά


Είναι γνωστό ότι

n!= 1×2×3××n=i=1ni (2.13)

Πολύ συχνά χρησιμοποιούμενος είναι ο τύπος του Stirling:

n!=2πn(ne)n(1+112n+1288n2+) (2.14)

Αν απαλείψουμε την παρένθεση, τότε οδηγούμαστε σε μία πολύ καλή προσέγγιση. Για παράδειγμα, εφαρμόζοντας τον τύπο του Stirling καταλήγουμε ότι 1!0,92 (λάθος 8%), 2!1,92 (λάθος 4%), 5!118,02 (λάθος 2%), ενώ για το 100! το λάθος είναι 0.08%. Με άλλα λόγια, το λάθος είναι μία φθίνουσα συνάρτηση για αυξανόμενα n. Επίσης, από τον τύπο του Stirling και με απλή άλγεβρα προκύπτει ότι:

n!nn (2.15)

Αριθμοί Fibonacci


Η ακολουθία αριθμών Fibonacci δεύτερης τάξης ορίζονται ως εξής:

Fi=Fi-1+Fi-2 (2.16)

ενώ για τις αρχικές συνθήκες ισχύει F0=0 και F1=1. Άρα με βάση τον ορισμό προκύπτει ότι η σειρά των αριθμών Fibonacci είναι:

0,1,1,2,3,5,8,13,21,34,55, (2.17)

Δεδομένης της χρυσής τομής (golden ratio), ϕ, και της συζυγούς τιμής, ϕ^, που ισούνται αντίστοιχα με:

ϕ=1+52 1.61803       ϕ^=1-52-0.61803 (2.18)

μπορεί να αποδειχθεί επαγωγικά η ταυτότητα De Moivre:

Fi=ϕi-ϕ^i5 (2.19)

Καθώς |ϕ^|<1, συνεπάγεται ότι |ϕ^|/5<1/2. Άρα, ο i-οστός αριθμός Fibonacci ισούται με ϕi/5 στρογγυλεμένο στον αμέσως μεγαλύτερο ακέραιο.  

Αθροίσματα


Μερικές από επόμενες σχέσεις είναι ήδη γνωστές, αλλά τις επαναλαμβάνουμε για λόγους πληρότητας.

i=1ni= 1+2+3++n=12n(n+1) (2.20)
i=1ni2= 1+22+32++n2=16n(n+1)(2n+1) (2.21)
i=0nxi= 1+x+x2++xn=xn+1-1x-1 (2.22)

Αν |x|<1, τότε ισχύει:

i=0xi=11-x (2.23)

Παραγωγίζοντας τα δύο σκέλη της σχέσης αυτής και πολλαπλασιάζοντας επί x προκύπτει:

i=0ixi=x(1-x)2 (2.24)

Για τον αρμονικό αριθμό Hn ισχύει:

Hn=i=1n1i= 1+12+13++1n=lnn+γ+12n-112n2+1120n4- (2.25)

όπου γ=0.577 είναι η σταθερά του Euler.

Επίσης, για κάθε ακολουθία a1,a2,,an ισχύουν οι σχέσεις (τηλεσκοπικά αθροίσματα):

i=1n(ai-ai-1)=an-a0       i=0n-1(ai-ai+1)=a0-an (2.26)

Και μία τελευταία χρήσιμη ιδιότητα με γινόμενα:

lg(i=1nai)=i=1nlgai (2.27)

Διατάξεις, Συνδυασμοί και Δυωνυμικοί Συντελεστές


Τα n στοιχεία ενός συνόλου μπορούν να παράξουν n! διαφορετικές διατάξεις. Το πλήθος των δυνατών διατάξεων επιλέγοντας k από n είναι:

n×(n-1)××(n-(k-1))=n!(n-k)! (2.28)

Συνδυασμός των k αντικειμένων από n αντικείμενα είναι το πλήθος των τρόπων που μπορούν να επιλεχθούν k διακριτά αντικείμενα από n αντικείμενα και ισούται με:

(nk) (2.29)

Ο ανωτέρω τύπος προϋποθέτει ότι κάθε ένα από τα n αντικείμενα μπορεί να επιλεγεί μία μόνο φορά. Ο τρόπος αυτός λέγεται επιλογή χωρίς αντικατάσταση (selection without replacement). Αντιθέτως, κατά την επιλογή με αντικατάσταση (selection with replacement) επιτρέπεται κάποιο αντικείμενο να επιλεγεί και πάλι χωρίς κάποιον περιορισμό. Για την περίπτωση αυτή, το πλήθος των επιλογών είναι:

(n+k-1n-1) (2.30)

Βασικές ταυτότητες των συνδυασμών (οι οποίες αποδεικνύονται εύκολα) είναι οι εξής:

(nk)=n!k!(n-k)!=(nn-k) (2.31)
(nk)=(n-1k)+(n-1k-1) (2.32)

Επίσης ισχύει:

(x+y)n=k=0n(nk)xkyn-k (2.33)

Αν x=y=1, τότε προκύπτει ότι

2n=k=0n(nk) (2.34)

Συχνά απαιτούνται επάνω και κάτω όρια. Έτσι έχουμε:

(nk)=n(n-1)(n-k+1)k(k-1)1=nkn-1k-1n-k+11(nk)k (2.35)
(nk)=n(n-1)(n-k+1)k(k-1)1nkk!(enk)k (2.36)

Τέλος, ο καταλανικός αριθμός ισούται με:

Cn=1n+1(2nk)=4nπn3(1-98n+145128n2-) (2.37)

Πιθανότητες


Από το μάθημα των Πιθανοτήτων/Στατιστικής είναι γνωστές οι επόμενες έννοιες, αλλά επίσης τις επαναλαμβάνουμε για λόγους πληρότητας. Ας υποθέσουμε ότι μία διακριτή τυχαία μεταβλητή X λαμβάνει αριθμητικές τιμές: X1,X2,X3,. Η πιθανότητα να προκύψει η τιμή Xi συμβολίζεται με P(Xi) ή με xxxxx και ισχύουν οι σχέσεις:

0P(Xi)1       i=1P(Xi)= 1 (2.38)

Η μέση (ή προσδοκητή) τιμή μίας διακριτής τυχαίας μεταβλητής X ισούται με:

μ   =   E ( X )   =   i = 1   X i   P ( X i )   =   i = 1   P ( X X i ) (2.39)

Η απόκλιση μίας τυχαίας μεταβλητής X δίνεται από τον τύπο:

σ2=Var[X]=E[(X-E[X])2]==E[X2]-E2[X] (2.40)
E[X2]=Var[X]-E2[X] (2.41)

Η μέση τιμή του αθροίσματος δύο διακριτών τυχαίων μεταβλητών ισούται με:

E(X+Y)=E(X)+E(Y) (2.42)

Για δύο γεγονότα ανεξάρτητα μεταξύ τους ισχύει:

E(X+Y)=E(X)E(Y) (2.43)

Η πιθανότητα υπό συνθήκη να συμβεί ένα γεγονός A δεδομένου ενός γεγονότος B είναι:

p ( A | B )   =   p ( A B ) p ( B ) (2.44)

με την προϋπόθεση ότι p(B)0. Έτσι, προκύπτει το Θεώρημα του Bayes:

p ( A | B )   =   p ( A )   p ( B | A ) p ( B ) (2.45)

2.2 Συμβολισμοί Πολυπλοκότητας

Κατ’αρχήν παραθέτουμε τους ορισμούς τριών συμβολισμών πολυπλοκότητας (Ο, Ω και Θ), ενώ στη συνέχεια θα παραθέσουμε άλλους δύο συμβολισμούς πολυπλοκότητας (ο και ω).  

Συμβολισμός Ο.
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης O(g(n)) και συμβολίζεται με f(n)=O(g(n)) ή με f(n)O(g(n)), αν υπάρχει μία θετική σταθερά c και μία τιμή n0, έτσι ώστε για κάθε n>n0 να ισχύει η σχέση f(n)<cg(n).  

Σχήμα 2.1: Γραφική αναπαράσταση του O.

Συμβολισμός Ω.
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης Ω(g(n)) και συμβολίζεται με f(n)=Ω(g(n)) ή με f(n)Ω(g(n)), αν υπάρχει μία θετική σταθερά c και μία τιμή n0, έτσι ώστε για κάθε n>n0 να ισχύει η σχέση f(n)>cg(n).  

Σχήμα 2.2: Γραφική αναπαράσταση του Ω.

Συμβολισμός Θ.
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης Θ(g(n)) και συμβολίζεται με f(n)=Θ(g(n)) ή με f(n)Θ(g(n)), αν υπάρχουν δύο θετικές σταθερές c1,c2 και μία τιμή n0, έτσι ώστε κάθε για n>n0 να ισχύει η σχέση c2g(n)<f(n)<c1g(n).  

Σχήμα 2.3: Γραφική αναπαράσταση του Θ.

Ας εξετάσουμε ένα απλό παράδειγμα, για να καταλάβουμε τη χρήση του συμβολισμού Θ. Έστω, λοιπόν, ότι πρέπει να αποδείξουμε τη σχέση:

n22-n2=Θ(n2) (2.46)

Ικανή και αναγκαία συνθήκη για να ισχύει η ανωτέρω σχέση, είναι να ισχύει η επόμενη:

c1n2n22-n2c2n2 (2.47)
c112-12nc2 (2.48)

όπου υπενθυμίζουμε ότι τα c1,c2 πρέπει να είναι θετικοί πραγματικοί αριθμοί, ενώ το n πρέπει να είναι θετικός ακέραιος. Εύκολα βλέπουμε ότι για c2=1/2 και για n1 ισχύει το δεξιό σκέλος. Για το αριστερό σκέλος αρκεί να ισχύει c1=1/4 και n2. Συνεπώς, για c1=1/4,c2=1/2 και n2 ισχύει η ανωτέρω σχέση. Αποδείξεις που αφορούν στους άλλους δύο συμβολισμούς (Ο και Ω) μπορούν να διεκπεραιωθούν με αντίστοιχο τρόπο.

Με απλά λόγια, χρησιμοποιούμε το συμβολισμό Ο και το συμβολισμό Ω για να δηλώσουμε ότι η επίδοση ενός αλγορίθμου είναι ασυμπτωτικά φραγμένη από επάνω και από κάτω αντίστοιχα. Με το συμβολισμό Θ δηλώνουμε ότι η επίδοση ενός αλγορίθμου είναι ασυμπτωτικά φραγμένη από επάνω και από κάτω ταυτόχρονα. Οι συμβολισμοί Ο, Ω και Θ μπορεί να είναι περισσότερο ή λιγότερο περιοριστικοί ή σφικτοί (tight). Για παράδειγμα, είναι ευνόητο ότι ισχύει τόσο 2n2=O(n2) όσο και 2n=O(n2), όπου όμως η δεύτερη έκφραση είναι λιγότερη περιοριστική. Χρειαζόμαστε, λοιπόν, περισσότερο σφικτούς συμβολισμούς.  

Συμβολισμός ο.
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης ο(g(n)) και συμβολίζεται με f(n)=o(g(n)) ή με f(n)o(g(n)), αν για κάθε θετική σταθερά c>0 υπάρχει μία τιμή n0, έτσι ώστε για κάθε n>n0 να ισχύει η σχέση f(n)<cg(n).  

Συμβολισμός ο. (εναλλακτικά)
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης ο(g(n)) και συμβολίζεται με f(n)=o(g(n)), αν ισχύει: limnf(n)g(n)=0.  

Συμβολισμός ω.
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης ω(g(n)) και συμβολίζεται με f(n)=ω(g(n)) ή με f(n)ω(g(n)), αν για κάθε θετική σταθερά c>0 υπάρχει μία τιμή n0, έτσι ώστε για κάθε n>n0 να ισχύει η σχέση f(n)>cg(n).  

Συμβολισμός ω. (εναλλακτικά)
Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης ω(g(n)) και συμβολίζεται με f(n)=ω(g(n)), αν ισχύει: limnf(n)g(n)=.  

Κοινός τόπος σε όλους τους συμβολισμούς, λοιπόν, είναι η λέξη «ασυμπτωτικά». Η έννοια αυτή είναι δάνειο από τα καθαρά μαθηματικά (θεωρία αριθμών) και εμπεδώθηκε στην Πληροφορική από τον Knuth. Για τους συμβολισμούς αυτούς ισχύουν πολλές από τις ιδιότητες των πραγματικών αριθμών.  

Μεταβατική ιδιότητα. (transitivity)
f(n)(g(n)) και g(n)=O(h(n)) f(n)(h(n))
f(n)(g(n)) και g(n)(h(n)) f(n)(h(n))
f(n)(g(n)) και g(n)(h(n)) f(n)(h(n))
f(n)=ο(g(n)) και g(n)=ο(h(n)) f(n)=ο(h(n))
f(n)(g(n)) και g(n)(h(n)) f(n)(h(n))

Ανακλαστική ιδιότητα. (reflexivity)
f(n) = Ο(f(n))
f(n) = Ω(f(n))
f(n) = Θ(f(n))

Συμμετρική ιδιότητα. (symmetry)
f(n) = Θ(g(n)) αν και μόνο αν g(n) = Θ(f(n))

Ανάστροφη Συμμετρική ιδιότητα. (transpose symmetry)
f(n) = Ο(g(n)) αν και μόνο αν g(n) = Ω(f(n))
f(n) = ο(g(n)) αν και μόνο αν g(n) = ω(f(n))

Για μία καλύτερη κατανόηση των πέντε αυτών συμβολισμών, παρουσιάζουμε τον Πίνακα 2.1. Στο αριστερό σκέλος μέσω του αντίστοιχου συμβολισμού δίνεται η σχέση μεταξύ των συναρτήσεων f(n) και g(n), ενώ στο δεξιό σκέλος δίνεται η σχέση μεταξύ των πραγματικών αριθμών a και b. Διδακτική αξία έχει η κατανόηση της αναλογίας μεταξύ των πέντε συμβολισμών με τις πέντε σχέσεις διάταξης. Σημειώνεται, όμως, ότι αν και δύο πραγματικοί αριθμοί είναι πάντοτε συγκρίσιμοι, εντούτοις δεν συμβαίνει το ίδιο πάντοτε για δύο ασυμπτωτικές εκφράσεις. Για παράδειγμα, δεν είναι δυνατόν οι συναρτήσεις f(n)=n και g(n)=n1+cosn να συσχετισθούν με κάποιο συμβολισμό.

f(n)(g(n)) ab
f(n)(g(n)) ab
f(n)(g(n)) a=b
f(n)=ο(g(n)) a<b
f(n)(g(n)) a>b
Πίνακας 2.1: Συσχέτιση ασυμπτωτικών συμβολισμών.

Οι συμβολισμοί ο και θ, που χρησιμοποιούνται λιγότερα συχνά στη βιβλιογραφία, εκφράζουν επίσης την ασυμπτωτική συμπεριφορά αλγορίθμων. Ωστόσο, σε αντίθεση με τους συμβολισμούς Ο, Ω και Θ, οι συμβολισμοί ο και ω χρησιμοποιούνται για να εκφράσουν λιγότερο περιοριστικές καταστάσεις ασυμπτωτικά. Έτσι, ισχύει 2n=o(n2), αλλά 2n2o(n2).

Ας εξετάσουμε ένα ακόμη απλό παράδειγμα σε σχέση με το συμβολισμό ο. Έστω, λοιπόν, ότι για a θετικό ακέραιο πρέπει να αποδείξουμε τη σχέση:

nao(2n) (2.49)

Λαμβάνουμε το όριο το λόγου των δύο συναρτήσεων και εφαρμόζουμε τον κανόνα του L’Hopital διαδοχικά:

limnna2n=limnnaenln2=limnana-1ln2enln2==limna!(ln2)aenln2= 0 (2.50)

Για να γίνουν συγκριτικά αντιληπτοί οι προηγούμενοι συμβολισμοί, ας θεωρήσουμε τη σχέση f(n)=4n3+3. Στην περίπτωση αυτή ισχύει:
f(n)=Θ(n3)
f(n)=O(n3)=O(n4)
f(n)=Ω(n3)=Ω(n2))=Ω(n)=Ω(1)
f(n)=o(n4)=o(n5)
f(n)=ω(n2)=ω(n)=ω(1)

Συνδέοντας με το υλικό του προηγουμένου καφαλαίου, λοιπόν, σκοπός μας είναι αρχικά η εύρεση του χρονικού κόστους ενός αλγορίθμου με τη βοήθεια μίας συνάρτησης f(n), ενώ στη συνέχεια πρέπει να βρούμε κάποια συνάρτηση g(n) με τον αντίστοιχο συμβολισμό. Αυτό που γίνεται συχνότερα στην πράξη, όπου προκύπτουν εκθετικές ή πολυωνυμικές συναρτήσεις, είναι να απομονώσουμε τον όρο με το μεγαλύτερο ειδικό βάρος αγνοώντας τους άλλους όρους καθώς και τους σταθερούς συντελεστές.

2.3 Χρήση Συμβολισμών στην Ανάλυση

Ας θυμηθούμε από τα Κεφάλαια 1.4-1.5 τις εκφράσεις που έχουν προκύψει σχετικά με την επίδοση των αλγορίθμων ταξινόμησης με επιλογή και με εισαγωγή. Πιο συγκεκριμένα, κατά την επακριβή ανάλυση για την ταξινόμηση με επιλογή είχαμε καταλήξει στις εκφράσεις:

T(n) = (c3/2+c4/2)n2+(c1+c2+c3/2-c4/2+c5+c6+c7)n+c1
= an2+bn+c

Επίσης, είχαμε διαπιστώσει ότι η ταξινόμηση με επιλογή έχει την ίδια επίδοση για την καλύτερη, τη μέση και τη χειρότερη περίπτωση ανεξαρτήτως των δεδομένων εισόδου και συνεπώς ο αλγόριθμος αυτός θεωρείται σταθερός (robust). Για το συγκεκριμένο αλγόριθμο και τη συγκεκριμένη ανάλυση εύκολα συμπεραίνεται ότι T(n)=g(O(n2)), αλλά και T(n)=g(Ω(n2)) και τελικά προκύπτει T(n)=g(Θ(n2)). Έτσι, τελικά καταλήγουμε σε μία τυπική έκφραση (δηλαδή το Θ(n2)), για να δηλώσουμε με συμπυκνωμένο τρόπο την πολυπλοκότητα του αλγορίθμου.

Τώρα θα εξετάσουμε με περισσότερη λεπτομέρεια και πάλι την ταξινόμηση με εισαγωγή. Όπως έχουμε αναφέρει προηγουμένως, για μία ολόκληρη κατηγορία αλγορίθμων ταξινόμησης, ως βαρόμετρο επιλέγεται η πράξη της σύγκρισης. Στη συγκεκριμένη περίπτωση, ως βαρόμετρο επιλέγεται η σύγκριση A[i]>key στην εντολή 4 (αγνοώντας τις εσωτερικές συγκρίσεις της εντολής του βρόχου for στην εντολή 1, καθώς και τη σύγκριση i>0 στην εντολή 4). Εύκολα προκύπτει ότι στη χειρότερη περίπτωση, για συγκεκριμένο i, το key είναι μικρότερο από κάθε A[i], όπου το i κυμαίνεται από 1 μέχρι n-1, οπότε το key θα συγκριθεί διαδοχικά με τα A[i-1], A[i-2], ..., A[1] πριν εξέλθουμε από το βρόχο, επειδή ισχύει η συνθήκη i=0. Από αυτή τη βασική σκέψη συνεπάγεται ότι καθώς το j μεταβάλλεται από 2 μέχρι n, στη χειρότερη περίπτωση ο συνολικός αριθμός των συγκρίσεων είναι:

j=2n(j-1)=n(n-1)/2=Θ(n2) (2.51)

Στη συνέχεια θα εξετάσουμε λεπτομερέστερα τη μέση περίπτωση. Ας υποθέσουμε ότι τα στοιχεία του πίνακα είναι διακριτά (δηλαδή διαφορετικά μεταξύ τους) και ότι είναι ισοπίθανο να εμφανισθεί μία οποιαδήποτε διάταξη των n στοιχείων. Άρα, όταν θεωρούμε την τιμή key=A[j] (εντολή 2), που πρέπει να παρεμβληθεί μεταξύ στοιχείων A[1], A[2], ..., A[j-1], δεχόμαστε ότι το key μπορεί με ίδια πιθανότητα να είναι το k-οστό μεγαλύτερο, για 1kj. Αν, λοιπόν, το key είναι το μεγαλύτερο, αυτό θα γίνει αντιληπτό με μία σύγκριση με το στοιχείο A[j-1], αν είναι το δεύτερο μεγαλύτερο, αυτό θα γίνει αντιληπτό με δύο συγκρίσεις, κοκ, αν είναι το (j-1)-οστό μεγαλύτερο, αυτό θα γίνει αντιληπτό με j-1 συγκρίσεις, ενώ τέλος, αν είναι το j-οστό μεγαλύτερο (δηλαδή το μικρότερο), αυτό θα γίνει αντιληπτό και πάλι με j-1 συγκρίσεις. Συνεπώς, η μέση τιμή των συγκρίσεων για μία δεδομένη τιμή του j είναι:

cj = 1j(1+2+3++(j-1)+(j-1))
= 1j(i=1ji-1)=j+12-1j

Θεωρώντας ότι το j μεταβάλλεται από 2 μέχρι n, έχουμε:

j=2ncj=j=2n(j+12-1j)=n2+3n4-Hn=Θ(n2) (2.52)

Στο τελευταίο στάδιο της ανωτέρω σχέσης ισχύει ότι Hn=Θ(lgn) και επομένως αγνοείται ως προς το n2/4. Τελικά, λοιπόν, προκύπτει και τυπικά ότι τόσο στη χειρότερη περίπτωση, όσο και στη μέση περίπτωση η πολυπλοκότητα της ταξινόμησης με εισαγωγή είναι Θ(n2). Ωστόσο, εύκολα διαπιστώνεται ότι στην καλύτερη περίπτωση ισχύει Θ(n).

2.4 Χειρισμός Αθροισμάτων

Επαγωγή


Τη μέθοδο αυτή γνωρίζουμε από το μάθημα των Διακριτών Μαθηματικών, αλλά εδώ απλώς θα αναπτύξουμε ένα παράδειγμα ως μία εναλλακτική απόδειξη σε σχέση με την ανάλυση των παλίνδρομων που αναφέραμε στο Κεφάλαιο 1.6. Με λίγα λόγια, δοθείσης μίας σχέσης προς απόδειξη, κατά την επαγωγή αποδεικνύουμε ότι η σχέση ισχύει για μικρά n, υποθέτουμε ότι ισχύει για τυχόν k και τέλος αποδεικνύουμε ότι ισχύει για k+1.

Για παράδειγμα, θα αποδείξουμε επαγωγικά ότι για άρτια n ισχύει:

i=0n/2-1i2i+1= 1-n/2+12n/2 (2.53)

Εύκολα φαίνεται ότι για n=2, τότε αριστερό και δεξιό μέλος ισούνται με 0. Δεχόμαστε ότι ισχύει η σχέση για τυχόν άρτιο k:

i=0k/2-1i2i+1= 1-k/2+12k/2 (2.54)

και θα αποδείξουμε ότι ισχύει για k+2:

i=0k/2i2i+1= 1-k/2+22k/2+1 (2.55)

Λαμβάνουμε το αριστερό σκέλος και διαδοχικά έχουμε:

i=0k/2i2i+1 = i=0k/2-1i2i+1+k/22k/2+1= 1-k/2+12k/2+k/22k/2+1
= 1-k+22k/2+1+k/22k/2+1= 1-k/2+22k/2+1

Περιορισμός όρων


Δεδομένου ενός αθροίσματος, αντικαθιστούμε κάθε όρο του αθροίσματος με μία μεγαλύτερη ποσότητα που μπορούμε ευκολότερα να χειρισθούμε. Επί παραδείγματι, αν θεωρήσουμε ως γενικό πρότυπο τη σχέση i=1nainamax, τότε για το γνωστό μας άθροισμα μπορεί εναλλακτικά να προκύψει:

i=1nii=1nn=n2=O(n2) (2.56)

Δεδομένου ενός αθροίσματος i=0nai, ας υποθέσουμε ότι ak+1/akr, όπου k0, ενώ ισχύει για τη σταθερά r<1. Έτσι, λοιπόν, ισχύει:

i=0naii=0a0ri=a0i=0ri=ao11-r (2.57)

Θα προσεγγίσουμε το άθροισμα i=1(i/3i) με βάση τη μέθοδο αυτή και λαμβάνουμε το λόγο:

ak+1ak=(i+1)/3i+1i/3i=i+13i23 (2.58)

Δηλαδή, για κάθε k1 ισχύει r=2/3, οπότε:

i=1(i/3i)i=113(23)i=1311-2/3= 1 (2.59)

Διάσπαση αθροισμάτων


Δεδομένου ενός αθροίσματος, το επιμερίζουμε σε μικρότερα που μπορούν να επιλυθούν ευκολότερα. Επί παραδείγματι, για το γνωστό άθροισμα ισχύει:

i=1ni = i=1n/2i+i=n/2+1ni
i=1n/20+i=n/2+1n(n/2)(n/2)2=Ω(n2)

Τώρα θα χρησιμοποιήσουμε την παρούσα τεχνική μαζί με την προηγούμενη τεχνική (περιορισμός όρων) για το άθροισμα i=0i2/2i. Λαμβάνοντας το λόγο δύο διαδοχικών όρων έχουμε:

ak+1ak=(i+1)2/2i+1i2/2i=(i+1)22i289 (2.60)

για κάθε k3. Επομένως, θα επιμερίσουμε αναλόγως το άθροισμα:

i=0i2/2i = i=02i2/2i+i=3i2/2i
= O(1)+98i=3(89)i=O(1)

καθώς το δεύτερο άθροισμα είναι φθίνουσα γεωμετρική πρόοδος.  

Χρήση ολοκληρωμάτων


Ένα άθροισμα με μία αύξουσα συνάρτηση f(k) μπορεί να περιορισθεί από ολοκληρώματα με βάση το γενικό τύπο:

m-1nf(x)dxmnf(k)mn+1f(x)dx (2.61)

θεωρώντας ότι σε μία γραφική παράσταση η καμπύλη της συνάρτησης f(k) προσεγγίζεται από επάνω και κάτω από μεγαλύτερα και μικρότερα ορθογώνια. Αντίστοιχα, μία φθίνουσα συνάρτηση f(k) μπορεί να περιορισθεί με βάση το γενικό τύπο:

mn+1f(x)dxmnf(k)m-1nf(x)dx (2.62)

Για τον αρμονικό αριθμό Hn ισχύει:

i=1n1i1n+1dxx=ln(n+1) (2.63)

και

i=2n1i1ndxx=lnni=1n1ilnn+1 (2.64)

Επομένως, σε περιπτώσεις εύρεσης της πολυπλοκότητας αρκεί η χρήση της σχέσης Hn=Θ(lgn).

2.5 Κατηγοριοποίηση Αλγορίθμων

Αφού λοιπόν ορίσθηκαν και τυπικά οι συμβολισμοί της πολυπλοκότητας, είναι δυνατόν να κατηγοριοποιήσουμε τους διαφόρους αλγορίθμους σε μία από τις επόμενες κατηγορίες:

Ο(1). Κάθε εντολή εκτελείται σε πεπερασμένο πλήθος φορές, οπότε λέγεται ότι ο αλγόριθμος είναι «σταθερής πολυπλοκότητας». Συνήθως αναφέρεται σε πράξεις εύρεσης ενός στοιχείου ή ενημέρωσης ενός συνόλου στοιχείων.

Ο(logn). Ο αλγόριθμος είναι «λογαριθμικής πολυπλοκότητας». Με «log» και με «ln» θα συμβολίζεται ο δυαδικός και ο φυσικός λογάριθμος, αντιστοίχως. Πρακτικά, οι λογάριθμοι που θα χρησιμοποιηθούν είναι κυρίως δυαδικοί. Συνήθως αναφέρεται σε πράξεις εύρεσης ενός στοιχείου ή ενημέρωσης ενός συνόλου στοιχείων.

O(n). Η πολυπλοκότητα λέγεται «γραμμική». Γενικώς, αυτή είναι η επίδοση ενός αλγορίθμου που πρέπει να εξετάσει ή να δώσει στην έξοδο n στοιχεία.

O(nlogn). Διαβάζεται όπως ακριβώς γράφεται (δηλαδή «n log n») χωρίς να χρησιμοποιείται κάποιο επίθετο (π.χ. γραμμολογαριθμική). Στην κατηγορία αυτή ανήκουν πολλοί αλγόριθμοι ταξινόμησης.

O(n2). Αναφέρεται ως «τετραγωνική πολυπλοκότητα». Ο δυναμικός προγραμματισμός για απλά προβλήματα, όπως αντιστοίχηση ακολουθιών.

O(n3). Αναφέρεται ως «κυβική πολυπλοκότητα». Οι αλγόριθμοι αυτοί πρέπει να χρησιμοποιούνται μόνο για προβλήματα μικρού μεγέθους. Χαρακτηριστικό παράδειγμα είναι ο γραμμικός προγραμματισμός.

O(2n). Σπάνια στην πράξη χρησιμοποιούνται αλγόριθμοι «εκθετικής πολυπλοκότητας», ενώ πάρα πολλά γνωστά προβλήματα έχουν αυτή την επίδοση. Ένα από τα πιο γνωστά είναι το πρόβλημα του περιοδεύοντος πωλητή.

Πολυπλοκότητα n=20 n=40 n=60
O(n) 0.00002 sec 0.00004 sec 0.00006 sec
O(n2) 0.0004 sec 0.0016 sec 0.0036 sec
O(n3) 0.008 sec 0.064 sec 0.216 sec
O(2n) 1 sec 12.7 ημέρες 366 αιώνες
O(n!) 771 αιώνες 31032 αιώνες 31066 αιώνες
Πίνακας 2.2: Σύγκριση πολυπλοκότητας αλγορίθμων

Στον Πίνακα 2.2 υπολογίζεται ο χρόνος που απαιτείται από αλγορίθμους διαφόρων πολυωνυμικών και εκθετικών πολυπλοκοτήτων ως συνάρτηση του μεγέθους του προβλήματος. Για να γίνουν οι χρονικές εκτιμήσεις υποτίθεται ότι κάθε στοιχειώδης πράξη απαιτεί ένα msec στη CPU. Έτσι, αν για έναν αλγόριθμο τάξης Ο(n3) διπλασιασθεί το μέγεθος του προβλήματος, τότε απαιτείται οκταπλάσιος (23) χρόνος για να περατωθεί ο αλγόριθμος. Διαπιστώνεται αμέσως ότι οι αλγόριθμοι εκθετικής πολυπλοκότητας δεν είναι πρακτικής χρησιμότητας ακόμη και για μικρό αριθμό δεδομένων.

Επειδή η βελτίωση των αλγορίθμων είναι ζωτικής σημασίας, μία ιδιαίτερη περιοχή της Πληροφορικής, η Υπολογιστική Πολυπλοκότητα (Computational Complexity), διερευνά από θεωρητική και αναλυτική άποψη τους αλγορίθμους και τους ταξινομεί αναλόγως με την επίδοσή τους. Συνεχώς αναπτύσσονται νέοι καλύτεροι αλγόριθμοι, ενώ άλλοι περιθωριοποιούνται ως μη αποτελεσματικοί. Ένας αλγόριθμος λέγεται βέλτιστος (optimal), αν αποδειχθεί ότι δεν μπορεί να κατασκευασθεί καλύτερος.

Αιτιοκρατικοί (deterministic) λέγονται οι αλγόριθμοι των οποίων τα βήματα εκτέλεσης είναι σε κάθε χρονική στιγμή καθορισμένα και μοναδικά. Πιθανοτικοί-στοχαστικοί λέγονται οι αλγόριθμοι των οποίων τα βήματα εκτέλεσης εξαρτώνται από τυχαίες επιλογές που γίνονται κατά την διάρκεια εκτέλεσής του. Η έννοια του ανταιτιοκρατικού (non-deterministic) αλγορίθμου είναι μία θεωρητική έννοια και παραπέμπει σε υπολογιστικές μηχανές που έχουν την δυνατότητα τεράστιου παραλληλισμού. Διαισθητικά, επιτρέπεται η κλωνοποίηση της μηχανής, ώστε αυτή να εκτελεί μία συγκεκριμένη περίπτωση υπολογισμού.

Πολυωνυμικοί (polynomial) λέγονται οι αιτιοκρατικοί αλγόριθμοι με πολυπλοκότητα που φράσσεται άνω από μία πολυωνυμική έκφραση. Για παράδειγμα, πολυωνυμικοί είναι οι αλγόριθμοι τάξης Ο(n), O(n3/2), O(n2) κ.τ.λ. Συνήθως δεν απαιτούν μεγάλη υπολογιστική προσπάθεια σε αντίθεση με τους αλγορίθμους πολυπλοκότητας τάξης O(n!), O(2n) ή O(nn), που ονομάζονται μη πολυωνυμικοί.

Το σύνολο των προβλημάτων που μπορούν να επιλυθούν από αιτιοκρατικούς αλγορίθμους σε πολυωνυμικό χρόνο αποτελεί το σύνολο P, ενώ το σύνολο των προβλημάτων που μπορούν να επιλυθούν από μη αιτιοκρατικούς αλγορίθμους σε χρόνο πολυωνυμικό αποτελεί το σύνολο ΝΡ, που σημαίνει μη αιτιοκρατικά πολυωνυμικά (nondeterministic polynomial) προβλήματα. Ένας εναλλακτικός ορισμός για το σύνολο προβλημάτων NP αφορά όλα τα προβλήματα των οποίων μία υποψήφια λύση μπορεί να ελεγχθεί σε πολυωνυμικό χρόνο. Προφανώς το σύνολο Ρ είναι υποσύνολο του συνόλου ΝΡ, το αντίστροφο όμως φαίνεται ότι δεν ισχύει και αποτελεί ένα από τα σημαντικότερα θεωρητικά προβλήματα των Μαθηματικών και της Πληροφορικής.

Μεταξύ των προβλημάτων του συνόλου ΝΡ διακρίνεται η σημαντική κατηγορία των ΝΡ-πλήρων (ΝΡ-complete). Η επίλυση σε πολυωνυμικό χρόνο ενός προβλήματος που ανήκει σε αυτό το σύνολο συνεπάγεται την επίλυση σε πολυωνυμικό χρόνο όλων των NP-πλήρων προβλημάτων.

Σχήμα 2.4: Φάσμα υπολογιστικής πολυπλοκότητας

Το Σχήμα 2.4 απεικονίζει αυτό που αποκαλούμε «φάσμα της υπολογιστικής πολυπλοκότητας», δηλαδή ένα εξαιρετικά χονδρικό σχεδιάγραμμα των βασικών προβλημάτων μαζί με την πολυπλοκότητα των γρηγορότερων γνωστών αλγορίθμων που τα επιλύουν. Το σχήμα χωρίζεται σε δύο μεγάλες περιοχές προβλημάτων, τα δύσκολα ή δυσχείριστα (intractable) και τα εύκολα ή βατά (tractable). Στην κορυφή της πρώτης περιοχής ανήκουν τα προβλήματα για τα οποία δεν υπάρχουν σχετικοί αλγόριθμοι (undecidable). Πιο κάτω βρίσκονται τα προβλήματα για τα οποία υπάρχουν πρακτικά μη-χρήσιμοι αλγόριθμοι, διότι απαιτούν εκθετικό χρόνο. Μερικά τέτοια προβλήματα ανήκουν στο σύνολο NP αλλά υπάρχουν και άλλα υπερσύνολα του NP που δεν θα μας απασχολήσουν εδώ. Στη δεύτερη περιοχή βρίσκονται προβλήματα για τα οποία υπάρχουν γνωστοί, πρακτικά χρήσιμοι αλγόριθμοι. Είναι τα προβλήματα του είδους που εξετάζουμε σε αυτό το βιβλίο.

Ως προς το ανωτέρω σχήμα δίνονται οι επόμενες δύο επεξηγήσεις: Πρώτον, ο Hilbert ως 10ο πρόβλημα έθεσε το εξής: Δεδομένου ενός πολυωνύμου Ρ με n μεταβλητές και ακεραίους συντελεστές, να βρεθεί ένας αλγόριθμος που να προσδιορίζει αν η εξίσωση Ρ=0 έχει ή όχι ακέραιες λύσεις. Η απάντηση σε αυτό το πρόβλημα είναι αρνητική, όπως έδειξε ο Matiyasevich το 1970. Δεύτερον, η διατύπωση του προβλήματος SAT (satisfiability) έχει ως εξής: Έστω μία λογική έκφραση που αποτελείται από n λογικές μεταβλητές και λογικοί τελεστές and, or, not. Υπάρχει συνδυασμός τιμών (δηλαδή αληθής/ψευδής) των μεταβλητών αυτών, έτσι ώστε η τελική τιμή της έκφρασης να είναι αληθής; Ο συνδυασμός όλων των δυνατών εισόδων που πρέπει να δοκιμασθούν είναι 2n, άρα το πρόβλημα ανήκει στην κλάση ΝΡ. Μάλιστα το πρόβλημα SAT κατέχει κεντρική θέση στη θεωρία της πολυπλοκότητας, διότι τα περισσότερα NP-πλήρη προβλήματα προκύπτουν με πολυωνυμικές αναγωγές από αυτό. Επομένως, το πρόβλημα αυτό είναι και NP-πλήρες.

Η αδυναμία των ερευνητών να προτείνουν έναν πολυωνυμικό αλγόριθμο για πολλά δύσκολα προβλήματα επί του παρόντος δείχνει ότι δεν ισχύει η ισότητα Ρ=ΝΡ, αλλά ισχύει ΡΝΡ. H εικασία περί της ισότητας P=NP αποτελεί ένα από τα διασημότερα ανοικτά προβλήματα της σύγχρονης επιστήμης της Πληροφορικής και δεν αναμένεται να επιλυθεί εύκολα με τη χρήση των σημερινών συμβατικών υπολογιστικών μοντέλων. Η έρευνα ωστόσο παρακάμπτει το σημείο αυτό προχωρώντας στην ανάπτυξη προσεγγιστικών αλγορίθμων για την επίλυση των δύσκολων προβλημάτων, έτσι ώστε να επιτυγχάνεται μία αποδεκτή λύση σε πολυωνυμικό χρόνο. Περισσότερα στοιχεία σχετικά με τη θεωρητική πλευρά της ανάλυσης των αλγορίθμων είναι πέρα από τους σκοπούς αυτού του βιβλίου.

2.6 Εισαγωγή στις αναδρομικές εξισώσεις

Όπως κατά την μελέτη των ταξινομήσεων με εισαγωγή και επιλογή στο Κεφάλαιο 1 προέκυψαν εξισώσεις με την έκφραση T(n) στο αριστερό σκέλος, συχνά κατά την ανάλυση αλγορίθμων προκύπτουν αντίστοιχες εξισώσεις, που όμως είναι αναδρομικές. Αυτό συμβαίνει όταν σχεδιάζεται ένας αλγόριθμος που σπάει το πρόβλημα σε μικρότερα υποπροβλήματα και εν συνεχεία εκτελεί αναδρομικά την ίδια ακολουθία βημάτων για κάθε υποπρόβλημα. Η επίλυση αναδρομικών εξισώσεων είναι ένα απαραίτητο εργαλείο για την εύρεση κλειστών εκφράσεων που περιγράφουν την πολυπλοκότητα πολλών αλλά και βασικών αλγορίθμων.

Ορισμός.
Για μία ακολουθία αριθμών a0,a1,a2,,an, μία εξίσωση που εκφράζει τον όρο an με βάση τους προηγούμενους στην ακολουθία καλείται αναδρομική σχέση. Οι τιμές (ή τιμή) που πρέπει να γνωρίζουμε, ώστε να ξεκινήσει ο υπολογισμός ενός στοιχείου της ακολουθίας με βάση την αναδρομική σχέση καλούνται αρχικές συνθήκες.

Σε προηγούμενη ενότητα του κεφαλαίου αναφέρθηκε η ακολουθία των αριθμών Fibonacci, 1,1,2,3,5,8, 13,21, κοκ, όπου οι δύο πρώτοι αριθμοί της ακολουθίας ισούνται με 1, ενώ κάθε επόμενος ισούται με το άθροισμα των δύο προηγουμένων. Η ακολουθία αυτή περιγράφεται εύκολα από την αναδρομική σχέση an=an-1+an-2, για n2 με a0=1,a1=1. Ωστόσο, είναι δύσκολο να βρεθεί μέσω της απλής παρατήρησης μία γενική έκφραση για το an. Αυτό αποτελεί και το κύριο ενδιαφέρον, διότι αν το πλήθος των βημάτων ενός αλγορίθμου εκφρασθεί μέσω μίας αναδρομικής σχέσης, τότε μπορούμε να εκτιμήσουμε τη χρονική πολυπλοκότητα του προσδιορίζοντας τον γενικό όρο an.

Αναδρομικές Σχέσεις Παράδειγμα
Πρώτης Τάξης
γραμμικές an=nan-1-1
μη-γραμμικές an=11+an-1
Δεύτερης Τάξης
γραμμικές an=an-1+2an-2
μη-γραμμικές an=an-1an-2+2an-2
γραμμικές με μεταβλητούς συντελεστές an=nan-1+(n-1)an-2+1
k Τάξης an=F(an-1,an-2,,an-k)
Πλήρους Ιστορίας an=F(an-1,an-2,,a1)
Διαίρει και Βασίλευε an=an/2+an/2+n
Πίνακας 2.3: Κατηγοριοποίηση αναδρομικών εξισώσεων.

Στον Πίνακα 2.3 παρουσιάζεται η κατηγοριοποίηση των αναδρομικών σχέσεων αναλόγως με το πλήθος των απαραίτητων όρων για την έκφραση του an και με τον τρόπο χρήσης αυτών των όρων. Στη συνέχεια, θα εξετάσουμε τρόπους προσδιορισμού ή φραγής του γενικού όρου an μίας αναδρομικής σχέσης αναλόγως με την κλάση όπου ανήκει. Γενικώς, μία αναδρομική εξίσωση μπορεί να επιλυθεί με τις εξής μεθόδους:

  • με αντικατάσταση,

  • με επανάληψη,

  • με αναγωγή στη χαρακτηριστική εξίσωση,

  • με το γενικό θεώρημα και

  • με γεννήτριες συναρτήσεις.


Κατ’αρχάς, λοιπόν, θα εξετασθούν οι μέθοδοι της αντικατάστασης και της επανάληψης, στη συνέχεια μία σειρά τεχνικών αναγωγής στη χαρακτηριστική εξίσωση και τέλος η μέθοδος με βάση το γενικό θεώρημα. Η μέθοδος των γεννητριών συναρτήσεων θα παρουσιασθεί εκτενέστερα στο Κεφάλαιο 3.

2.7 Η Μέθοδος της Αντικατάστασης

Στη μέθοδο της αντικατάστασης γίνεται μία ασυμπτωτική εκτίμηση της λύσης, η οποία στην συνέχεια επαληθεύεται επαγωγικά.

Δίνεται η σχέση an=2an/2+n και εκτιμάται ότι η λύση είναι an=O(nlogn). Για να είναι σωστή αυτή η εκτίμηση, θα πρέπει να ισχύει ancnlogn για κάποια σταθερά c>0. Θα δείξουμε επαγωγικά ότι η πρόβλεψη αυτή είναι ορθή. Υποθέτουμε ότι για τιμές μικρότερες του n η ανισότητα ισχύει, οπότε:

an = 2an/2+n
2cn2logn2+n
= cnlogn2+n
= cnlogn-cn+n
cnlogn

κάτι που ισχύει για κάθε σταθερά c1.

Ας εξετάσουμε ένα ακόμη παράδειγμα. Έστω η σχέση an=an-1+n για n>0 και a0=0. Υποπτευόμαστε ότι ο γενικός όρος είναι της τάξης Ο(n2), δηλαδή ότι ισχύει ancn2 για κάποια σταθερά c>0 και n>n0 για κάποιο n0. Θα δείξουμε και πάλι επαγωγικά ότι η υποψία μας είναι ορθή. Υποθέτουμε ότι για τιμές μικρότερες του n η ανισότητα ισχύει, οπότε:

an = an-1+n
c(n-1)2+n
= cn2+(1-2c)n+c
cn2

όπου η τελευταία ανισοϊσότητα ισχύει, για παράδειγμα για c=2 και n01.

2.8 Η Μέθοδος της Επανάληψης

Πολλές φορές αυτές οι αναδρομικές εξισώσεις επιλύονται με τη μέθοδο της επανάληψης. Η μέθοδος αυτή, όπως θα φανεί με τα επόμενα δύο παραδείγματα, ίσως είναι η απλούστερη (όταν μπορεί να εφαρμοσθεί), καθώς είναι αρκετά μηχανιστική.  

Για παράδειγμα, δίνεται η αναδρομική εξίσωση:

T(n)= 4T(n/2)+n (2.65)

όπου n>1, ενώ η αρχική συνθήκη είναι T(1)=1. Χωρίς βλάβη της γενικότητας, δεχόμαστε ότι ισχύει n=2k, οπότε k=logn. Αν στην προηγούμενη σχέση αντικαταστήσουμε την ποσότητα T(n/2), επαναλαμβάνοντας την εφαρμογή της αναδρομής με κατάλληλα μειωμένα τα ορίσματα, τότε προκύπτει:

T(n) = 4[4T(n/4)+n/2]+n
= 42T(n/22)+2n+n

Με μία-δύο ακόμη επαναλήψεις αντιλαμβανόμαστε το μηχανισμό παραγωγής των επόμενων σχέσεων με τις διαδοχικές αντικαταστάσεις των αναδρομών με μειωμένα ορίσματα. Άρα, ισχύει ότι:

T(n)= 4kT(n/2k)+(2k-1n++21n+20n) (2.66)

Λόγω της αρχικής συνθήκης ισχύει:

T(n) = 4k+(2k-1n++21n+20n)
= 4k+n(1+2++2k-1)
= 4k+n2k-12-1
= 4logn+n(n-1)
= 2n2-n

Έστω τώρα ένα δεύτερο παράδειγμα. Δίνεται η αναδρομική εξίσωση:

T(n)= 4T(n/2)+n2/logn (2.67)

όπου και πάλι δεχόμαστε ότι n=2k και T(1)=1. Με μία πρώτη επανάληψη προκύπτει ότι:

T(n) = 42T(n/22)+n2/logn+n2/log(n/2)
= 42T(n/22)+n2(1logn+1logn-1)

και με διαδοχικές επαναλήψεις βρίσκουμε ότι:

T(n) = 4kT(n/2k)+n2(1logn+1logn-1++1logn-(k-1))
= 4k+n2(1logn+1logn-1++1)
= n2+n2Hlognn2+n2log(logn)
= Θ(n2log(logn))

2.9 Ομογενείς Γραμμικές Αναδρομές

Η απλούστερη περίπτωση αναδρομικής εξίσωσης είναι της μορφής:

a0tn+a1tn-1+a2tn-2+aktn-k= 0 (2.68)

και λέγεται γραμμική (linear) γιατί δεν περιέχει δυνάμεις και γινόμενα των ti, λέγεται ομογενής (homogeneous) γιατί ο γραμμικός συνδυασμός των ti ισούται με 0, ενώ επίσης έχει σταθερούς συντελεστές ai. Έστω ότι αναζητούμε μία λύση της μορφής:

tn=xn (2.69)

όπου το x είναι μία σταθερά. Αντικαθιστώντας στην αναδρομική εξίσωση έχουμε:

a0xn+a1xn-1+a2xn-2+akxn-k= 0 (2.70)
p(x)=a0xk+a1xk-1+a2xk-2+ak= 0 (2.71)

που αποτελεί τη χαρακτηριστική εξίσωση της αναδρομής. Ας υποθέσουμε ότι η εξίσωση έχει k διακριτές (πραγματικές) ρίζες r1,r2,,rk. Στην περίπτωση αυτή κάθε γραμμικός συνδυασμός:

tn=i=1kcirin (2.72)

είναι λύση της αναδρομής, όπου οι σταθερές ci εξαρτώνται από τις αρχικές συνθήκες.  

Για παράδειγμα, έστω ότι δίνεται η αναδρομική εξίσωση:

tk-5tk-1+6tk-2= 0 (2.73)

με αρχικές συνθήκες t0=3 και t1=7. Η χαρακτηριστική εξίσωση είναι x2-5x+6=0 με ρίζες r1=2 και r2=3. Συνεπώς, καταλήγουμε ότι:

tk=c0 2k+c1 3k (2.74)

Επιλύοντας το σύστημα δύο εξισώσεων με δύο αγνώστους, που προκύπτει από τις αρχικές συνθήκες, έχουμε:

3 = c0+c1
7 = 2c0+3c1

από όπου προκύπτει ότι c0=2,c1=1 και, επομένως, η λύση της αναδρομής είναι tk=2k+1+3k.  

Τώρα ας υποθέσουμε ότι οι λύσεις δεν είναι όλες διακριτές μεταξύ τους αλλά υπάρχει μία πολλαπλή ρίζα r βαθμού d. Επομένως, το πολυώνυμο p(x) μπορεί να γραφεί ως εξής:

p(x)=(x-r)dg(x) (2.75)

όπου το g(x) δεν έχει για ρίζα το r, οπότε δεν διαιρείται με το (x-r). Παραγωγίζουμε και λαμβάνουμε:

p(x)=(x-r)dg(x)+d(x-r)d-1g(x)=(x-r)d-1((x-r)g(x)+dg(x)) (2.76)

όπου παρατηρούμε ότι το p(x) έχει πολλαπλή ρίζα r βαθμού d-1. Το συμπέρασμα αυτό θα το χρησιμοποιήσουμε στη συνέχεια. Τώρα, εφόσον το πολυώνυμο p(x) έχει πολλαπλή ρίζα r βαθμού d, έπεται ότι το r είναι πολλαπλή ρίζα βαθμού d και του πολυωνύμου:

xk-mp(x)=a0xk+a1xk-1++amxk-m (2.77)

Παραγωγίζουμε αυτή την έκφραση, πολλαπλασιάζουμε επί x και λαμβάνουμε:

a0kxk+a1(k-1)xk-1++am(k-m)xk-m (2.78)

Με βάση την ανωτέρω παρατήρηση, έπεται ότι η τελευταία έκφραση έχει πολλαπλή ρίζα r βαθμού d-1. Άρα, ισχύει:

a0krk+a1(k-1)rk-1++am(k-m)rk-m= 0 (2.79)

Αν προσέξουμε καλύτερα αυτήν την αναδρομική εξίσωση, διαπιστώνουμε ότι έχει λύση tk=krk. Περαιτέρω, παραγωγίζοντας και πολλαπλασιάζοντας επί x και πάλι προκύπτει η σχέση:

a0k2xk+a1(k-1)2xk-1++am(k-m)2xk-m (2.80)

με πολλαπλή ρίζα r βαθμού d-2. Επομένως, προκύπτει η αναδρομική εξίσωση:

a0k2rk+a1(k-1)2rk-1++am(k-m)2rk-m= 0 (2.81)

με λύση tk=k2rk. Η διαδικασία αυτή μπορεί να συνεχισθεί για d-1 βήματα συνολικά. Έτσι, καταλήγουμε στο εξής συμπέρασμα: Αν ένα χαρακτηριστικό πολυώνυμο μίας ομογενούς γραμμικής αναδρομικής εξίσωσης έχει πολλαπλή ρίζα r βαθμού d, τότε οι λύσεις της εξίσωσης είναι tk=rk,krk,k2rk,,kd-1rk. Όπως και πριν, η γενική λύση της αναδρομικής εξίσωσης είναι γραμμικός συνδυασμός αυτών των λύσεων και πρέπει να ληφθούν υπ’όψιν οι αρχικές συνθήκες.  

Για παράδειγμα, έστω ότι δίνεται η αναδρομική εξίσωση:

tk-4tk-1+4tk-2= 0 (2.82)

με αρχικές συνθήκες t0=2 και t1=10. Η χαρακτηριστική εξίσωση είναι x2-4x+4=(x-2)2=0 με διπλή ρίζα r=2. Συνεπώς, καταλήγουμε ότι:

tk=c0 2k+c1k2k (2.83)

Επιλύοντας το σύστημα δύο εξισώσεων με δύο αγνώστους, που προκύπτει από τις αρχικές συνθήκες, έχουμε:

2 = c0
10 = 2c0+2c1

από όπου προκύπτει ότι c0=2,c1=3 και, επομένως, η λύση της αναδρομής είναι tk=2k+1+3k2k.

2.10 Μη Ομογενείς Γραμμικές Αναδρομές

Ας θεωρήσουμε τώρα μη ομογενείς γραμμικές αναδρομικές εξισώσεις, δηλαδή εξισώσεις υπό την επόμενη μορφή, όπου ο γραμμικός συνδυασμός δεν ισούται με μηδέν:

a0tn+a1tn-1+a2tn-2+aktn-k=b1np1(n)+b2np2(n)+ (2.84)

ενώ τα b1,b2, είναι σταθερές. Στο σημείο αυτό χωρίς απόδειξη δίνεται ότι ισοδύναμο είναι να θεωρηθεί η ομογενής γραμμική αναδρομική εξίσωση:

(a0xk+a1xk-1+a2xk-2+ak)(x-b1)d1+1(x-b2)d2+1= 0 (2.85)

όπου η πρώτη παρένθεση αποτελεί τη χαρακτηριστική εξίσωση του αριστερού σκέλους της μη ομογενούς αναδρομικής εξίσωσης, ενώ di είναι ο βαθμός του πολυωνύμου pi(n).  

Για παράδειγμα, έστω ότι δίνεται η μη ομογενής αναδρομική εξίσωση:

tk-2tk-1= 2k-1 (2.86)

με αρχική συνθήκη t0=0. Θεωρώντας ότι ισχύει: b1=2,b2=1,p1(n)=1 και p2(n)=-1, η εξίσωση μετασχηματίζεται στην ομογενή:

(x-2)(x-1)(x-2)= 0 (2.87)

Έτσι, φθάνουμε σε μία ομογενή γραμμική αναδρομική εξίσωση με γενική λύση:

tk=c0 1κ+c1 2κ+c2k2k (2.88)

Πρέπει να επιλύσουμε ένα σύστημα τριών εξισώσεων με τρεις αγνώστους. Εύκολα υπολογίζουμε ότι t1=1,t2=5:

0 = c0+c1
1 = c0+2c1+2c2
5 = c0+4c1+8c2

από όπου προκύπτει ότι c0=1,c1=-1,c3=1 και, επομένως, η λύση της αναδρομής είναι tk=(k-1) 2k+1.  

Συνήθως οι μη ομογενείς αναδρομικές εξισώσεις μπορούν να επιλυθούν και με απλή άλγεβρα. Ας θεωρήσουμε και πάλι το προηγούμενο παράδειγμα με την εξίσωση tk-2tk-1= 2k-1. Πρώτον, πολλαπλασιάζουμε και τα δύο σκέλη της εξίσωσης επί δύο, οπότε προκύπτει:

2tk-4tk-1= 2k+1-2 (2.89)

Δεύτερον, αντικαθιστούμε όπου k με k+1, οπότε προκύπτει:

tk+1-2tk= 2k+1-1 (2.90)

Από τις δύο τελευταίες σχέσεις προκύπτει ότι:

tk+1-4tk+tk-1= 1 (2.91)

Ούτε και αυτή η εξίσωση είναι ομογενής αλλά έχουμε κάνει ένα βήμα. Τρίτον, λοιπόν, στην τελευταία αυτή σχέση αντικαθιστούμε το k με k+1, οπότε προκύπτει:

tk+2-4tκ+1+tκ= 1 (2.92)

Εξισώνοντας τα αριστερά σκέλη των δύο τελευταίων εξισώσεων προκύπτει η ομογενής εξίσωση:

tk+2-5tk+1+8tk-4tk-1= 0 (2.93)

που επιλύεται κατά τα γνωστά, καθώς έχει χαρακτηριστική εξίσωση:

x3-5x2+8x-4=(x-1)(x-2)2= 0 (2.94)

2.11 Αλλαγή Μεταβλητής

Είναι δυνατόν κατά την ανάλυση αλγορίθμων να προκύψουν εξισώσεις με την έκφραση T(n) στο αριστερό σκέλος, οι οποίες όμως δεν επιλύονται με τη μέθοδο της επανάληψης. Τότε αντικαθιστούμε το αριστερό σκέλος με την έκφραση tn με κάποια κατάλληλη αλλαγή της μεταβλητής (variable change), ώστε να προκύψει μία ομογενής ή μη ομογενής γραμμική αναδρομική εξίσωση, που να επιλύεται με βάση τη χαρακτηριστική εξίσωση. 

Για παράδειγμα, έστω η απλή αναδρομική εξίσωση που επιλύθηκε με τη μέθοδο της επανάληψης στο Κεφάλαιο 2.8:

T(n)= 4T(n/2)+n (2.95)

όπου το n>1 είναι δύναμη του 2. Έστω ότι ισχύει n=2k, οπότε k=logn. Έτσι, προκύπτει η σχέση:

T(2k)= 4T(2k-1)+2k (2.96)

που την ξαναγράφουμε με τη μορφή:

tk= 4tk-1+2k (2.97)

Για αυτή τη μη ομογενή αναδρομική εξίσωση μπορούμε εύκολα να βρούμε τη χαρακτηριστική εξίσωση:

(x-4)(x-2)= 0 (2.98)

οπότε η γενική λύση είναι της μορφής:

tk=c1 4k+c2 2k (2.99)

Επιστρέφοντας στην αρχική μεταβλητή, καταλήγουμε στην εξίσωση

T(n)=c1n2+c2n (2.100)

που επιλύεται, αν μας δοθούν οι αρχικές συνθήκες. 

Προχωρούμε τώρα σε ένα συνθετότερο παράδειγμα που δεν μπορεί να επιλυθεί με τα μέχρι στιγμής γνωστά. Γενικώς, θα πρέπει να γίνονται μετασχηματισμοί, ώστε να αναγόμαστε στα γνωστά. Μία μέθοδος, λοιπόν, είναι να αλλάζουμε το εύρος της μεταβλητής (range transformation). Για παράδειγμα, έστω ότι δίνεται η αναδρομική εξίσωση:

T(n)=nT2(n/2) (2.101)

όπου το n>1 είναι δύναμη του 2, ενώ δίνεται και η αρχική συνθήκη T(1)=6. Σύμφωνα με την προηγούμενη τεχνική (δηλαδή αλλαγή μεταβλητής θέτοντας n=2k) καταλήγουμε στην ισοδύναμη έκφραση:

tk= 2ktk-12 (2.102)

όπου k>0, ενώ πλέον η αρχική συνθήκη είναι t0=6. Τώρα προχωρούμε σε μία αλλαγή μεταβλητής, όπου όμως ταυτόχρονα αλλάζουμε και το πεδίο ορισμού. Θέτουμε, λοιπόν, Vk=logtk, οπότε προκύπτει:

Vk=k+2Vk-1 (2.103)

με αρχική συνθήκη V0=log6. Η τελευταία αναδρομική εξίσωση έχει χαρακτηριστική εξίσωση:

(x-2)(x-1)2= 0 (2.104)

οπότε σύμφωνα με όσα αναπτύξαμε στην παράγραφο σχετικά με πολλαπλές ρίζες, προκύπτει η γενική λύση:

Vk=c1 2k+c2 1k+c3k1k (2.105)

Από την αναδρομική εξίσωση ως προς Vk βρίσκουμε τις αρχικές συνθήκες:

V0 = 1+log3
V1 = 3+2log3
V2 = 8+4log3

εκ των οποίων προκύπτουν οι εξής τιμές για τις σταθερές επιλύοντας ένα σύστημα τριών εξισώσεων με τρεις αγνώστους:

c1 = 3+log3
c2 = -2
c3 = -1

Επομένως, προκύπτει:

Vk=(3+log3) 2k-k-2 (2.106)

από όπου με δύο αντίστροφους μετασχηματισμούς (δηλαδή tk=2Vk και T(n)=tlogn) σταδιακά προκύπτει ότι:

tk=23×2k  2log3×2k2k  22=82k  32k2k+2 (2.107)

οπότε, τελικώς:

T(n)=23n-2  3nn (2.108)

2.12 Δένδρο Αναδρομής

Αρκετές φορές η οπτικοποίηση μιας σχέσης αναδρομής μέσω ενός δένδρου αναδρομής (recursion tree) βοηθά στη κατανόηση του τι συμβαίνει, όταν η σχέση επαναλαμβάνεται. Αυτό μπορεί να βοηθήσει στην οργάνωση των πράξεων με τέτοιο τρόπο, έτσι ώστε να γίνει εκτίμηση του γενικού όρου.

Σχήμα 2.5: Δένδρο Αναδρομής

Έστω ότι έχουμε την αναδρομική σχέση Τn=3Τn/3+bn,Τ0=Τ1=Τ2=b, που εκφράζει το πλήθος των βημάτων που θα εκτελέσει ένας αλγόριθμος για είσοδο μεγέθους n. Όπως φαίνεται και στο Σχήμα 2.5, για ένα στιγμιότυπο μεγέθους n θα εκτελέσει bn βήματα συν το πλήθος των βημάτων που θα εκτελέσει, για να επιλύσει τα τρία υποπροβλήματα μεγέθους n3. Κάθε τέτοιο υποπρόβλημα χρειάζεται bn3 βήματα συν τα βήματα για την επίλυση των τριών υποπροβλημάτων μεγέθους n9, κοκ. Με αυτό τον τρόπο σχεδιάζεται το δένδρο αναδρομής, το οποίο θα έχει ύψος log3n, αφού σε κάθε επίπεδο τα μεγέθη των προβλημάτων υποτριπλασιάζονται, ενώ για να φθάσουμε σε προβλήματα μεγέθους 1 χρειάζονται log3n επίπεδα. Κάθε κόμβος του δένδρου αυτού αναπαριστά και ένα κόστος βημάτων. Αθροίζοντας όλα τα κόστη σε κάθε επίπεδο παρατηρείται ότι για κάθε επίπεδο το συνολικό κόστος είναι bn. Συνεπώς, καταλήγουμε ότι αφού ο αλγόριθμος χρειάζεται bn βήματα για κάθε επίπεδο, τότε συνολικά για τα log3n επίπεδα θα χρειασθεί χρόνο Ο(nlogn).

2.13 Το Γενικό Θεώρημα

Το γενικό θεώρημα (master theorem) είναι ένας εναλλακτικός τρόπος επίλυσης αναδρομικών εξισώσεων. Αν γίνει κατανοητό στα λεπτά του σημεία, τότε είναι ένας εύκολος τρόπος στη χρήση του. Παραθέτουμε το θεώρημα χωρίς απόδειξη (στηρίζεται στο δένδρο αναδρομής).  

Θεώρημα.  
Έστω μία αναδρομική εξίσωση της μορφής:

T(n)=aT(n/b)+f(n) (2.109)

όπου a,b1, ενώ η f(n) είναι μία ασυμπτωτικά θετική συνάρτηση. Τότε:

T(n)={Θ(nlogba)ανf(n)=O(nlogba-ϵ),ϵ>0Θ(nlogbalogn)ανf(n)=Θ(nlogba)Θ(f(n))ανf(n)=Ω(nlogba+ϵ),ϵ>0,af(nb)cf(n),c<1 (2.110)

Σημειώνεται ότι παρόμοιες αναδρομικές εξισώσεις προκύπτουν κατά την εφαρμογή της αλγοριθμικής μεθόδου Διαίρει και Βασίλευε. Στην περίπτωση αυτή, κατά τη φάση του Διαίρει προκύπτουν υποπίνακες με ακέραιο μέγεθος, δηλαδή υπεισέρχεται η συνάρτηση πάτωμα ή/και η συνάρτηση ταβάνι. Κατά την εφαρμογή του γενικού θεωρήματος αγνοούμε τις συναρτήσεις αυτές καθώς ασυμπτωτικά δεν αλλάζει τίποτε.

Με λίγα λόγια, το γενικό θεώρημα μας προτρέπει να συγκρίνουμε τη συνάρτηση f(n) με την έκφραση nlogba. Αναλόγως με τη σχέση μεταξύ τους (ποιά είναι μικρότερη, μεγαλύτερη ή αν τυχόν είναι ίσες), τότε υιοθετούμε την αντίστοιχη εκδοχή. Προσοχή στο εξής σημείο. Δεν αρκεί απλώς μία εκ των δύο να είναι μικρότερη αλλά να είναι πολυωνυμικά μικρότερη. Λόγου χάριν, το n2 είναι πολυωνυμικά μικρότερο από το n3, όπως και το n από το n. Όμως, το n δεν είναι πολυωνυμικά μικρότερο από το nlogn, ούτε μπορούμε να συγκρίνουμε πολυωνυμικά τις εκφράσεις n και n1+cosn. Επομένως, το θεώρημα δεν εφαρμόζεται πάντοτε. Στη συνέχεια, θα εξετάσουμε αντίστοιχα παραδείγματα.  

Έστω ότι δίνεται η συνάρτηση:

T(n)= 4T(n/2)+n (2.111)

Ισχύει ότι nlogba=nlog24=n2>f(n)=n. Άρα, ϵ=1 και ακολουθούμε το πρώτο σκέλος του θεωρήματος, δηλαδή T(n)=Θ(n2).  

Έστω ότι δίνεται η συνάρτηση:

T(n)= 4T(n/2)+n2 (2.112)

Ισχύει ότι nlogba=nlog24=n2=f(n). Άρα, ακολουθούμε το δεύτερο σκέλος του θεωρήματος, οπότε T(n)=Θ(n2logn).  

Έστω ότι δίνεται η συνάρτηση:

T(n)= 4T(n/2)+n3 (2.113)

Ισχύει ότι nlogba=nlog24=n2<f(n)=n3 για ϵ=1. Άρα ακολουθούμε το τρίτο σκέλος του θεωρήματος. Πρέπει να αποδείξουμε την απαραίτητη συνθήκη του σκέλους αυτού. Έχουμε, λοιπόν, ότι: af(n/b)=4(n/2)3=12n3, το οποίο θα πρέπει να είναι μικρότερο από cn3. Άρα αρκεί να ισχύει c=1/2. Συνεπώς πράγματι μπορούμε να ακολουθήσουμε το τρίτο σκέλος, οπότε προκύπτει ότι T(n)=Θ(n3).  

Ένα τελικό παράδειγμα όπου δεν μπορεί να εφαρμοσθεί το γενικό θεώρημα. Έστω η συνάρτηση:

T(n)= 4T(n/2)+n2/logn (2.114)

Ισχύει ότι nlogba=nlog24=n2?f(n)=n2/logn. Το ερωτηματικό τίθεται στην προηγούμενη σχέση, για να δηλώσει ότι αδυνατούμε να συγκρίνουμε πολυωνυμικά τις δύο εκφράσεις (για παράδειγμα, δεν υπάρχει κάποιο ϵ). Έτσι, στο σημείο αυτό δεν μπορεί να υπάρξει πρόοδος, γιατί δεν είναι δυνατό να γίνει αναγωγή σε κάποια από τις τρεις κατηγορίες. Βέβαια, η αναδρομική αυτή εξίσωση έχει ήδη λυθεί με τη μέθοδο της επανάληψης.

2.14 Βιβλιογραφική Συζήτηση

Στο κεφάλαιο αυτό έγινε μία ταχεία παρουσίαση μερικών μαθηματικών εργαλείων που είναι χρήσιμα κατά την ανάλυση αλγορίθμων. Η παρουσίαση αυτή έγινε χωρίς αυστηρή προσέγγιση αλλά υπό τύπον υπενθύμισης. Το υλικό αυτό μπορεί να βρεθεί σε εισαγωγική μορφή σε βιβλία Διακριτών Μαθηματικών (Discrete Mathematics), όπως το βιβλίο [42] που εξετάζει κατά πλάτος πολλά αντικείμενα. Τα διδακτικά εγχειρίδια με μία εις βάθος προσέγγιση και πλούσιο σχετικό υλικό υπογράφονται (και) από τον Knuth [66, 88]. Ιδιαιτέρως, το βιβλίο [66] διακρίνεται για τη βαθειά του μαθηματική προσέγγιση. Το υλικό του κεφαλαίου αυτού παρουσιάζεται σε παρόμοια μορφή σε πολλά αντίστοιχα εγχειρίδια, όπως των Brassard-Bratley [19] και των Cormen-Leiserson-Rivest-Stein [34]. Συμπληρωματικά στοιχεία μπορούν να βρεθούν σχετικά με δυωνυμικούς συντελεστές στο βιβλίο του Bryant [24] και του Govinda Rao [65]. Απαιτητικό αλλά αξεπέραστο σε θεμελιώσεις ανάλυσης αλγορίθμων είναι το βιβλίο των Sedgewick-Flajolet [161].

Άπειρες είναι οι αναφορές στη βιβλιογραφία σχετικά με τους ασυμπτωτικούς συμβολισμούς. Στο βιβλίο του Knuth [66] αναφέρεται ότι ο συμβολισμός Ο προτάθηκε για πρώτη φορά το 1894 από το μαθηματικό Paul Bachmann [9]. Στο άρθρο [90] αναφέρεται το ιστορικό του καθορισμού του κάθε συμβολισμού, ενώ το άρθρο [156] βοηθά στην περαιτέρω κατανόησή τους. Η βιβλιογραφία σχετικά με την Υπολογιστική Πολυπλοκότητα είναι ιδιαίτερα εκτενής. Σημειώνεται το κλασικό βιβλίο των Garey-Johnson [51], όπου γίνεται μία κατά πλάτος παρουσίαση των προβλημάτων της κλάσης ΝΡ, καθώς και τα βιβλία του Παπαδημητρίου για μία γενική θεώρηση του αντικειμένου [102, 142].

Η Άσκηση 6 βασίζεται στο βιβλίο [169], που αποτελεί μία καλή εισαγωγική προσέγγιση στο αντικείμενο, ενώ οι Ασκήσεις 3-5 και 23-24 στο βιβλίο των Graham-Knuth-Patashnik [66], που αποτελεί μία τεράστια πηγή προβλημάτων. Η Άσκηση 7 έχει τεθεί στη Βαλκανική Ολυμπιάδα Πληροφορικής του 1997, η Άσκηση 18 βασίζεται στο άρθρο [94], ενώ η Άσκηση 28 βασίζεται στο άρθρο [53].

Τεχνικές επίλυσης αναδρομικών εξισώσεων βρίσκονται σε πλείστα διδακτικά βιβλία. Μεταξύ άλλων σημειώνονται τα κλασικά του είδους, όπως των Brassard-Bratley [19] και των Cormen-Leiserson-Rivest-Stein [34]. Συμπληρωματικά στοιχεία και ασκήσεις μπορούν να βρεθούν στα βιβλία του Govinda Rao [65], των Graham-Knuth-Patashnik [66], του Liu [104] και του Shaffer [169]. Λεπτομέρειες σχετικά με το γενικό θεώρημα μπορούν να βρεθούν στο άρθρο [11], καθώς και στα βιβλία [34, 35, 195]. Η Άσκηση 41 είναι μία γενίκευση του δημοφιλούς προβλήματος του Josephus, για το οποίο ιστορικά στοιχεία αναφέρονται στα βιβλία [66, 99], ενώ οι Ασκήσεις 42-43 βασίζονται επίσης στο πρόβλημα αυτό.

2.15 Ασκήσεις

  1. 1.

    Η αρχή των περιστερώνων (Pigeonhole principle). Δεδομένων n περιστερώνων και m>n περιστεριών να αποδειχθεί ότι τουλάχιστον ένας περιστερώνας θα δεχθεί περισσότερο από ένα περιστέρι.

  2. 2.

    Η αρχή του κουτιού του Dirichlet (Dirichlet box principle). Δεδομένων n αντικειμένων και m κουτιών να αποδειχθεί ότι κάποια κουτιά περιέχουν περισσότερο από n/m αντικείμενα και κάποια κουτιά περιέχουν λιγότερο από n/m αντικείμενα.

  3. 3.

    Σε ένα καζίνο υπάρχει ρουλέτα με 1000 αριθμούς. Αν η ρουλέτα φέρει έναν αριθμό n που διαιρείται με την ποσότητα n3, τότε ο παίκτης κερδίζει 5 ευρώ, αλλιώς χάνει 1 ευρώ. Ασυμπτωτικά, ο παίκτης θα κερδίσει ή θα χάσει;

  4. 4.

    Να αποδειχθεί ότι η επόμενη έκφραση ισούται με x ή με x. Πότε εμφανίζεται το κάθε αποτέλεσμα;

    2x+12-2x+14=2x+14 (2.115)
  5. 5.

    Να αποδειχθούν οι σχέσεις για n,m ακεραίους θετικούς:

    • n=nm+n-1m+n-m+1m

    • n=nm+n-1m+n-m+1m

    • nm=n-m+1m

  6. 6.

    Ένας άνδρας αποφασίζει να επισκεφθεί μία φίλη του που μένει 60 χλμ μακριά. Αρχίζει το ταξίδι οδηγώντας με ταχύτητα 60 χλμ/ώρα. Μετά από 1 χλμ πέφτει ο ενθουσιασμός του και αυτομάτως η ταχύτητα μειώνεται στα 59 χλμ/ώρα. Και πάλι, μετά από ένα 1 χλμ η ταχύτητα μειώνεται στα 58 χλμ/ώρα κοκ. Σε πόση ώρα θα φθάσει στο σπίτι της φίλης του;

  7. 7.

    Δεδομένου ενός θετικού ακέραιου αριθμού n, να βρεθούν όλοι οι θετικοί ακέραιοι x (αν υπάρχουν) για τους οποίους ισχύει ότι ο αριθμός x! έχει n δεκαδικά ψηφία ακριβώς. Να υποτεθεί ότι n150.000.

  8. 8.

    Να αποδειχθεί ότι:

    • nn/2n!(n+1)n2n

  9. 9.

    Να αποδειχθεί ότι:

    • i=kn-1(ik)=(nk+1)

    • i=1n(n-i+1k-i+1)=(n+1k)

    • (rm)(mk)=(rk)(r-km-k)

  10. 10.

    Να αποδειχθεί ότι για κάθε n0 και 0kn, η ποσότητα (nk) μεγιστοποιείται, όταν k=n/2 ή k=n/2.

  11. 11.

    Να αποδειχθεί ότι:

    • (Fn)2=Fn-1Fn+1-(-1)n

    • i=0nFi=Fn+2-1

    • i=0n(Fi)2=FnFn+1

    • Fn<(53)n

    • F2n=FnFn+1+Fn-1Fn

    • F2n+1=(Fn+1)2+(Fn)2

    • τα F3n,F3n+1,F3n+2 είναι άρτιος, περιττός και άρτιος αριθμός, αντιστοίχως.

  12. 12.

    Να υπολογισθούν οι ποσότητες:

    • i=n/2n1i

    • i=0lgn 2i

    • i=0i-12i

    • i=1(2i+1)x2i

    • i=1(-1)ii/(4i2-1)

  13. 13.

    Να υπολογισθούν τα αθροίσματα:

    • i=014i

    • i=0i4i

    • i=0i24i

    • i=0in4i

  14. 14.

    Να υπολογισθούν οι ποσότητες:

    • i=1n(2i+1)/(i(i+1))

    • i=0n-1Hi

    • i=0niHi

    • i=0n-1Hi/(i+1)(i+2)

  15. 15.

    Σε κάθε μία από τις επόμενες περιπτώσεις να βρεθούν οι συμβολισμοί Ο και Ω, καθώς επίσης να υπολογισθούν τιμές για τις σταθερές ci και n0.

    • c1n3+c2

    • c3nlogn+c4n

    • c5 2n+c6n5

    • c7n!+c8n3

  16. 16.

    Σε κάθε μία από τις επόμενες περιπτώσεις να σημειωθεί αν ισχύει: f=O(g(n)), f=Ω(g(n)) ή f=Θ(g(n)).

    • f(n)=n      g(n)=log3n

    • f(n)=n1/2      g(n)=5logn

    • f(n)=2n      g(n)=2n+1

    • f(n)=i=1nik    g(n)=nk+1

  17. 17.

    Να διαταχθούν κατά αύξουσα σειρά οι συναρτήσεις: n,n,n1.5,n2,nlogn, 10,nloglogn,nlog2n,n3,nlogn2,1/n,2n,2n/2,n2logn. Ποιές συναρτήσεις είναι της ιδίας τάξης;

  18. 18.

    Δίνεται ο επόμενος ψευδοκώδικας. Να βρεθεί ο συμβολισμός Ω. Μπορεί να βρεθεί ο συμβολισμός Ο;

    while (n>1)
       if (n mod 2 = 1) then
          n <-- 3*n+1;
       else
          n <-- n/2;
    
  19. 19.

    Δίνονται τα επόμενα δύο τμήματα ψευδοκώδικα. Να βρεθεί ο συμβολισμός O.

    for i <-- 0 to n do
       j <--i;
       while j<>0 do j <-- j div 2;
    
    for i <-- 0 to n do
       j <--i;
       while (j mod 2 = 1) do j <-- j div 2;
    
  20. 20.

    Δίνονται τα επόμενα δύο τμήματα κώδικα C. Να βρεθεί ο συμβολισμός Θ.

    sum1=0;
    for (i=1; i<=n; i*=2)
       for (j=1; j<=n; j++)
          sum1++;
    
    sum2=0;
    for (i=1; i<=n; i*=2)
       for (j=1; j<=i; j++)
          sum2++;
    
  21. 21.

    Δίνεται το επόμενο τμήμα κώδικα C, όπου ο πίνακας A[0..n-1] περιέχει μία τυχαία διάταξη των αριθμών από 1 μέχρι n. Να βρεθεί ο συμβολισμός Θ.

    sum3=0;
    for (i=0; i<n; i++)
       for (j=0; A[j]!=i; j++)
          sum3++;
    
  22. 22.

    Να αποδειχθεί ότι (αν) ισχύει:

    • logkn = o(n) για κάθε σταθερά k

    • logn! = Θ(nlogn)

    • 2n = Θ(3n)

  23. 23.

    Να εκφρασθεί με συμβολισμό Ο το γινόμενο (lnn+γ+O(1/n)) επί (n+O(n)).

  24. 24.

    Να αποδειχθεί ότι ισχύουν οι επόμενες σχέσεις για n:

    • 1+2n+O(n-2)=(1+2n)(1+O(n-2))

    • O((n2loglogn)1/2)=O(n2)

    • e(1+O(1/n))2=e+O(1/n)

  25. 25.

    Να αποδειχθεί επαγωγικά ότι:

    • (1+11)(1+12)(1+1n)=n+1   για  n1

    • (1-122)(1-132)(1-1n2)=n+12n   για  n2

    • i=0n(12i+112i+2)=1(2n+2)!   για  n0

  26. 26.

    Να αποδειχθεί επαγωγικά ότι το άθροισμα των γωνιών ενός κυρτού πολυγώνου με n κορυφές είναι (n-2)180o.

  27. 27.

    Να αποδειχθεί επαγωγικά ότι ένας τετραγωνικός πίνακας 2k×2k μπορεί να καλυφθεί πλήρως με πλακάκια που αποτελούνται από 3 τετράγωνα, όπως στο Σχήμα 2.6, εκτός από ένα μόνο τετράγωνο. Το Σχήμα 2.7 παρουσιάζει μια λύση για ένα στιγμιότυπο του προβλήματος όπου k=3.

    Σχήμα 2.6: Το πρόβλημα με τα πλακάκια.

    Σχήμα 2.7: Παράδειγμα λύσης Άσκησης 27 όπου k=3.
  28. 28.

    Να αποδειχθεί επαγωγικά ότι κάθε κλάσμα pq, όπου 0<pq<1 μπορεί να παρασταθεί με τη λεγόμενη Αιγυπτιακή μορφή pq=1n1+1n2+1nm, όπου τα ni (για 1im) είναι θετικοί ακέραιοι που ικανοποιούν τη συνθήκη n1<n2<<nm.

  29. 29.

    Από τις επόμενες γραμμικές αναδρομικές εξισώσεις ποιές είναι ομογενείς και ποιές όχι:

    • tn+2tn-1+tn-2=0

    • tn=tn-12+tn-22

    • tn=tn-1+tn-2

    • tn=5tn-1-6tn-3+tn-5.

  30. 30.

    Να επιλυθούν οι επόμενες αναδρομικές εξισώσεις με τη μέθοδο της αντικατάστασης.

    • tn=bn2+nt(n-1),  ενώ  t1=a

    • tn=bnk+nt(n-1),  ενώ  t1=a

    • tn= 7nn/2+n2,  ενώ  t1=a

    • tn= 7nn/3+n2,  ενώ  t1=t2=a

  31. 31.

    Να επιλυθούν οι επόμενες αναδρομικές εξισώσεις με τη μέθοδο της επανάληψης θεωρώντας, όπου χρειασθεί, ότι το n είναι δύναμη του 2.

    • T(n)=cT(n-1),  όπου  T(0)=1

    • T(n)=nT(n-1),  όπου  T(0)=1

    • T(n)= 1+T(n/2),  όπου  T(1)=1

    • T(n)= 1+2T(n/2),  όπου   T(1)=1

    • T(n)=T(n/2)+n,  όπου  T(1)=1

    • T(n)=clogn+T(n/2),  όπου  T(1)=0

    • T(n)=nlogn+T(n/2),  όπου  T(1)=0.

  32. 32.

    Να επιλυθούν οι εξής ομογενείς γραμμικές αναδρομικές εξισώσεις με τη μέθοδο της χαρακτηριστικής εξίσωσης:

    • tk= 4tk-1+5tk-2,  όπου  k2  και  t0=3,t1=6

    • tk= 3tk-1+4tk-2,  όπου  k2  και  t0=0,t1=1

    • tk=tk-1+tk-2,  όπου  k2  και  t0=0,t1=1

    • tk= 2tk-1-2tk-2,  όπου  k2  και  t0=0,t1=1

    • tk= 5tk-1-8tk-2+4tk-3,  όπου  k3  και  t0=0,t1=1,t2=2.

  33. 33.

    Να επιλυθούν οι εξής μη ομογενείς γραμμικές αναδρομικές εξισώσεις με τη μέθοδο της χαρακτηριστικής εξίσωσης:

    • tk= 2tk-1+3n,  όπου  k1

    • tk= 2tk-1+(n+5) 3n,  όπου  k1

    • tk= 2tk-1+1,  όπου  k1  και  t0=0

    • tk= 2tk-1+k,  όπου  k1

    • tk= 2tk-1+k+2k,  όπου k1  και  t0=0.

  34. 34.

    Να επιλυθούν οι εξής αναδρομικές εξισώσεις με τη μέθοδο της αλλαγής μεταβλητής θεωρώντας, όπου χρειασθεί, ότι το n είναι δύναμη του 2:

    • T(n)= 2T(n)+1,  όπου  n>1

    • T(n)= 2T(n)+logn,  όπου  n>1

    • T(n)= 4T(n/2)+n2,  όπου  n>1

    • T(n)= 2T(n/2)+nlogn  όπου  n>1

    • T(n)= 3T(n/2)+cn,  όπου  n>1  και c σταθερά.

  35. 35.

    Να επιλυθούν οι εξής αναδρομικές εξισώσεις με τη μέθοδο του γενικού θεωρήματος, θεωρώντας, όπου χρειασθεί, την κατάλληλη μορφή του n:

    • T(n)= 2T(n/2)+logn,  όπου n2  και  T(1)=1

    • T(n)= 2T(n)+logn,  όπου n4  και  T(2)=1

    • T(n)= 9T(n/3)+n,  όπου n3  και  T(1)=1

    • T(n)=T(2n/3)+1,  όπου n3  και  T(1)=1

    • T(n)= 3T(n/4)+nlogn,  όπου n4  και  T(1)=1

    • T(n)= 2T(n/2)+nlogn,  όπου n2  και  T(1)=1.

  36. 36.

    Να επιλυθούν οι εξής αναδρομικές εξισώσεις θεωρώντας, όπου χρειασθεί, ότι το n είναι δύναμη του 2:

    • T(n)= 5T(n/2)+(nlogn)2,  όπου n2  και  T(1)=1

    • T(n)=32T(n/2)-12T(n/4)-1n,  όπου n3  και  T(1)=1, T(2)=32

    • tk=tk-1+tk-3-tk-4,  όπου  k4  και  tk=k  για  0k3

    • tk= 1/(4-tk-1),  όπου  k>1  και  t1=1/4.

  37. 37.

    Να επιλυθούν οι εξής αναδρομικές εξισώσεις:

    • tk=tk-1+2tk-2-2tk-3,  όπου  k3  και  tk=9k2-15k+106  για  0k2

    • tk=(1+tk-1)/tk-2,  όπου  t0=a  και  t1=b

    • 2tk=ktk-1+3k!,  όπου  t0=5

    • tk=tk-m+1  για  km  και  tk=k  για  0km

  38. 38.

    Για δύο αλγορίθμους δίνονται οι αντίστοιχες αναδρομικές εξισώσεις: T1(n) =7T1(n/2)+n2 και T2(n)=aT2(n/4)+n2. Για ποιες τιμές του a ο δεύτερος αλγόριθμος είναι ασυμπτωτικά ταχύτερος του πρώτου;

  39. 39.

    Να βρεθεί το πλήθος των τρόπων που μπορούμε να ανεβούμε μία σκάλα με n σκαλοπάτια, αν είναι δυνατόν σε κάθε βήμα να ανεβαίνουμε είτε 1 σκαλοπάτι είτε 2 σκαλοπάτια. Για παράδειγμα, μία σκάλα 3 σκαλοπατιών μπορούμε να την ανεβούμε με 3 τρόπους: 1-1-1, 1-2, 2-1.

  40. 40.

    Σε ένα πίνακα μεγάλου μεγέθους αρχικά τα τετράγωνα είναι κενά. Στην πρώτη κίνηση μαυρίζεται ένα τετράγωνο, όπως φαίνεται στο Σχήμα 2.8. Στη συνέχεια μαυρίζεται το τετράγωνο προς τα επάνω, κάτω, αριστερά και δεξιά. Στην επόμενη κίνηση, για κάθε από τα μαύρα τετράγωνα και πάλι μαυρίζουμε τα τετράγωνα προς τα επάνω, κάτω, αριστερά και δεξιά. Από πόσα μαύρα τετράγωνα αποτελείται το μαύρο σχήμα στη n-οστή κίνηση;

    Σχήμα 2.8: Το πρόβλημα με τα μαύρα τετράγωνα.
  41. 41.

    Μία συμμορία από n ληστές στην Άγρια Δύση περικυκλώνεται από το απόσπασμα του σερίφη. Οι ληστές έχουν μόνο ένα άλογο για να διαφύγουν. Έτσι συμφωνούν στην εξής μέθοδο επιλογής του τυχερού που θα πάρει το άλογο και θα σωθεί. Οι ληστές σχηματίζουν ένα κύκλο, ο αρχηγός αντιστοιχίζεται στον αριθμό 1 και η αρίθμηση συνεχίζει ωρολογιακά. Σε ένα καπέλο τοποθετούν n λαχνούς με αριθμούς από 1 ως το n. Ο αρχηγός τραβά ένα λαχνό με τον αριθμό, έστω, i. Αυτό σημαίνει ότι ο i-οστός ληστής πρέπει να εξαιρεθεί. Η διαδικασία των εξαιρέσεων του i-οστού ληστή συνεχίζεται θεωρώντας για αρχή της καινούργιας αρίθμησης τον επόμενο ληστή αυτού που μόλις εξαιρέθηκε. Αυτός που μένει τελευταίος παίρνει το άλογο, όλα τα κλοπιμαία και φεύγει. Να σχεδιασθεί ένας αλγόριθμος υλοποίησης της μεθόδου. Να βρεθεί μέσω αναδρομικής εξίσωσης αυτός που θα αποφύγει την εξαίρεση, δεδομένων των i και n.

  42. 42.

    Σε ένα κύκλο τοποθετούνται 2n άτομα. Τα πρώτα n άτομα είναι οι «καλοί», ενώ τα επόμενα n είναι οι «κακοί». Δεδομένου του n, να βρεθεί ένα m τέτοιο ώστε, αν εξαιρούμε από τον κύκλο κάθε m-οστό άτομο, στο τέλος θα μείνουν μόνο οι «καλοί».

  43. 43.

    Σε ένα κύκλο τοποθετούνται 10 άτομα και εξαιρείται από τον κύκλο κάθε m-οστό άτομο (όπου το m οποιοσδήποτε ακέραιος). Να αποδειχθεί ότι δεν είναι δυνατόν τα τρία πρώτα άτομα που θα εξαιρεθούν να είναι ο 10ος, ο k-οστός και ο (k+1)-οστός (με τη συγκεκριμένη σειρά), για οποιοδήποτε k.