ΑΛΓΟΡΙΘΜΟΙ http://eclass.aueb.gr/courses/inf161/ Άνοιξη 2017 - I. ΜΗΛΗΣ ΔΥΝΑΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Knapsack problems ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 1
Knapsack problems ΕΙΣΟΔΟΣ: Σακίδιο χωρητικότητας W και ένα σύνολο n αντικειμένων καθένα με βάρος w i και αξία v i (w i, v i και W είναι ακέραιοι) ΕΡΩΤΗΣΗ: Γεμίστε το σακίδιο με αντικείμενα που έχουν την μέγιστη αξία και χωράνε σε αυτό Items Weight w i Value v i Knapsack Capacity W W = 20 2 9 8 10 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 2
Knapsack problems Τρείς (βασικές) παραλλαγές: 1. Κλασματικό (fractional) σακίδιο Τα αντικείμενα μπορούν να διαιρεθούν Μπορούμε να πάρουμε οποιοδήποτε κλάσμα του βάρους τους O(poly) άπληστος αλγόριθμος 2. Ακέραιο (integer) σακίδιο Τα αντικείμενα είναι αδιαίρετα Πολλά αντίγραφα κάθε αντικειμένου Μπορούμε να πάρουμε οποιοδήποτε αριθμό από καθένα O(nW) αλγόριθμος ΔΠ. 0-1 σακίδιο Τα αντικείμενα είναι αδιαίρετα Ένα αντίγραφο κάθε αντικειμένου Το παίρνουμε ή όχι O(nW) αλγόριθμος ΔΠ ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III
Knapsack problems Fractional knapsack max å iîs v i i å x, s.t. w x W, and x Î iîs i i i [0,1] Integer Knapsack max å iîs v x, s.t. å w x W, and i i i i i 0 iîs x Î Ν 0-1 Knapsack max å iîs v i x i å, s.t. w x W, and x Î{0,1} iîs i i i ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III
Fractional Knapsack Άπληστος αλγόριθμος: Πάρε το αντικείμενο με τη μεγαλύτερη αξία ανά μονάδα βάρους (v i /w i ) σε όσο περισσότερη ποσότητα επιτρέπει η χωρητικότητα του σακιδίου Σημείωση: Ο αλγόριθμος παίρνει ολόκληρο το βάρος των αντικειμένων που επιλέγει εκτός από το τελευταίο. Οptimal sub-structure ιδιότητα και Ορθότητα: βλ. Άπληστοι Αλγόριθμοι Πολυπλοκότητα: O(nlogn) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III
Fractional vs. 0-1 Knapsack Example W=0 20 v i /w i 6 W=0 0 20 10 20 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 6
Integer Knapsack Υπο-πρόβλημα: ΟPT[w] =μέγιστη αξία για χωρητικότητα w=0,1,2,...,w Αντικείμενα με βάρος w k >w ΔΕΝ ΕΙΝΑΙ στη βέλτιστη λύση OPT[w] (δεν χωράνε στο w) OPT [ w] = 0, if w < min { wk } Αντικείμενα με βάρος w k w ΜΠΟΡΟΥΝ ΝΑ ΕΙΝΑΙ στη βέλτιστη λύση OPT[w] (χωράνε στο w) ΠΟΙΑ ΑΠΟ ΑΥΤΑ ΕΙΝΑΙ? k Έστω k ένα από τα αντικείμενα στη βέλτιστη λύση OPT[w] τότε OPT[w] = OPT[w-w k ] + v k ΠΟΙΟ ΕΙΝΑΙ το αντικείμενο k? Εξέτασε ΟΛΕΣ ΤΙΣ ΕΠΙΛΟΓΕΣ k: w k w OPT[ w] = max { OPT[ w- w k: w k w k ] + v k } ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 7
Integer Knapsack Αναδρομική σχέση OPT[ w] = ì 0, ï í ïmax { OPT[ w - îk: wk w w k ] + v k if w < min k }, otherwise { w } k Υπολόγισε OPT[0], OPT[1], OPT[2],..., OPT[W] ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 8
Integer Knapsack Int Knapsack (w,v,w) //--------- Τιµή βέλτιστης αξίας OPT[W]--------- for w=1 to W: OPT[w]= 0 for w=1 to W: for k=1 to n: if w ³ w k : if OPT[w] < OPT[w-w k ]+v k : OPT[w] = OPT[w-w k ]+v k best[w]=k return OPT[W] //-------- Βέλτιστη λύση (αντικείµενα) -------- w=w while w>0: return best[w] w = w - w best[w] ΠΟΛΥΠΛΟΚΟΤΗΤΑ: O(nW) ΟΧΙ ΠΟΛΥΩΝΥΜΙΚΗ ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 9
Integer Knapsack - Example k 1 2 w k 7 8 v k 10 11 W=12 if w > w k : if OPT[w] < OPT[w-w k ]+v k : OPT[w] = OPT[w-w k ]+v k best[w]=k Βέλτιστη αξία w 1 2 6 7 8 9 10 11 12 V[w] 0 0 8 10 11 12 1 1 16 best[w] - - 1 2 2 1 1 1 1 1 Βέλτιστη λύση (αντικείμενα): 1, 1, 1, 1, ( φορές το αντικείμενο 1) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 10
Brute-force Υπάρχουν 2 n συνδυασμοί των n αντικειμένων Εξέτασέ τους ΟΛΟΥΣ και βρες αυτόν που χωράει στο σακίδιο και έχει την μεγαλύτερη αξία Για κάθε συνδυασμό χρόνος Ο(n) για να βρούμε το άθροισμα των βαρών και αξιών των αντικειμένων ΠΟΛΥΠΛΟΚΟΤΗΤΑ: O(n2 n ) Μπορούμε να κάνουμε καλύτερα? ΝΑΙ, Δυναμικός Προγραμματισμός ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 11
Υπο-πρόβλημα? 1) Μόνο με την χωρητικότητα (μικρότερη χωρητικότητα - όπως και στο ακέραιο σακίδιο OPT[w] = μέγιστη αξία για χωρητικότητα w=0,1,2,...,w Παράδειγμα: W=10 i w i v i 1 2 2 7 6 OPT(10) =12, αντικείμενα 2, Αλλά π.χ. OPT(6)=10, αντικείμενα 1,2 To αντικείμενο 1 είναι στην ΟPT(6) αλλά όχι στην ΟPT(10)! ΔΕΝ ΙΣΧΥΕΙ η optimal sub-structure ιδιότητα! ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 12
Υπο-πρόβλημα? 2) Mόνο με τα αντικείμενα (λιγότερα αντικείμενα) OPT[k] = μέγιστη αξία για τα αντικείμενα 1,2,...,k (τυχαία σειρά αντικειμένων) Παράδειγμα: W=10 i w i v i 1 2 2 7 6 OPT(2) =10, αντικείμενα 1,2 OPT()=12, αντικείμενα 2, To αντικείμενο 1 είναι στην ΟPT(2) αλλά όχι στην ΟPT()! ΔΕΝ ΙΣΧΥΕΙ η optimal sub-structure ιδιότητα! ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 1
Υπο-πρόβλημα? 1) Μόνο με την χωρητικότητα -- ΛΑΘΟΣ 2) Mόνο με τα αντικείμενα -- ΛΑΘΟΣ ) ΚΑΙ με την χωρητικότητα ΚΑΙ με τα αντικείμενα ΟPT [k,w] = βέλτιστη αξία για αντικείμενα 1,2,...,k ΚΑΙ χωρητικότητα w ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 1
Υπο-πρόβλημα: ΟPT [k,w]=βέλτιστη αξία για αντικείμενα 1,2,,k ΚΑΙ χωρητικότητα w Εξετάζουμε το (νέο) αντικείμενο k: Αντικείμενο k με βάρος w k >w ΔΕΝ ΕΙΝΑΙ στη βέλτιστη λύση OPT[k,w] (δεν χωράει στο w) ΟPT[k,w] = OPT[k-1, w] Αντικείμενο k με βάρος w k w ΜΠΟΡEI NΑ ΕΙΝΑΙ στη βέλτιστη λύση OPT[k,w] (χωράει στο w) ΔΥΟ ΕΠΙΛΟΓΕΣ ΔΕΝ ΤΟ ΠΑΙΡΝΟΥΜΕ : ΟPT[k,w] = OPT[k-1, w] ΤΟ ΠΑΙΡΝΟΥΜΕ : ΟPT[k,w]= V[k-1, w-w k ] +v k OPT[k,w] = max { OPT[k-1, w], OPT[k-1, w-w k ] +v k } ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 1
Αναδρομική σχέση OPT[ k, w] = ì if k = 0 or w = 0 ï 0 ï ï OPT[ k -1, w] if k, w ³ 1and wk > w í ï ïmax{ OPT[ k -1, w], OPT[ k -1, w - wk ] + vk} ï î if k, w ³ 1and wk w ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 16
0-1 Knapsack Value (w,v,w) //--------- Τιµή βέλτιστης αξίας OPT[n,W] --------- for w = 0 to W: OPT[0,w]= 0 for k = 0 to n: OPT[k,0] = 0 for w = 1 to W do if w k w: // item k can be in the solution return OPT[n,W] OPT[k,w]= max { v k + OPT[k-1,w-w k ], OPT[k-1,w]} else: OPT[k,w]= OPT[k-1,w] // w k > w ΠΟΛΥΠΛΟΚΟΤΗΤΑ: O(nW), OΧΙ ΠΟΛΥΩΝΥΜΙΚΗ ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 17
Item Weight w i n = W = Value v i 1 2 2 OPT[k,w] k w 0 1 2 0 0 0 0 0 0 0 1 0 0 2 0 0 7 0 0 7 0 0 7 6 if w k w: OPT[k,w]:= max { v k + OPT[k-1,w-w k ], OPT[k-1,w] else: OPT[k,w]:= OPT[k-1,w] ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 18
0-1 Knapsack (w,b,w) //--------- Τιµή βέλτιστης αξίας OPT[n,W] ---------...... //--------- Βέλτιστη λύση (αντικείµενα) ---------- k=n, w=w, S={} While k 0 and w 0: if OPT[k,w] OPT[k-1,w]: S=S U {k} k=k-1 return S w=w-w k ΠΟΛΥΠΛΟΚΟΤΗΤΑ? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 19
Item Weight w i n = W = Value v i 1 2 2 OPT[k,w] k w 0 1 2 0 0 0 0 0 0 0 1 0 0 2 0 0 7 0 0 7 0 0 7 6 while k 0 and w 0: if OPT [k,w] OPT [k-1,w] : S= S U {k} w=w-w k k=k-1 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 20
n = w k 0 1 2 W = 0 0 0 0 0 0 Item Weight w i Value v i 1 2 0 0 0 0 0 0 0 1 2 0 2 0 7 7 7 6 while k 0 and w 0: if OPT [k,w] OPT [k-1,w] : S= S U {k} w=w-w k k=k-1 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 2017 - Ι. ΜΗΛΗΣ 10 DP III 21