Professional Documents
Culture Documents
Δυναμικός προγραμματισμός - Μέγιστη Κοινή Υπακολουθία
Δυναμικός προγραμματισμός - Μέγιστη Κοινή Υπακολουθία
Δυναμικός προγραμματισμός - Μέγιστη Κοινή Υπακολουθία
Δυναμικός Προγραμματισμός
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Το πρόβλημα
Θέλουμε να βρούμε μια κοινή υπακολουθία των 𝛸 και 𝑌 με το μέγιστο δυνατό μήκος.
Παράδειγμα
Η μέγιστη κοινή υπακολουθία των συμβολοσειρών «abcdaf» και «acbcf»
είναι η: abcf
αφού έχουμε «abcdaf» και «acbcf»
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Πως θα το λύσουμε:
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Η ιδέα
Κατασκευάζουμε πίνακα βάζοντας την μία λέξη οριζόντια και την άλλη κάθετα και σε
κάθε κελί βλέπουμε αν βελτιώνεται η κατάσταση.
Σε κάθε κελί σημειώνουμε το μήκος της μέγιστης κοινής υπακολουθίας που μπορούμε
να πετύχουμε μέχρι το τρέχον σημείο
0 1 2 3 4 5 6
ε a b c d a f
0 ε
1 a
2 c
3 b
4 c
5 f
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Αρχικοποίηση
Όλα τα κελιά της πρώτης γραμμής θα είναι ίσα με το 0 όπως και τα κελιά της πρώτης
στήλης
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Αν είμαι στη 𝒊 γραμμή και την 𝒋 στήλη, αποθηκεύω στο κελί 𝜜[𝒊, 𝒋] το μήκος της μέγιστης
κοινής υπακολουθίας που προκύπτει αν κοιτάξω μέχρι το 𝒊 −οστό σύμβολο της μίας
λέξης και μέχρι το 𝒋 −οστό σύμβολο της άλλης λέξης
Το μήκος της μέγιστης
κοινής υπακολουθίας
Το μήκος της μέγιστης αν έχω την «abcda» και
0 1 2 3 4 5 6
κοινής υπακολουθίας την «a»
αν έχω την «a» και την ε a b c d a f
«a»
0 ε 0 0 0 0 0 0 0
1 a 0 1 1 1 1 1 1
2 c 0
3 b 0
4 c 0
5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Κοιτώντας την ab και την ac το μήκος της μέγιστης κοινής υπακολουθίας είναι 1
Τώρα που κοιτάμε τις abc και ac το μήκος της μέγιστης κοινής υπακολουθίας είναι 2
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Αν 𝒙𝒋 = 𝒚𝒊 τότε
𝒙𝒋−𝟏 𝒙𝒋 έχουμε άλλο ένα
κοινό σύμβολο, το
οποίο δεν το είχαμε
πριν.
𝒚𝒊−𝟏 A[i−1,j−1]
𝒚𝜾
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
0 1 2 3 4 5 6
ε a b c d a f
0 ε 0 0 0 0 0 0 0
1 a 0 1 1 1 1 1 1
2 c 0 1 1 2 2 2 2
3 b 0
4 c 0
5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
0 1 2 3 4 5 6
ε a b c d a f
0 ε 0 0 0 0 0 0 0
Το μήκος της μέγιστης
κοινής υπακολουθίας 1 a 0 1 1 1 1 1 1
αν έχω την «a» και την
«acb» είναι 1 2 c 0 1 1 2 2 2 2
3 b 0 1
4 c 0
5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Εδώ έχουμε μια περίπτωση που η κατάσταση βελτιώνεται διότι έχουμε ένα ακόμη κοινό
σύμβολο: το b
Άρα προσθέτουμε 1 στο αριστερά διαγώνιο κελί 𝑋 3,2 = 𝑋 2,1 + 1 = 1 + 1 = 𝟐
0 1 2 3 4 5 6
ε a b c d a f
0 ε 0 0 0 0 0 0 0
Το μήκος της μέγιστης
κοινής υπακολουθίας 1 a 0 1 1 1 1 1 1
αν έχω την «ab» και την
«acb» είναι 2 2 c 0 1 1 2 2 2 2
3 b 0 1 2
4 c 0
5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
0 1 2 3 4 5 6
ε a b c d a f
0 ε 0 0 0 0 0 0 0
1 a 0 1 1 1 1 1 1
2 c 0 1 1 2 2 2 2
3 b 0 1 2 2 2 2 2
4 c 0 1
5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Όταν το 𝒊-οστό στοιχείο της μίας λέξης είναι διαφορετικό από το 𝒋-οστό στοιχείο της
άλλης, τότε κρατάμε το καλύτερο μήκος που έχουμε πετύχει έως τώρα.
Που βρίσκεται όμως αυτό το μήκος;
0 1 2 3 4 5 6
Το μήκος της μέγιστης
κοινής υπακολουθίας ε a b c d a f
αν έχω την «ab» και την
«acbc» είναι 2. 0 ε 0 0 0 0 0 0 0
1 a 0 1 1 1 1 1 1
Από που θα πάρει η
2 c 0 1 1 2 2 2 2 αναδρομική μας αυτό
το 2;
3 b 0 1 2 2 2 2 2
4 c 0 1 2
5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
0 1 2 3 4 5 6 0 1 2 3 4 5 6
ε a b c d a f ε a b c d a f
0 ε 0 0 0 0 0 0 0 0 ε 0 0 0 0 0 0 0
1 a 0 1 1 1 1 1 1 1 a 0 1 1 1 1 1 1
2 c 0 1 1 2 2 2 2 2 c 0 1 1 2 2 2 2
3 b 0 1 2 2 2 2 2 3 b 0 1 2 2 2 2 2
4 c 0 1 4 c 0 1
5 f 0 5 f 0
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Όταν 𝒙𝒊 ≠ 𝒚𝒋
𝒙𝒋−𝟏 𝒙𝒋
𝒚𝒊−𝟏 A[i−1,j]
𝒚𝜾 A[i,j−1]
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
Δυναμικός Προγραμματισμός Μέγιστη κοινή υπακολουθία Άννα Κορφιάτη
Η αναδρομική σχέση
Αρχικοποίηση 𝚨 0, j = 0 και 𝚨 𝑖, 0 = 0
Αν 𝒙𝒋 = 𝒚𝒊 έχουμε
Όταν η κατάσταση βελτιώνεται 𝜜[𝒊, 𝒋] = 𝑨[𝒊 − 𝟏, 𝒋 − 𝟏] + 𝟏
Αν 𝒙𝒋 ≠ 𝒚𝒊 έχουμε
Όταν η κατάσταση δεν βελτιώνεται
𝜜 𝒊, 𝒋 = 𝒎𝒂𝒙{𝑨 𝒊, 𝒋 − 𝟏 , 𝑨 𝒊 − 𝟏, 𝒋 }
https://www.facebook.com/math.tutor.ak 69 74 12 97 30 korfiati.an@gmail.com
https://www.facebook.com/math.tutor.ak
korfiati.an@gmail.com
69 74 12 97 30