Övning 4 www.nada.kth.se/~mhj/tilda
Problemträd Sortering Bredden först Djupet först Sortering
Problemträd
Problem: Problemträd: 4 - 4 * 4 + 4 - 4 + 4 * 4 - 4 + 4 * 4 - 4 + 4 * Erhåll talet (100) på kortast sätt med hjälp av talet fyra (4) och de tre räknesätten addition (+), subtraktion (-) och multiplikation (*). Exempel: 4 * 4 + 4 + 4 * 4 + 4 = 100 Problemträd: 4 4 - 4 * 4 + 8 16 4 - 4 + 4 * 4 - 4 + 4 * 4 - 4 + 4 * -4 4 4 12 32 12 20 64
Problem: Problemträd: En teknolog som glömt sin tresiffriga portkod tryckte sej igenom alla tusen kombinationer så här: 000001002003004005006007008009010011012...999 Det kräver 3000 tryckningar. Man kan dock börja med 000 och sedan klara sig med 999 tryckningar om man har en supersmart sekvens där varje tresiffrigt tal förekommer någonstans. Hur ser sekvensen ut? Problemträd: 000 1 2 3 4 5 6 7 8 9 0001 0002 0003 0004 0005 0006 0007 0008 0009 1 2 3 4 5 6 7 8 9 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059
Sökning i problemträd Bredden först
Sökning i problemträd Djupet först
Hitta lösning på minimalt avstånd Bredden först
Hitta lösning på minimalt avstånd Djupet först
Hitta en lösning då de finns långt ner i trädet Bredden först
Hitta en lösning då de finns långt ner i trädet Djupet först
Bredden först görs oftast med en kö 1 1 2 2 3 3 4 4 5 5 6 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Kö 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Djupet först görs oftast med rekursion 1 1 2 2 3 4 5 5 6 6 7 8 9 10 11 12 13 14 14 15 15 16 16 17 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Problem: 4 - 4 * 4 + 4 - 4 + 4 * 4 - 4 + 4 * 4 - 4 + 4 * Kö 4 8 16 -4 Erhåll talet (100) på kortast sätt med hjälp av talet fyra (4) och de tre räknesätten addition (+), subtraktion (-) och multiplikation (*). Exempel: 4 * 4 + 4 + 4 * 4 + 4 = 100 4 4 4 - 4 * 4 + 8 8 16 16 4 - 4 + 4 * 4 - 4 + 4 * 4 - 4 + 4 * -4 -4 4 4 12 32 12 20 64 Kö 4 8 16 -4 4 4 12 32 12 20 64 -8 -16
Problem: En teknolog som glömt sin tresiffriga portkod tryckte sej igenom alla tusen kombinationer så här: 000001002003004005006007008009010011012...9999 Det kräver 3000 tryckningar. Man kan dock börja med 000 och sedan klara sig med 999 tryckningar om man har en supersmart sekvens där varje tresiffrigt tal förekommer någonstans. Hur ser sekvensen ut? 000 1 2 3 4 5 6 7 8 9 0001 0002 0003 0004 0005 0006 0007 0008 0009 1 2 3 4 5 6 7 8 9 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059
00010020030040050060070080090110120130140150160170180190210220230240 25026027028029031032033034035036037038039041042043044045046047048049 05105205305405505605705805906106206306406506606706806907107207307407 50760770780790810820830840850860870880890910920930940950960970980991 11211311411511611711811912212312412512612712812913213313413513613713 81391421431441451461471481491521531541551561571581591621631641651661 67168169172173174175176177178179182183184185186187188189192193194195 19619719819922232242252262272282292332342352362372382392432442452462 47248249253254255256257258259263264265266267268269273274275276277278 27928328428528628728828929329429529629729829933343353363373383393443 45346347348349354355356357358359364365366367368369374375376377378379 38438538638738838939439539639739839944454464474484494554564574584594 65466467468469475476477478479485486487488489495496497498499555655755 85595665675685695765775785795865875885895965975985996667668669677678 67968768868969769869977787797887897987998889899900
Sortering
Quicksort pivot pivot 1 1 5 2 3 9 2 3 3 3 4 2 9 4 4 4 2 9 7 1 5 5 10 6 2 9 8 7 1 Komplexiteten blir i allmänhet O(n log n) pivot pivot 1 1 2 2 3 4 5 6 7 8 9 10 Komplexiteten blir O(n2) om redan sorterad
Komplexitet: O(m log m + n) Röster för fred 030426:7 Körledaren förvarar sina noter sorterade i en tjock pärm. Till varje repetition plockar han ut några noter och efteråt sorteras de in i pärmen igen med quicksort. Som pivotelement väljs elementet längst till höger i varje delvektor. I kören finns en tildaelev som påpekar att det går att göra mycket enklare och effektivare. Hur då? Ange komplexiteten då m noter plockas ut från den n tjocka pärmen? 1 2 3 4 5 6 7 8 9 10 m 1 2 3 4 5 6 7 8 9 10 Komplexitet: O(m log m + n)
Dokusåpan 040313:7 En populär kanadensisk dokusåpa söker deltagare. Flera (243 personer) vill vara med och arrangörerna sorterar de sökande i en lång rad efter näslängd. När programledaren öppnar dörren för att släppa in den första sökanden får en handfull av dem som står först i kön syn på honom och blir så skraja att de springer och gömmer sig i kön. Beskriv en smart algoritm för att sortera om kön. Antag att det visade sig vara tre personer som blev skrämda, hur många näsjämförelser behövs det då med din algortitm för att sortera om kön? 1 4 5 2 3 2 6 4 5 7 6 3 8 7 8 1 9 9 10 10 4 5 6 7 8 9 10 9 10 Antal jämförelser: (10-1) + (2 + 1) = 12 Antal jämförelser: (243-1) + (2 + 1) = 245