Algoritmer og Datastrukturer 2 Gerth Stlting Brodal Algoritmer
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal
Algoritmer og Datastrukturer 2 Algoritme Design Teknikker (2 uger) Graf-algoritmer (3 uger) Streng-algoritmer (1 uge) Del-og-kombiner Korteste veje Mønstergenkendelse Dynamisk programmering Suffix-træer Maksimale strømninger Suffix arrays Grådige algoritmer
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Del-og-kombiner [CLRS, kapitel 2. 3, 4. 2 -4. 5, problem 30. 1. c]
Del-og-Kombiner Algoritme design teknik Virker for mange problemer (men langt fra alle) • Opdel et problem P i mindre problemer P 1, . . , Pk, der kan løses uafhængigt (små problemer løses direkte) • Løs delproblemerne P 1, . . , Pk rekursivt • Kombiner løsningerne for P 1, . . , Pk til en løsning for P P P 1 P 4 P 2 P 5 P 3
Eksempel: Merge-Sort 1 2 Løs rekursivt 3 Kombiner A sorteret 1 p To mindre delproblemer sorteret q q+1 r n
1 A p k q r n sorteret } } n 2 n 1 kopi R L sorteret 1 i sorteret 1 j } n 2+1 n 1+1 flet
Merge-Sort : Analyse Rekursionstræet Observation Samlet arbejde per lag er O(n) Arbejde O(n · # lag) = O(n · log 2 n)
Del-og-kombiner, d. ADS 1 eksempler: • Merge. Sort – Del op i to lige store dele – Rekursiv sortering – Kombiner = fletning • Quick. Sort – Opdel efter tilfældigt pivot (tilfældig opdeling) – Rekursiv sortering – Kombiner = ingen (konkatener venstre og højre) • Quick. Select – Opdel efter tilfældigt pivot (tilfældig opdeling) – Rekursiv select – Kombiner = ingen
Analyse af Del-og-Kombiner = analyse af en rekursiv procedure Essentielt to forskellige måder: 1. Argumenter direkte om rekursionstræet (analyser dybde, #knuder på hvert niveau, arbejde i knuderne/niveauerne/træet) 2. Løs en matematisk rekursionsligning, f. eks. T(n) ≤ a T(n) ≤ 2·T(n/2) + a·n hvis n ≤ c ellers Bevises f. eks. vha. induktion.
Løsning af rekursionsligninger • Fold rekursionsligningen ud og argumenter om rekursionstræet • Gæt en løsning og vis den ved induktion efter voksende n T(n) ≤ a T(n) ≤ 2·T(n/2) + a·n hvis n ≤ c ellers
Rekursionsligninger: Faldgrubber • Ulige opdelinger glemmes (n ulige, så er ┌ ┐ de rekursive kald typisk └n/2┘ og n/2 ) [CLRS, kapitel 4. 6. 2] • Analyserer typiske kun for n = 2 k • Brug aldrig O-udtryk i rekursionsformlen – brug konstanter (T(n)=O(n)+O(T(n/3))) T(n)≤ c·n+a·T(n/3)
Master Theorem (Simplificering af [CLRS, Theorem 4. 1]) tiden bruges i roden af rekursionen lige meget tid på hvert niveau i rekursionen tiden bruges i bladene af rekursionen
Dybde # delproblemer Størrelse af delproblemer Tid per delproblem Tid per lag (bunden af rekursionen) i = 0. . logb (n/d) - 1 logb (n/d) ai alogb (n/d) n/bi d c·(n/bi)p c ai·c·(n/bi)p c·alogb (n/d) (lag i = 0. . logb (n/d) - 1)
Multiplikation af lange heltal [CLRS, problem 30. 1. c] Karatsuba 1960 • I og J hver heltal med n bits • Naive implementation kræver O(n 2) bit operationer • Lad I = Ih· 2 n/2+Il og J = Jh· 2 n/2+Jl • I·J = Ih ·Jh· 2 n +((Ih-Il)·(Jl-Jh)+Il ·Jl +Ih ·Jh)· 2 n/2 +Il ·Jl T(n) ≤ 3·T(n/2) + c·n for n ≥ 2 T(n) ≤ c for n = 1 • T(n) = O(nlog 2 3) = O(n 1. 58)
Multiplikation af lange heltal Del-og-kombiner Karatsuba 1960 O(nlog 3) 2 Schönhage-Strassen, 1971 O(n ∙ loglog n) Fürer, 2007 O(n ∙ log n ∙ 2 O(log* n) )
Matrix Multiplication cij = Σk=1. . m aik·bkj
Matrix Multiplication Naive implementation: tid O(npm)
(Kvadratisk) Matrix Multiplikation [CLRS, kapitel 4. 2] • A, B, . . . , K, L er n/2 x n/2 -matricer + + • I, J, K, L kan beregnes med 8 rekursive multiplikation og 4 matrix additioner på n/2 x n/2 -matricer • T(n) ≤ 8·T(n/2) + c·n 2 T(n) ≤ c • T(n) = O(nlog 2 8) = O(n 3) for n ≥ 2 for n = 1
Strassen’s Matrix Multiplikation 1969 + + – – + + – + – + 7 rekursive multiplikationer +
Strassen’s Matrix Multiplikation (af to n x n matricer) • Bruger 18 matrix additioner (tid O(n 2)) og 7 rekursive matrix multiplikationer T(n) ≤ 7·T(n/2) + c·n 2 for n ≥ 2 T(n) ≤ c for n = 1 • T(n) = O(nlog 2 7) = O(n 2. 81) Bedste resultat for matix multiplikation O(n 2. 3727): Virginia Vassilevska Williams, Multiplying matrices faster than Coppersmith-Winograd, STOC 2012
Konveks Hylster T(n) ≤ 2·T(n/2) + c·n T(n) ≤ c for n ≥ 2 for n = 1 T(n) = O(n·log n)
Silhuet (afleveringsopgave) T(n) ≤ ? · T(n/? ) + ? T(n) ≤ c for n ≥ 2 for n = 1
- Slides: 22