6.006IntroductiontoAlgorithms
Lecture21:DynamicProgrammingIVProf.ErikDemaine
Today• Pianofingering• Platformvideogames• Structuraldynamicprogramming• Vertexcover• Widgetlayout
Recall:WhatisDynamicProgramming?
• “Controlled”bruteforce/exhaustivesearch• Keyideas:
– Subproblems:likeoriginalproblem,butsmaller• Writesolutiontoonesubproblem intermsofsolutionstosmallersubproblems
– Memoization:rememberthesolutiontosubproblems we’vealreadysolved,andre‐use• Avoidexponentials
– Guessing: ifyoudon’tknowsomething,guessit!(tryallpossibilities)
Recall:HowtoDynamicProgram
Fiveeasysteps!1. Definesubproblems2. Guess something(partofsolution)3. Relatesubproblem solutions(recurrence)4. Recurse andmemoize (topdown)
or BuildDPtablebottomup5. Solve originalproblemviasubproblems
(usuallyeasy)
Recall: HowtoAnalyzeDynamicPrograms
Fiveeasysteps!1. Definesubproblems count#subproblems2. Guesssomething count#choices3. Relatesubproblem solutions
analyzetimepersubproblem4. DPrunningtime =#subproblems
timepersubproblem5. Sometimesadditionalrunningtime
tosolveoriginalproblem
TwoKindsofGuessing1. Withinasubproblem
– CrazyEights:previouscardintrick– Sequencealignment:align/droponecharacter– Bellman‐Ford:previousedgeinpath– Floyd‐Warshall:usevertex ?– Parenthesization:lastmultiplication– Knapsack:includeitem ?– Tetristraining:howtoplacepiece
2. Usingadditionalsubproblems– Knapsack:howmuchspaceleftinknapsack– Tetristraining:currentboardconfiguration
PianoFingering
photobyBrianRichardson(seriousbri),2009http://www.flickr.com/photos/seriousbri/4148739768/
PianoFingering
imagesfromhttp://www.piano‐lessons‐central.com/music‐notation/how‐to‐read‐music/
PianoFingering[Parncutt,Sloboda,Clarke,Raekallio,Desain 1997;
Hart,Bosch,Tsai2000;AlKasimi,Nichols,Raphael2007]
• Givenmusicalpiecetoplay– Say,sequenceofsinglenoteswithrighthand– (Canextendtobothhands,multiplenotes,etc.)
• Givenmetric ofdifficulty goingfromfinger onnote tofinger onnote– Crossing:Highif and– Stretch:Highif– Legato: if– Weakfinger:Highif– :Highif– …
References:http://www.jstor.org/pss/40285730
http://www.jstor.org/pss/10.1525/mp.2001.18.4.505
http://www.cse.unsw.edu.au/~cs9024/05s2/ass/ass01/fingering.pdf
http://ismir2007.ismir.net/posters/ISMIR2007_p355_kasimi_poster.pdf
PianoFingeringDP1. Subproblems: for :
minimumdifficultypossiblefornote2. Guess: finger fornote3. Recurrence:
• Howtoknowfingeringfornextnote ?• Guess!
PianoFingeringDP1. Subproblems: for &finger :
minimumdifficultypossiblefornotestartingonfinger
2. Guess: finger fornote3. Recurrence:
4. DPtime =#subproblems time/subproblem
5. Originalproblem=
http://media.ign.com/games/image/article/833/833615/ign‐presents‐the‐history‐of‐super‐mario‐bros‐20071108044755327.gifhttp://images.inquisitr.com/wp‐content/2011/03/super‐mario‐bros‐modern‐sound.jpg
PlatformVideoGames• Givenentirelevel:objects,enemies,etc.• Anythingoutside screenisreset• Configuration =screenstate,score,velocity,…• Giventransitionfunctionforeachtimestep
– Movement,enemies,…• Goal: Maximizescoresubjecttosurvivingandreachinggoal
PlatformVideoGameDP1. Subproblems: forconfiguration :
bestpossiblescorestartingfrom2. Guess: whichactiontotake(ifany)3. Recurrence:
4. DPtime =#subproblems time/subproblem
5. Originalproblem
CyclesinSubproblems•mightleadtocycles
• Inthisproblem,neverhelpstocycle– capturesentirestate,includingscore
• Somarksubproblematstart,andifcycle,ignorethatsubproblem
• OR: SMBtimerin ,soactuallynocycles
memo={}def mario :if notinmemo:
memomemo
returnmemo
StructuralDynamicProgramming
• Followacombinatorialstructureotherthanasequence/afewsequences– Likestructuralvs.regularinduction
• Mainexample: Treestructure• Usefulsubproblems:foreveryvertex ,subtreerootedat
VertexCover• Givenanundirectedgraph• Findaminimum‐cardinalityset ofverticescontainingatleastoneendpointofeveryedge– Equivalently,findaminimumsetofguardsforabuildingofcorridors,or(unaligned)streetsincity
Example:
VertexCoverAlgorithms• Extremelyunlikelytohaveapolynomial‐timealgorithm,evenforplanargraphs(seeLecture25)
• Butpolynomially solvableontrees,usingdynamicprogramming
VertexCoverinTreeDP1. Subproblems: for :sizeofsmallest
vertexcoverinsubtree rootedat2. Guess: is inthecover?
– YES:• Coverchildrenedges• Leftwithchildrensubtrees
– NO:• Allchildrenmustbeincover• Leftwithgrandchildren
subtrees
VertexCoverinTreeDP1. Subproblems: for :sizeofsmallest
vertexcoverinsubtree rootedat2. Guess: is inthecover?3. Recurrence:
4. DPtime =#subproblems time/subproblem
5. Originalproblem=
ImprovedVertexCoverinTreeDP
1. Subproblems: for & :sizeofsmallestvertexcover insubtree rootedatsuchthat (unconstrainedif )
2. Guess: Does ?3. Recurrence:
4. DPtime =#subproblems time/subproblem
5. Originalproblem
WidgetLayout• Givenahierarchyofwidgets• Leafwidget=button,image,…
– Listofpossiblerectangularsizes• Internalwidget=rectangularcontainer– Canjoinchildrenhorizontallyorvertically
• Goal: Fitintoagivenrectangularscreen
http://lin‐kuei.blogspot.com/2010/12/android‐app‐menu‐widgets‐and‐site‐map.html
WidgetLayoutDP1. Subproblems: for & :
minimum suchthatwidget fitsinto2. Guess: Leaf : Whichsizetouse?
Internal : Horizontalorvertical?3. Recurrence:
HorizontalLayoutDP1. Subproblems: for , ,
:minimum suchthathorizontallayoutof
fitsinto rectangle2. Guess: Width ofchild3. Recurrence:
4. DPtime =#subproblems time/subproblem
WidgetLayoutDP1. Subproblems: for & :
minimum suchthatwidget fitsinto2. Guess: Leaf : Whichsizetouse?
Internal : Horizontalorvertical?3. Recurrence:
4. DPtime =#subproblems time/subproblem
5. Originalproblem
WidgetLayoutSummary• Two“levels”ofdynamicprogramming
1. Optimalheightforgivenwidthofsubtree rootedat
2. Optimallayout(partitioning)ofchildrenintohorizontalarrangement
• Reallyjustonebiggerdynamicprogram• Pseudopolynomial runningtime: