Γενικό πλάνο Μαθηµατικά για Πληροφορική Μάθηµα 7 Θεωρητικό Υπόβαθρο Ηλίας Κουτσουπιάς, Γιάννης Εµίρης Τµήµα Πληροφορικής και Τηλεπικοινωνιών Πανεπιστήµιο Αθηνών Αποτελεσµατική ακριβής αριθµητική 3 Ταχύς Πολλαπλασιασµός πολυωνύµων / 3 / 3 Εισαγωγή Υπολογιστική Αλγεβρα Αλγεβρικά προβλήµατα: πράξεις αριθµών / πολυωνύµων / διανυσµάτων / πινάκων, επίλυση εξισώσεων / συστηµάτων. Εφαρµογές: κρυπτογραφία, γραφικά, υπολογιστική γεωµετρία, εξόρυξη δεδοµένων κλπ Επίλυση µέσω Αλγεβρικών αλγορίθµων ή Αριθµητικών µεθόδων Αλγεβρικοί αλγόριθµοι: χαρακτηρίζονται από απόλυτη ακρίβεια (π.χ. int), αλλά υψηλότερο κόστος. Αριθµητικές µέθοδοι: χρησιµοποιούν προσεγγιστικούς αλγορίθµους (π.χ. floats) και στοχεύουν σε προσεγγιστικές λύσεις. 3 / 3 Η περιοχή των αλγεβρικών αλγορίθµων ονοµάζεται και «άλγεβρα µε υπολογιστή» (computer algebra). «υπολογιστική άλγεβρα» (computational algebra). «συµβολική επεξεργασία» (symbolic computation). ιάφορα παραδείγµατα: πολλαπλασιασµός πολυωνύµων: (x + 3) (x + 86) x 3 + 86x + 3x + 858. διαίρεση πολυωνύµων: x 3 + 86x + 3x + 858/(x + 3) x + 86. ΜΚ πολυωνύµων: x 3 + 86x + 3x + 858, 35x + 37659x 86 x + 86. επίλυση πολυωνύµων (και αργότερα συστηµάτων): x 3 + 86x + 3x + 858 { 86, i 3, i 3}. 4 / 3
Σύγκριση µεθόδων Προβλήµατα / κριτήρια Αλγεβρικοί Αλγόριθµοι Απόλυτη ακρίβεια Εκρηξη ενδιαµέσων τιµών (intermediate swell) Υψηλή πολυπλοκότητα υαδική (Boolean) πολυπλοκότητα Αριθµητικές Μέθοδοι Ακρίβεια αποτελέσµατος (accuracy) περιορίζεται από το αριθµητικό σφάλµα Ακρίβεια των υπολογισµών (precision) Ικανοποιητική ταχύτητα Αριθµητική πολυπλοκότητα: µοναδιαίο (ενιαίο) κόστος πράξεων Σύγκριση Παράδειγµα Υπολογισµός ορίζουσας πίνακα : Αλγεβρικοι αλγόριθµοι: 4 πολλ/σµοί, 3 ΜΚ, ΕΚΠ, πρόσθεση [ ] /3 4/5 det = 4/3 399/50 3 399 50 4 3 4 == 5 375 Αριθµητικές µέθοδοι: πολλ/σµοί, πρόσθεση [ ] 0, 666... 0, 8 det =, 037333, 06936 = 0, 00666..., 333..., 596 Μέγεθος αποτελέσµατος (κατώτερο όριο) Σταθερότητα (stability) αποτελέσµατος, Conditioning = απόσταση από εκφυλισµένη (singular) κατάσταση 5 / 3 Υπολογιστικό µοντέλο 6 / 3 Real RAM Η RAM (Random Access Machine) χρειάζεται σταθερό χρόνο O() για: είσοδος / έξοδος στοιχείου, «τυχαία» πρόσβαση µνήµης, σύγκριση (<, =, >), 4 ϐασικές πράξεις (ίσως και, ln, a b, mod, div). Κάθε στοιχείο καταλαµβάνει χώρο ίσο µε κάποια σταθερά. Random RAM: παραγωγή τυχαίων αριθµών. Κάθε πραγµατικός αναπαριστάται µε απόλυτη ακρίβεια. Πράξεις µεταξύ πραγµατικών γινονται µε απόλυτη ακρίβεια. Ουσιαστικά το µοντέλο που προϋποθέτουν οι αριθµητικές µεθοδοι. Μπορούµε να το οδηγήσουµε σε µη ϱεαλιστική συµπεριφορά: Παράδειγµα ύο προσθέσεις a + b, c + d ακεραίων < n ανάγονται σε µία: (a n+ + b) + (c n+ + d) = (b + d) + n+ (a + c). Οµοίως οι πολλαπλασιασµοί ac, bd ανάγονται σε έναν: (a n+ + b) (c n+ + d) = ac 4n+ + (ad + bc) n+ + bd. 7 / 3 8 / 3
Boolean (δυαδική) RAM Αναπαράσταση αριθµών Κάθε στοιχείο αναπαριστάται δυαδικά, δηλ. το x µε log x δυαδικά ψηφία συν για το πρόσηµο. Π.χ: = 00 µέγεθος() = 5 bits. Ακριβέστερη µελέτη πολυπλοκότητας. εν µπορούµε να ανάγουµε δύο πράξεις σε µία. Πλησιάζει στη µηχανή Turing. Με O A ( ) και O B ( ) ϑα συµβολίζουµε αντίστοιχα την αριθµητική (real RAM) και δυαδική πολυπλοκότητα. Αναπαράσταση ακεραίων (Z) ή ϱητών (Q) : Απόλυτη ακρίβεια µε χρήση πολλαπλών λέξεων µνήµης ή πινάκων (arrays). Π.χ. 0 = [0000000][00000000] Αναπαράσταση πραγµατικών (R): Προσεγγίζονται µε αριθµούς κινητής υποδιαστολής (floating point). Π.χ. ±m c p : εκθέτης p [Pmin, Pmax), δεδοµένο c. mantissa m [0, M ). IEEE double: 64 bits = (πρόσηµο) + 53 (=Μ) + 0 (εκθέτης p). 9 / 3 0 / 3 Αναπαράσταση πολυωνύµων Αναπαράσταση πολυωνύµων Αναπαράσταση πολυωνύµου µίας µεταβλητής ϐαθµού d 0, π.χ. στο Z[x] ή R[x]: Πυκνή, ως πίνακας (array) d + συντελεστών. Αραιή ως συνδεδεµένη λίστα (κατάλογος) των µη µηδενικών όρων. Το πολυώνυµο 5x 4 + 3x 9 αναπαρίσταται ως (πυκνή) [ 5, 0, 3, 0, 9] όπου d = 4 (αραιή) [ 5, 4] [3, ] [ 9, 0]. Αναπαράσταση πολυωνύµων n µεταβλητων Z[x,...,x n ] ύο δυνατές προσεγγίσεις: Επαγωγική: πολυώνυµο ως προς την η µεταβλητή, µε συντελεστές πολυώνυµα στις n µεταβλητές κοκ. Κατανεµηµένη: µε ϐάση µια Ολική ταξινόµηση των όρων δηλ. των n-διάστατων διανυσµάτων των εκθετών, π.χ. λεξικογραφική ταξινόµηση. Εξετάζουµε ως παράδειγµα το πολυώνυµο (x + y) + x + y +. / 3 / 3
Επαγωγική Αναπαράσταση πολυωνύµων Θεωρούµε το πολυώνυµο ως προς µία µεταβλητή: συντελεστές = πολυώνυµα στις υπόλοιπες µεταβλητές. Αποθηκεύουµε λίστα ως προς η µεταβλητή, οι συντελεστές αποθηκεύονται επαγωγικά. Για κάθε στοιχείο (record) αποθηκεύεται ο αριθµητικός συντελεστής, ο εκθέτης ως προς την τρέχουσα µεταβλητή και δείκτης (pointer) στο πολυώνυµο που αντιστοιχεί στον συντελεστή. Συνήθως για αραιά πολυώνυµα. x > y x + x(y + ) + (y + y + ) : δ 3 0 δ 7 δ 3 0 δ 7 0 Κατανεµηµένη Αναπαράσταση πολυωνύµων Λίστα (αραιο) ή πίνακας (πυκνο) όρων διατεταγµένων ως προς τα διανυσµατα των εκθετων. Κάθε στοιχείο (record) περιέχει το διάνυσµα του εκθέτη και τον αριθµητικό συντελεστή. Απαιτείται µια ολική διάταξη στα n-διάστατα διανύσµατα. Συνήθως λεξικογραφική διάταξη (τηλεφωνικός κατάλογος): διατάσσει τις µεταβλητές, π.χ. x > x > > x n, τότε (a, a,... a n ) > (b, b,..., b n ) ανν a k > b k και a i = b i, i < k. Αλλη διάταξη: συνολικος ϐαθµος, και έπειτα λεξικογραφικά. x > y x + xy + x + y + y + : 0 0 0 0 0 0 3 / 3 4 / 3 Βασικές Πράξεις: Πρόσθεση/Αφαίρεση Πολλαπλασιασµός Ακέραιοι µήκους n δυαδικών ψηφίων (δυφίων) στη δυαδική RAM. Η πρόσθεση / αφαίρεση καταλήγουν σε ακέραιο n + δυφίων άρα χρειάζονται n + στοιχειώδεις πράξεις Ω B (n). Ο σχολικός αλγόριθµος έχει πολυπλοκότητα O B (n). υαδική πολυπλοκότητα Πρόσθεσης / Αφαίρεσης = Θ B (n). Πολυώνυµα στο Z[x] ϐαθµού n στη real RAM. Η πρόσθεση / αφαίρεση καταλήγουν σε πολυώνυµο ϐαθµού n άρα χρειάζονται n πράξεις ακεραίων Ω A (n). Σχολικός αλγόριθµος = O A (n). Αριθµητική πολυπλοκότητα Πρόσθεσης / Αφαίρεσης = Θ A (n). Ακέραιοι µήκους n δυφίων. Το γινόµενό τους έχει n δυφία Ω B (n). Ο σχολικός αλγόριθµος δηµιουργεί (πολλαπλασιάζοντας µε 0 ή ) n προσθετέους µήκους n, και τους προσθέτει υαδική πολυπλοκότητα = O B (n ). Τα ϕράγµατα εφαρµόζονται και στον πολλαπλασιασµό πολυωνύµων µίας µεταβλητής ϐαθµού n, δηλ. Ω A (n) και O A (n ). 5 / 3 6 / 3
ιαίρει και Βασίλευε Πολλαπλασιασµός τετραγωνων πινάκων Θέλουµε να πολλαπλασιάσουµε τους a, b µήκους n δυφίων καθένας. Γράφουµε a = a 0 + n/ a, b = b 0 + n/ b, a i, b i Z µήκους n/. ab = a 0 b 0 + n/ (a 0 b + b 0 a ) + n a b, όπου (a 0 b + b 0 a ) = (a 0 + a )(b 0 + b ) a 0 b 0 a b. Εστω M(n), A(n) η πολυπλοκότητα πολλαπλασιασµού και πρόσθεσης ακεραίων µήκους n: M(n) = 3M(n/) + 4A(n/) + A(n) = 3M(n/) + O(n) 3M(n/) + cn 9M(n/4) + cn 3 k M(n/ k ) + kcn = 3 lg n O() + O(n lg n) = O(n lg 3 ). ίνονται δύο n n πίνακες πραγµατικών. Μέγεθος εξόδου = n κάτω ϕράγµα = Ω A (n ) στη real RAM. Σχολικός αλγόριθµος: n 3 πολλαπλασιασµοι. ιαίρει και ϐασίλευε [Strassen 69] O A (n lg 7 ) O A (n.8 ). [Coppersmith-Winograd 90] O A (n.376 ). Το κλείσιµο του χάσµατος µεταξύ κάτω / άνω ϕράγµατος αποτελεί ένα από τα σηµαντικότερα ανοικτά προβλήµατα στην ϑεωρητική πληϱοϕοϱική. 7 / 3 8 / 3 Αλγόριθµος Strassen Πολλαπλασιασµός πολυωνύµων ίνονται πίνακες µε στοιχεία a ij, b ij για i, j =, και έστω ο πίνακας-γινόµενο c ij. Θέτουµε: m = (a a )(b + b ), m = (a + a )(b + b ), m 3 = (a + a )b, m 4 = a (b b ), m 5 = a (b b ), m 7 = (a + a )b, m 8 = (a a )(b + b ) [ ] m + m (c ij ) = m 3 + m 4 m 3 + m 5 m 4 + m 7 m + m 5 m 7 m 8 Για γενική διάσταση, αντικαταθιστούµε τα στοιχεία a ij, b ij, c ij µε υποπίνακες A ij, B ij, C ij διάστασης n/ και εφαρµόζουµε ιαίρει και Βασίλευε: M(n) = 7M(n/) + O(n ) 7 k M(n/ k ) + kcn = O(n lg 7 ), όπου η πρόσθεση πινακων n n έχει πολυπλοκότητα O(n ). Πολλαπλασιασµός µέσω αποτίµησης και παρεµβολής : function Mult(p, q) % p, q Z[x], ϐαθµού n : Καθόρισε σηµεία x 0,..., x n C 3: Αποτίµηση: Υπολόγισε τις τιµές r i p(x i ) q(x i ), i = 0,...,n 4: Παρεµβολή: Υπολόγισε το πολυώνυµο f Z[x] : f(x i ) = r i 5: end function Με τη συνήθη αναπαράσταση πολυωνύµων µέσω συντελεστών µπορούµε γρήγορα να τα προσθέσουµε αλλά «δύσκολα» να τα πολλαπλασιάσουµε. Στην αναπαράσταση πολυωνύµου από τις τιµες του σε συγκεκριµένα σηµεία, ο πολλαπλασιασµός είναι εξίσου αποδοτικός µε την πρόσθεση. 9 / 3 0 / 3
Αποτίµηση πολυωνύµου σε ένα σηµείο Αποτίµηση πολυωνύµου σε k σηµεία Εστω πολυώνυµο µίας µεταβλητής p = c 0 + + c n x n Z[x], και έστω σηµείο a. Για τον υπολογισµό µιας τιµής p(a), αν υπολογίζαµε ξεχωριστά κάθε όρο του πολυωνύµου ϑα χρειαζονταν O A (n lg n) πολλαπλασιασµοι και n προσθέσεις. Αποτίµηση µε τον κανόνα του Horner [Νεύτων]: p(a) = ( (c n a + c n )a + ) + c 0. Η πολυπλοκοτητα είναι ϐέλτιστη: n προσθέσεις, n πολλαπλασιασµοι. Η αποτίµηση του p(x) = c 3 x 3 + + c 0 γίνεται ως εξης. Ο κανόνας του Horner οδηγεί στο O A (kn). Υπάρχει αλγόριθµος ιαίρει και ϐασίλευε στο O A (k lg max{k, n}). Η αποτίµηση του p(x) στα σηµεία x 0, x, x γράφεται ως εξής: p(x) = c x + c x + c 0 x 0 x0 x x x x c 0 c c = p(x 0 ) p(x ) p(x ) p(a) = ((c 3 a + c )a + c )a + c 0. / 3 / 3 Ιδιότητες αποτίµησης Αποτίµηση σε n σηµεία Αλγόριθµος fan-out Λίγες πράξεις µε πολυώνυµα µεγάλου ϐαθµού, πολλές µε µικρού: Λήµµα p Z[x], a C p(a) = p(x) mod (x a). Λήµµα a, b, c 0 (a mod (bc)) mod b = a mod b. Αρα p(x) mod (x x i ) = [p(x) mod (x x j )] mod (x x i ), i J N. j J q 0 p mod n i=0 (x x i) q q 0 mod n/ i=0 (x x i ) = p mod n/ i=0 (x x i ) p mod (m+)n/ k i=mn/ k m [0, k ) q λ p mod (x x 0 )(x x ) r 0 q λ mod (x x 0 ) Στο επίπεδο k, υπολογισε k υπόλοιπα πολυωνύµων ϐαθµού n/ k διαιρεµένα µε πολυώνυµο ϐαθµού n/ k Κόστος k O((n/ k ) lg n). Συνολικά, οι αποτιµήσεις κοστίζουν O(n lg n). 3 / 3 4 / 3
Παρεµβολή Αλγόριθµος Παρεµβολής Lagrange Ορισµός Παρεµβολή (interpolation) πολυωνύµου p Z[x] ϐαθµού n καλείται ο υπολογισµός των n + συντελεστών του p αν δίνονται οι τιµες p(x i ) σε διαφορετικά σηµεία x 0,..., x n. Θεώρηµα Κάθε πολυωνυµο p Z[x], ϐαθµού n, είναι µοναδικά ορισµένο από τις τιµές του σε n + διαφορετικά σηµεία. Απόδειξη. Επίλυση ενός γραµµικού συστήµατος Vandermonde, µε δεδοµένο το διάνυσµα τιµών [p(x 0 ),..., p(x n )]. Ο πίνακας Vandermonde είναι αντιστρέψιµος ανν τα σηµεία είναι διαφορετικά διότι det = i j x i x j. Με δεδοµένα τα σηµεία x 0,..., x n και τις τιµές r 0,..., r n υπολογίζουµε p n i=0 Εστω x i = [0,, ], r i = [, 3, 9], τότε r i j=0,...,n,j i x x j x i x j. x x + 3x x + 9x x δίνει το πολυώνυµο p(x) = x + 3x. 5 / 3 6 / 3 Πολυπλοκότητα Πολλαπλασιασµού Ταχύς Μετασχηµατισµός Fourier (Fast Fourier Transform) Θεώρηµα Υπάρχει αλγόριθµος ιαίρει και ϐασίλευε για την αποτίµηση πολυωνύµου σε k σηµεία µε πολυπλοκότητα O A (k lg max{k, n}). Για το πρόβληµα της παρεµβολής, υπάρχει αλγόριθµος ιαίρει και ϐασίλευε µε πολυπλοκότητα O A (n lg n). Πόρισµα Ο πολλαπλασιασµός πολυωνύµων ϐαθµού n έχει πολυπλοκότητα O A (n lg n) Πρόβληµα ιακριτού Μετασχηµατισµού Fourier Με δεδοµένο πολυώνυµο p(x) = c n x n + c n x n + + c 0 υπολογίζουµε τις τιµές του σε όλες τις n-οστές ϱίζες της µονάδας,ω = e πi/n,ω,...,ω n C. Επίλυση µε τον Ταχύ Μετασχηµατισµό Fourier (FFT). Το πρόβληµα είναι ειδική περίπτωση του υπολογισµού k = n τιµών και ο FFT είναι ένας αλγόριθµος αποτίµησης στα συγκεκριµένα σηµεία. 7 / 3 8 / 3
Ταχύς Μετασχηµατισµός Fourier Ταχύς Μετασχηµατισµός Fourier Εστω T(n) η πολυπλοκότητα του FFT, δηλ. για την αποτίµηση του p(n) στα x = ω j, j = 0,..., n. Γράφουµε p(x) = q(x ) + x s(x ) και ϑέτουµε y = x. Τα q(y), s(y) είναι ϐαθµού (n )/. Οταν x = ω j για j = 0,...,n, το y = x = ω j παίρνει µόνο n/ διαφορετικές τιµές. Αρα απαιτούνται T(n/) πράξεις για την αναγωγή σε µικρότερα προβλήµατα. ω j = ω j+n/ q(y) + ω j s(y) = q(y) ω j+n/ s(y). Αρα απαιτούνται n/ πολλαπλασιασµοι x s(y) και n προσθαφαιρέσεις, συνεπώς: T(n) =, 5n + T(n/), 5kn + k T(n/ k ) = O A (n log n) + O A (n) = O A (n lg n). p(x) = 3x 3 + x x + 5, n = 4, και τα σηµεία είναι {,ω = i,ω =,ω 3 = ω}. Γράφουµε p(x) = (5 + x ) + x( + 3x ) = q(y) + x s(y). Υπολογίζουµε: p() = q() + s(), p(ω) = q(ω ) + ω s(ω ), p(ω ) = q() s(), p(ω 3 ) = q(ω ) ω s(ω ). Με πολλαπλασιασµούς και 4 προσθαφαιρέσεις το πρόβληµα ανάγεται στην αποτίµηση των q(), s() και q( ), s( ). Αυτό απαιτεί πολλαπλασιασµούς (, 3 ) και 4 προσθαφαιρέσεις (5 +, 5, + 3, 3). Εχουµε 4 πολλαπλασιασµους και 8 προσθαφαιρέσεις συν 4 πράξεις για τον επαγωγικό υπολογισµό των q(y), s(y), άρα συνολικά το πλήθος πράξεων πράγµατι ϕράσσεται από, 5n lg n + n = + 4. 9 / 3 30 / 3 Αντίστροφος Μετασχηµατισµος Fourier Πρόβληµα παρεµβολής Υπολογισµός των συντελεστών (ϐαθµός πολυωνύµου = n ) από τις τιµές στις n-οστές ϱίζες της µονάδας. Επίλυση µέσω Αντίστροφου Μετασχηµατισµού Fourier (Inverse FFT, IFFT). Χρησιµοποιούµε αλγορίθµους ιαίρει και Βασίλευε της παρεµβολής µε πολυπλοκοτητα O A (n lg n). Πόρισµα Ο πολλαπλασιασµός πολυωνύµων ϐαθµού n έχει πολυπλοκότητα O A (n lg n). 3 / 3