Björn Eiderbäck NADA, KTH Email: [email protected] Innehåll Klassdiagram i mer detalj
Övning 4 nada.kth.se/~mhj/tilda
-
Upload
brett-mccarthy -
Category
Documents
-
view
52 -
download
1
description
Transcript of Övning 4 nada.kth.se/~mhj/tilda
Övning 4
www.nada.kth.se/~mhj/tilda
ProblemträdBredden förstDjupet först
Sortering
Problemträd
Problem: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
8 160
12 324 20 64124 0-4
44 4
4 4 4 4 4 4 4 4 4
Problem: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
0005 0006 0007 0008 00090004000300020001
00055 00056 00057 00058 0005900054000530005100050 00052
54321 9876
5 98760 4321
Sökning i problemträd
Bredden först
Djupet först
Sökning i problemträd
Hitta lösning på minimalt avstånd
Bredden först
Hitta lösning på minimalt avståndDjupet först
Hitta en lösning då de finns långt ner i trädetBredden först
Hitta en lösning då de finns långt ner i trädetDjupet först
1
3 42
9875 131211106
27242116 38333018 31282519 4039373422 232014 3532292615 36
1
2
5
3 4
Bredden först görs oftast med en kö
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Kö
17
6
17 18
1
3 42
9875 131211106
27242116 38333018 31282519 4039373422 232014 3532292615 36
1
2
5
Djupet först görs oftast med rekursion
17
6
1614 15 17
Problem: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
8 160
12 324 20 64124 0-4
44 4
4 4 4 4 4 4 4 4 4
Kö
4 0 8 16 -4 4 0 4 12 32 12 20 64 -8 0 -16
4
0 8 16
-4
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
0005 0006 0007 0008 00090004000300020001
00055 00056 00057 00058 0005900054000530005100050 00052
54321 9876
5 98760 4321
000100200300400500600700800901101201301401501601701801902102202302402502602702802903103203303403503603703803904104204304404504604704804905105205305405505605705805906106206306406506606706806907107207307407507607707807908108208308408508608708808909109209309409509609709809911121131141151161171181191221231241251261271281291321331341351361371381391421431441451461471481491521531541551561571581591621631641651661671681691721731741751761771781791821831841851861871881891921931941951961971981992223224225226227228229233234235236237238239243244245246247248249253254255256257258259263264265266267268269273274275276277278279283284285286287288289293294295296297298299333433533633733833934434534634734834935435535635735835936436536636736836937437537637737837938438538638738838939439539639739839944454464474484494554564574584594654664674684694754764774784794854864874884894954964974984995556557558559566567568569576577578579586587588589596597598599666766866967767867968768868969769869977787797887897987998889899900
Sortering
Quicksort
5 9 3 4 7 10 6 2 8 1
pivot
93 94 92 7151 51
pivot
4232 3 42
Komplexiteten blir i allmänhet O(n log n)
6 7 98 1051 3 42
pivot
1
pivot
2
Komplexiteten blir O(n2) om redan sorterad
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?
6 98 10541 2 73
m
6 98 10541 2 73
Komplexitet: O(m log m + n)
Dokusåpan 040313:7En 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?
6 9 10541 2 73 86 9 1054 7 832 1
654 7 8 9 10
Antal jämförelser: (10-1) + (2 + 1) = 12Antal jämförelser: (243-1) + (2 + 1) = 245