forelesning 1 læringsmål - algoritmer og datastrukturerforelesning 1 vi starter med fagfeltets...
TRANSCRIPT
-
Forelesning 1
Vi starter med fagfeltets grunnleggendebyggesteiner, og skisserer etrammeverk for å tilegne seg resten avstoffet. Spesielt viktig er ideen bakinduksjon og rekursjon: Vi trengerbare se på siste trinn, og kan anta atresten er på plass.
Pensum
⇤ Kap. 1. The role of algorithms incomputing
⇤ Kap. 2. Getting started:Innledning, 2.1–2.2
⇤ Kap. 3. Growth of functions:Innledning og 3.1
Læringsmål
[A1] Forstå bokas pseudokode-konvensjoner
[A2] Kjenne egenskapene til random-access machine-modellen (RAM)
[A3] Kunne definere problem, instansog problemstørrelse
[A4] Kunne definere asymptotisknotasjon, O, Ω, Θ, o og ω.
[A5] Kunne definere best-case, average-case og worst-case
[A6] Forstå løkkeinvarianter oginduksjon
[A7] Forstå rekursiv dekomponering oginduksjon over delproblemer
[A8] Forstå Insertion-Sort
mlh@
ntnu.no
!1
-
Forelesningen filmes
!2
-
Forelesning 1Problemer og algoritmer
!3
-
!4
1. Hva og hvorfor?
2. Asymptotisk notasjon
3. Dekomponering
4. Eksempel: Sum
5. Eksempel: Insertion-sort
-
Hovedbudskap:
• Brute force er ofte helt ubrukelig
• Dekomponer problemet i stedet:
• Anta at du kan løse mindre instanser
• Bruk dette til å finne en løsning
!5
-
Hva og hvorfor?
!6
1:5
-
Om fagetEn kort orientering
!7
-
• Kjenne klassiske algoritmer
• Kjenne klassiske problemer
• Kunne analysere og designe algoritmer
Læringsmål
!8
-
!9
Det er viktig å lese boka. Det holder ikke med YouTube-forklaringer :-)
-
!10
Algoritmer og datastrukturer
Pensumhefte, 2019
Magnu
sL
ieH
etla
nd
Algoritmer og datastrukturer
Problemløsningsguide, 2019
Magnu
sL
ieH
etla
nd
Det står også mye viktig i dette heftet!
Denne guiden er bare ment å være til hjelp – den er ikke pensum!
-
Merk: I motsetning til i noen andre fag er
ikke boka bare en «anbefalt ressurs». Den
er helt sentral!
!11
-
algdat.idi.ntnu.no
!12
https://algdat.idi.ntnu.no
-
!13
MotivasjonHvorfor ikke «brute force»?
-
motivasjon › sortering
66
688 833
355
522
27
7
7
44
4
1 1
1
!14
Hva om vi vil sortere noen kort … kan vi bare skyfle dem rundt og se om vi får rett svar?
-
motivasjon › sortering
11
1
22
23
3
3
44
4
55
5
66
67
7
7
88
8
!15
-
motivasjon › sortering
77
755 566
622
288
83
3
3
44
4
1 1
1
!16
-
motivasjon › sortering
11
1
22
2
33
3 44
4 55
5
66
6
77
7 88
8
!17
-
motivasjon › sortering
55
566 611
133
344
42
2
2
77
7
8 8
8
!18
-
!19
Dette kalles bogo-sort, og er noen særlig god løsning.
Og ikke er dette et så viktig problem heller, kanskje.
Men hva om vi for eksempel vil finne flest mulig par med kompatible donorer og resipienter for f.eks. nyretransplantasjon? En bedre løsning vil bety flere liv som reddes.
Her er det kanskje mindre opplagt hvordan vi skal gå frem – og om det er greit å prøve alle muligheter.
-
motivasjon › matching
!20
La oss sammenligne Ford-Fulkerson-algoritmen (som dere lærer om i forelesning 12) med såkalt «brute force» – å teste alle muligheter. La oss si at vi har fire donorer og fire resipienter.
-
motivasjon › matching
!21
-
motivasjon › matching
!22
-
motivasjon › matching
!23
-
motivasjon › matching
!24
-
motivasjon › matching
!25
-
motivasjon › matching
!26
-
motivasjon › matching
!27
-
motivasjon › matching
!28
-
motivasjon › matching
!29
-
motivasjon › matching
!30
-
motivasjon › matching
!31
-
motivasjon › matching
!32
-
motivasjon › matching
!33
-
motivasjon › matching
!34
-
motivasjon › matching
!35
-
motivasjon › matching
!36
-
motivasjon › matching
!37
-
motivasjon › matching
!38
-
motivasjon › matching
!39
-
motivasjon › matching
!40
-
motivasjon › matching
!41
-
motivasjon › matching
!42
-
motivasjon › matching
!43
-
motivasjon › matching
!44
-
motivasjon › matching
!45
-
motivasjon › matching
!46
-
motivasjon › matching
!47
-
motivasjon › matching
!48
-
motivasjon › matching
!49
-
motivasjon › matching
!50
-
motivasjon › matching
!51
-
motivasjon › matching
!52
-
motivasjon › matching
!53
-
motivasjon › matching
!54
-
motivasjon › matching
!55
-
motivasjon › matching
!56
-
motivasjon › matching
!57
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 4
!58
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 4
Her måtte vi prøve 24 mulige permutasjoner, mens Ford-Fulkerson måtte utføre 39 «operasjoner» (ikke så presist definert her). Så idet brute-force-løsningen var ferdig, så hadde F-F fortsatt et stykke igjen:
!59
Ford-Fulkerson er litt komplisert – kanskje en enkel brute-force-løsning er like grei, da? Eller?
(«When in doubt, use brute force» – Rob Pike)
-
!60
La oss doble antallet personer, og se hva som skjer.
-
!61
-
!62
-
!63
-
!64
-
!65
-
!66
-
!67
-
!68
-
!69
-
!70
-
!71
-
!72
-
!73
-
!74
-
!75
-
!76
-
!77
-
!78
-
!79
-
!80
-
!81
-
!82
-
!83
-
!84
-
!85
-
!86
-
!87
-
!88
-
!89
-
!90
-
!91
-
!92
-
!93
-
!94
-
!95
-
!96
-
!97
-
!98
-
!99
-
!100
-
!101
-
!102
-
!103
-
!104
-
!105
-
!106
-
!107
-
!108
-
!109
-
!110
-
!111
-
!112
-
!113
-
!114
-
!115
-
!116
-
!117
-
!118
-
!119
-
!120
-
!121
-
!122
-
!123
-
!124
-
!125
-
!126
-
!127
-
!128
-
!129
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 8
!130
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 8
!131
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 8
!132
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 8
!133
-
motivasjon › matching
0 100 %
Ford-Fulkerson
Brute force
n = 8
Her trengte Ford-Fulkerson 70 operasjoner, mens det var 40320 permutasjoner å teste.
!134
Med andre ord: En dobling av problemet gir ca. dobbel kjøretid for F-F, mens brute force ser ut til å stoppe helt opp.
Og dette var for et leke-eksempel…
-
!135
-
!136
-
100
101
102
103
104
105
106
107
108
109
1010
mlh@
ntnu.no
!137
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
mlh@
ntnu.no
!138
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
mlh@
ntnu.no
!139
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
mlh@
ntnu.no
!140
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
mlh@
ntnu.no
!141
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
mlh@
ntnu.no
!142
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
mlh@
ntnu.no
!143
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
mlh@
ntnu.no
!144
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
mlh@
ntnu.no
!145
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
mlh@
ntnu.no
!146
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
mlh@
ntnu.no
!147
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
mlh@
ntnu.no
!148
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
mlh@
ntnu.no
!149
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
mlh@
ntnu.no
!150
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
mlh@
ntnu.no
!151
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
mlh@
ntnu.no
!152
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
Pattedyr
mlh@
ntnu.no
!153
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
Pattedyr
mlh@
ntnu.no
!154
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
Pattedyr
Mitokondrier
mlh@
ntnu.no
!155
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
Pattedyr
Mitokondrier
mlh@
ntnu.no
!156
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
Pattedyr
Mitokondrier
The Big Bang
mlh@
ntnu.no
!157
-
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Facebook
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
Elefanter
Pattedyr
Mitokondrier
The Big Bang
mlh@
ntnu.no
!158
-
1 × =13.8
Ga
mlh@
ntnu.no
!159
-
1 × =13.8
Ga
mlh@
ntnu.no
!160
-
1 × =
13.8
Ga
mlh@
ntnu.no
!161
-
1 000 000 000 000 000 000 000 000 000 000 × =
13.8
Ga
mlh@
ntnu.no
!162
-
1 000 000 000 000 000 000 000 000 000 000
× =
13.8
Ga
mlh@
ntnu.no
!163
-
1 000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
× =
13.8
Ga
mlh@
ntnu.no
!164
-
1 000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
× =
13.8
Ga
mlh@
ntnu.no
!165
-
=
12h
Med en smartere algoritme
mlh@
ntnu.no
!166
-
=
12h
Med en smartere algoritme
mlh@
ntnu.no
!167
Her er matchingen utført i hvert land for seg (og mange av tallene er estimater). Algoritmen som brukes er Chandran–Hochbaum.
-
!168
• Mange viktige problemer krever
algoritmiske løsninger
• Forskjellen på gode og dårlige
løsninger er i kosmisk skala
• Vi er interessert i «de store linjene»
-
• Matching: Forelesning 12
• Men: Sortering er en god modell for
algoritmisk tenking!
!169
-
motivasjon › sortering › innsetting
66
6
88
8
33
3
55
5
22
2
77
7
44
4
11
1
!170
Mulig fremgangsmåte: Vi begynner med å se på bare de første kortene, og så sorterer vi oss gradvis mot høyre.
Vi ser er hele tiden bare interessert i å sette inn neste kort.
Vi bygger altså trinnvis på forrige del-løsning, uten å begynne fra scratch hele tiden, som i en brute force-løsning.
Vi utnytter struktur i problemet – nemlig det at det er mulig å sortere litt etter litt. Dette ignoreres helt i en brute-force-løsning.
-
motivasjon › sortering › innsetting
!171
-
motivasjon › sortering › innsetting
66
6
88
8
!172
-
motivasjon › sortering › innsetting
66
6
88
8
!173
-
motivasjon › sortering › innsetting
66
6
88
8
!174
-
motivasjon › sortering › innsetting
66
6
88
8
33
3
!175
-
motivasjon › sortering › innsetting
66
6
88
8
33
3
!176
-
motivasjon › sortering › innsetting
66
6
88
8
33
3
!177
-
motivasjon › sortering › innsetting
66
6
88
8
33
3
!178
-
motivasjon › sortering › innsetting
33
3
66
6
88
8
!179
-
motivasjon › sortering › innsetting
33
3
66
6
88
8
55
5
!180
-
motivasjon › sortering › innsetting
33
3
66
6
88
8
55
5
!181
-
motivasjon › sortering › innsetting
33
3
66
6
88
8
55
5
!182
-
motivasjon › sortering › innsetting
33
3
66
6
88
8
55
5
!183
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
!184
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
22
2
!185
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
22
2
!186
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
22
2
!187
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
22
2
!188
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
22
2
!189
-
motivasjon › sortering › innsetting
33
3
55
5
66
6
88
8
22
2
!190
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
88
8
!191
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
88
8
77
7
!192
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
88
8
77
7
!193
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
88
8
77
7
!194
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
!195
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
44
4
!196
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
44
4
!197
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
44
4
!198
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
44
4
!199
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
44
4
!200
-
motivasjon › sortering › innsetting
22
2
33
3
55
5
66
6
77
7
88
8
44
4
!201
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
!202
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!203
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!204
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!205
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!206
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!207
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!208
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!209
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!210
-
motivasjon › sortering › innsetting
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
!211
-
motivasjon › sortering › innsetting
11
1
22
2
33
3
44
4
55
5
66
6
77
7
88
8
!212
-
!213
• Er dette bedre enn brute force?
Hvordan kan vi vite eller påstå det?
• Hvordan kom vi frem til denne
algoritmen? Hva er det underliggende
prinsippet?Disse to tingene skal vi svare på i de neste to delene av forelesningen.
-
Asymptotisk notasjon
!214
2:5
-
Vi vil finne kjøretidMen ignorere detaljer
!215
-
• Kun enkle instruksjoner, som aritmetikk,
flytting av data og programkontroll
• Disse tar konstant tid
• Vi kan håndtere heltall og flyttall
• Antar vanligvis at heltallene er maks
c lg n, for en eller annen c større eller lik 1
Abstrakt maskin
!216
Verdiområdet her er ment å være akkurat stort nok til at vi får plass til tabell-indekser (eller pekere) som kan adressere hele inputen vår.
-
• Problem: Relasjon mellom input og output
• Instans: Én bestemt input
• Problemstørrelse, n:
Lagringsplass som trengs for en instans
• Kan variere hvordan vi måler størrelse
!217
Hva er n?
-
!218
• Kjøretid er en funksjon av
problemstørrelsen; større problemer
krever mer tid … men hvor mye?
• Eksempel: Hvis vi teller operasjoner,
og hver operasjon tar ett
mikrosekund, hva rekker vi på et år?
-
asymptotisk notasjon
lg n logaritmisk√n — 1× 1031
n lineær 3× 1015
n lg n linearitmisk 7× 1013
n2 kvadratisk 6× 107
n3 kubisk 1× 105
2n eksponentiell 51n! faktoriell 17
Alt på formen nk kaller vi polynomisk(Ta en kikk på Problem 1-1)
!219
-
asymptotisk notasjon
lg n logaritmisk 2× 10949 978 419 116 565√n — 1× 1031
n lineær 3× 1015
n lg n linearitmisk 7× 1013
n2 kvadratisk 6× 107
n3 kubisk 1× 105
2n eksponentiell 51n! faktoriell 17
Alt på formen nk kaller vi polynomisk(Ta en kikk på Problem 1-1)
Tallene her er altså hvor stor n kan bli før det tar mer enn ett år å bli ferdig, dersom vi bruker f(n) mikrosekunder, der f(n) er funksjonen til venstre.
!220
Det store tallet vi hadde tidligere hadde en eksponent på 85
-
!221
• Vi er interessert i hvor fort kjøretiden
vokser
• Vi er kun interessert i en veldig grov
«størrelsesorden»
• Asymptotisk notasjon: Dropp
konstanter og lavere ordens ledd
-
asymptotisk notasjon
ΘTheta
!222
-
asymptotisk notasjon
42 =
!223
-
asymptotisk notasjon
42 = Θ(1)
!224
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 =
!225
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
!226
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n =
!227
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
!228
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 =
!229
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
!230
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 =
!231
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
!232
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n =
!233
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
!234
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
n2 + n lg n =
!235
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
n2 + n lg n = Θ(n2)
!236
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
n2 + n lg n = Θ(n2)
2n + nk =
!237
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
n2 + n lg n = Θ(n2)
2n + nk = Θ(2n)
!238
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
n2 + n lg n = Θ(n2)
2n + nk = Θ(2n)
n! + 2n =
!239
-
asymptotisk notasjon
42 = Θ(1)
2n + 5 = Θ(n)
4n2 + 100n = Θ(n2)
an3 + bn2 = Θ(n3)
nk + nk−1 = Θ(nk)
n + lg n = Θ(n)
n2 + n lg n = Θ(n2)
2n + nk = Θ(2n)
n! + 2n = Θ(n!)
Om vi ignorerer konstantfaktorer, så er vi bare interessert i om en funksjon garantert «går forbi» en annen, når problemet blir stort nok. Den har da høyere vekstrate eller «orden».
Vi velger det enkleste eksemplet vi kan som «representant» for en klasse med funksjoner som vokser like fort, og bruker det i den asymptotiske notasjonen.
Merk: Vi kunne ha brukt uttrykket til venstre også inne i theta-notasjonen – det ville ha betydd akkurat det samme, men bare vært mer komplisert.
!240
-
f(n) = ?
n
f(n)
asymptotisk notasjon
Nøyaktig kjøretid kan være hårete, varierende eller udefinert
mlh@
ntnu.no
!241
-
f(n) = ?
n
f(n)
asymptotisk notasjon
Vi ønsker å «skissere formen» til funksjonen
mlh@
ntnu.no
!242
-
c2n2
Θ(n2)
c1n2
n
f(n)
asymptotisk notasjon
Ligger mellom to skaleringer av samme kurve, for store n
mlh@
ntnu.no
!243
-
asymptotisk notasjon
ΘTheta
!244
-
asymptotisk notasjon
OΘΩO, theta og omega
!245
-
cn2
O(n2)
n
f(n)
asymptotisk notasjon
Ligger under skalert kurve, for store n
mlh@
ntnu.no
!246
O-notasjon («big oh») brukes til å angi øvre grenser. Her er n^2 en øvre grense for funksjonen vår, om vi kan skalere som vi vil, og velger høye nok n.
-
Ω(n2)
cn2
n
f(n)
asymptotisk notasjon
Ligger over skalert kurve, for store n
mlh@
ntnu.no
!247
På tilsvarende vis så brukes omega-notasjon til å angi *nedre* grenser.
-
asymptotisk notasjon
f(n) = O(g(n))
Her gir g(n) en asymptotisk øvre grense for f(n).
!248
-
asymptotisk notasjon
f(n) = O(g(n))
Hvorfor ikke f ∈ O(g)?
!249
-
asymptotisk notasjon
f(n) = O(g(n))
Hvorfor ikke f ∈ O(g)?
Historisk . . . og praktisk. n2 +O(n), etc.
Se også https://piazza.com/class/is1tatih5pc4up?cid=21
!250
Slik som det defineres i boka, så produserer de asymptotiske operatorene *mengder* med funksjoner.
§ 5.Rieman
n.
31
Verlauf der
Funktion t,{s)
in derganzen
Ebenebeherr
scht,falls
man
ihn inder Ha
lbebeue ^>\
verfolgen ka
nn.
Aus diesen E
rgebnissen
konnteRieman
n leichtschlie
ßen, daß
l{s)für s
= — 2, s= — 4, s
= — 6, • • ,allgem
ein s= ~ 2q (w
o q
eine positiv
e ganze Zahl
ist)von de
r ersten Or
dnungversch
windet,
sonstaber
für alle l
eellens, sow
ie für(? < und
ö > 1 vonNull
verschieden
ist,so daß
alle von — 2q ve
rschiedenen
etwa vorhande
nen
Nullstellen
dem Streifen
^ 6 ^ 1angehö
ren und nicht
reellsind.
Riemann vermut
ete ferner,
ohne mehr als
heuristische
Gründe
für die Rich
tigkeit anfü
hren zu könn
en, daß die Z
etafunktion
folgende
sechsEigens
chaften besit
zt:
I. Es gibt un
endlich viele
Nullstellen v
on ^{s)im Str
eifen
0^(3^1, die n
atürlich sym
metrisch zur
reellen Achs
e und
auch nach de
r Funktional
gleichuug sy
mmetrisch zu
r Ge-
raden(?= i vertei
lt liegen.
IL Wennfür T>0
unterN{T) d
ie AuzahP) d
er Null-
stellen (meh
rfachemehrfa
ch gezählt) v
erstanden wi
rd, deren
Ordinate zwi
schen(exkl.
) undT (inkl.
) liegt, so
ist
(1)N(T) = ^ T lo
g r - '^^1^ T + 0(
logn
Hierbei vers
tehe ich unt
er derBezeic
hnungOdogTj
eine Funk-
tion von T, d
eren Quotien
t durch log
T absolut geno
mmen für all
e
T von einer ge
wissenStelle
an unterhalb
einerfesten
Schranke lieg
t.
Ich verstehe
allgemein, we
nn yix)eine
für alle ree
llen xvon ei
nem
gewissen Wer
te andefini
erte und posit
ive Funktion
von xist und
f\x)eine vo
n einem gewi
ssen reellen
x an definie
rte reelle od
er kom-
plexeFunkti
on vonx, unt
er derSchrei
bweise
f{x)= 0{g{x))
(sprich:
von g{x)), da
ß
endlich ist,
d. h.,daß es
zwei Zahlen |
und A gibt, fü
r welche be
i
allenx'^i, Jlx
)\
-
asymptotisk notasjon
f(n) = O(g(n))
Hvorfor ikke f ∈ O(g)?
Historisk . . . og praktisk. n2 +O(n), etc.Fra «Die analytische Zahlentheorie» av P. G. H. Bachmann (1894).
https://archive.org/details/dieanalytischez00bachgoog
§ 5.Rieman
n.
31
Verlauf der
Funktion t,{s)
in derganzen
Ebenebeherr
scht,falls
man
ihn inder Ha
lbebeue ^>\
verfolgen ka
nn.
Aus diesen E
rgebnissen
konnteRieman
n leichtschlie
ßen, daß
l{s)für s
= — 2, s= — 4, s
= — 6, • • ,allgem
ein s= ~ 2q (w
o q
eine positiv
e ganze Zahl
ist)von de
r ersten Or
dnungversch
windet,
sonstaber
für alle l
eellens, sow
ie für(? < und
ö > 1 vonNull
verschieden
ist,so daß
alle von — 2q ve
rschiedenen
etwa vorhande
nen
Nullstellen
dem Streifen
^ 6 ^ 1angehö
ren und nicht
reellsind.
Riemann vermut
ete ferner,
ohne mehr als
heuristische
Gründe
für die Rich
tigkeit anfü
hren zu könn
en, daß die Z
etafunktion
folgende
sechsEigens
chaften besit
zt:
I. Es gibt un
endlich viele
Nullstellen v
on ^{s)im Str
eifen
0^(3^1, die n
atürlich sym
metrisch zur
reellen Achs
e und
auch nach de
r Funktional
gleichuug sy
mmetrisch zu
r Ge-
raden(?= i vertei
lt liegen.
IL Wennfür T>0
unterN{T) d
ie AuzahP) d
er Null-
stellen (meh
rfachemehrfa
ch gezählt) v
erstanden wi
rd, deren
Ordinate zwi
schen(exkl.
) undT (inkl.
) liegt, so
ist
(1)N(T) = ^ T lo
g r - '^^1^ T + 0(
logn
Hierbei vers
tehe ich unt
er derBezeic
hnungOdogTj
eine Funk-
tion von T, d
eren Quotien
t durch log
T absolut geno
mmen für all
e
T von einer ge
wissenStelle
an unterhalb
einerfesten
Schranke lieg
t.
Ich verstehe
allgemein, we
nn yix)eine
für alle ree
llen xvon ei
nem
gewissen Wer
te andefini
erte und posit
ive Funktion
von xist und
f\x)eine vo
n einem gewi
ssen reellen
x an definie
rte reelle od
er kom-
plexeFunkti
on vonx, unt
er derSchrei
bweise
f{x)= 0{g{x))
(sprich:
von g{x)), da
ß
endlich ist,
d. h.,daß es
zwei Zahlen |
und A gibt, fü
r welche be
i
allenx'^i, Jlx
)\
-
!252
Opprinnelig: Notasjonen representerte en
anonym, ukjent representant for en klasse
funksjoner
Nå: Notasjonen representerer selve klassen
… men brukes fortsatt på den opprinnelige
måten; «abuse of notation»
-
f(n) = o(g(n))
f(n) = ω(g(n))
!253
-
f(n) = o(g(n))
f(n) = ω(g(n))
Som før, men for alle c > 0
Disse er strengere varianter av de store operatorene.
!254
-
ω
Ω
Θ
O
o
>
≥
=
≤
<
!255
-
Klasser av inputBest, verst og forventet
!256
-
!257
Good
Bad
Average
the
the
and the
-
Om vi ikke har noen eksplisitt sannsynlighetsfordeling, antar vi bare at alle inputs er like sannsynlige.
• Kjøretid: Funksjon av problemstørrelse
• Best-case:
Beste mulige kjøretid for en gitt størrelse
• Worst-case: Verste mulige
• Average-case:
Forventet, gitt en sannsynlighetsfordeling
• Bruker vanligvis worst-case
!258
-
!259
Så …
Hva kan vi nå si om sorteringen vår? Er
den bedre enn brute force?
-
!260
Først, brute force …
-
asymptotisk notasjon › eksempel › brute force
88
8
!261
-
asymptotisk notasjon › eksempel › brute force
33
3
!262
-
asymptotisk notasjon › eksempel › brute force
55
5
!263
-
asymptotisk notasjon › eksempel › brute force
22
2
!264
-
asymptotisk notasjon › eksempel › brute force
77
7
!265
-
asymptotisk notasjon › eksempel › brute force
44
4
!266
-
asymptotisk notasjon › eksempel › brute force
11
1
!267
-
asymptotisk notasjon › eksempel › brute force
66
6
!268
-
asymptotisk notasjon › eksempel › brute force
66
6
8
!269
Vi har 8 muligheter for første posisjon. For hvert kort vi velger der, har vi igjen 7 muligheter til neste posisjon, etc.
-
asymptotisk notasjon › eksempel › brute force
66
6
88
8
33
3
55
5
22
2
77
7
44
4
11
1
12345678
!270
-
asymptotisk notasjon › eksempel › brute force
66
6
88
8
33
3
55
5
22
2
77
7
44
4
11
1
12 ×3 ×4 ×5 ×6 ×7 ×8 ×
!271
Mulighetene for hver posisjon er uavhengige av hverandre, så det totale antall muligheter blir produktet. Alt dette må prøves.
-
asymptotisk notasjon › eksempel › brute force
66
6
88
8
33
3
55
5
22
2
77
7
44
4
11
1
n!!272
Og dette er jo definisjonen på n! («n fakultet», på engelsk «n factorial»).
Og den er noe av det verste vi kan komme borti …
-
!273
Så, sortering ved innsetting …
-
asymptotisk notasjon › eksempel › innsetting
88
8 77
7
66
6
55
5 44
4
33
3
22
2
11
1
77
7 88
8
66
6
55
5
44
4
33
3
22
2 11
1
66
6
77
7
88
8
55
5
44
4
33
3 22
2
11
1
55
5
66
6 77
7
88
8
44
4
33
3
22
2
11
1
44
4
55
5
66
6 77
7
88
8 33
3 22
2
11
1
33
3
44
4
55
5 66
6
77
7
88
8
22
2
11
1
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
Verste tilfelle: A = Èn, . . . , 1Í. Hver rad er starten på en iterasjon
!274
-
asymptotisk notasjon › eksempel › innsetting
88
8 77
7
77
7 88
8
66
6
66
6
77
7
88
8
55
5
55
5
66
6 77
7
88
8
44
4
44
4
55
5
66
6 77
7
88
8 33
3
33
3
44
4
55
5 66
6
77
7
88
8
22
2
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
Verste tilfelle: A = Èn, . . . , 1Í. Hver rad er starten på en iterasjon
!275
-
asymptotisk notasjon › eksempel › innsetting
88
8 77
7
77
7 88
8
66
6
66
6
77
7
88
8
55
5
55
5
66
6 77
7
88
8
44
4
44
4
55
5
66
6 77
7
88
8 33
3
33
3
44
4
55
5 66
6
77
7
88
8
22
2
22
2
33
3
44
4
55
5
66
6
77
7
88
8
11
1
A[j] må flyttes forbi A[1 . . j ≠ 1] andre, j = 2 . . . n
!276
-
asymptotisk notasjon › eksempel › innsetting
88
8
77
7 88
8
66
6
77
7
88
8
55
5
66
6 77
7
88
8
44
4
55
5
66
6 77
7
88
8
33
3
44
4
55
5 66
6
77
7
88
8
22
2
33
3
44
4
55
5
66
6
77
7
88
8
A[j] må flyttes forbi A[1 . . j ≠ 1] andre, j = 2 . . . n
!277
-
asymptotisk notasjon › eksempel › innsetting
11
1
11
1 11
1
11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
Hver flytting er 1 operasjon. Hvor mange totalt?
!278
-
asymptotisk notasjon › eksempel › innsetting
11
1
11
1 11
1
11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
1
+ 2
+ 3
+ 4
...
+ n ≠ 2
+ n ≠ 1
Hver flytting er 1 operasjon. Hvor mange totalt?
!279
-
asymptotisk notasjon › eksempel › innsetting
11
1
11
1 11
1
11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1 11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
11
1
1 n
1
n ≠ 1
1
+ 2
+ 3
+ 4
...
+ n ≠ 2
+ n ≠ 1
!280
Det totale blir altså bredden ganger høyden delt på to (som også er formelen for arealet av en trekant – og vi har jo en trekant med arbeid her).
-
asymptotisk notasjon › eksempel › innsetting
n−1ÿ
i=1
i =
I iterasjon nr i gjør vi i flytte-operasjoner
!281
-
asymptotisk notasjon › eksempel › innsetting
n−1ÿ
i=1
i =n · (n − 1)
2
Halvparten av rektanglet n · (n − 1), «på skrå»
!282
-
asymptotisk notasjon › eksempel › innsetting
n−1ÿ
i=1
i =n · (n − 1)
2= Θ(n2)
12n2 − 1
2n uten konstantfaktorer og lavere-ordens ledd er n2
!283
-
asymptotisk notasjon › eksempel › innsetting
n−1ÿ
i=1
i =n · (n − 1)
2= Θ(n2)
Insertion-Sort har altså kvadratisk kjøretid
!284
-
!285
Om det ikke var klart: Vi har gått fra noe kosmisk dårlig til noe … sånn passe dårlig. Som jo er en enorm forbedring! (Vi skal se på bedre sorteringsalgoritmer senere.)
-
!286
Noe å tenke på:
Vi har så langt antatt worst-case.
Hva blir best-case for disse to algoritmene?
Hva blir average-case?
-
Dekomponering
!287
3:5Men … hvordan kom vi frem til denne algoritmen? Kan vi trekke noen lærdom her som vi kan bruke på vanskeligere problemer?
-
Induksjon
!288
-
dekomponering › induksjon
P(a)
∀x P(x)
∀-introduksjon: Vis P for vilkårlig a
mlh@
ntnu.no
!289
-
dekomponering › induksjon
P(a)
∀x P(x)
vilkårlig
∀-introduksjon: Vis P for vilkårlig a
mlh@
ntnu.no
!290
-
dekomponering › induksjon
P...
Q
P ⇒ Q⇢H
H
⇒-introduksjon: Midlertidig anta P og vis deretter Q
mlh@
ntnu.no
!291
-
dekomponering › induksjon
P ⇒ Q, P
Q
⇒-eliminasjon: Modus ponens
mlh@
ntnu.no
!292
-
dekomponering › induksjon
P...
Q
P ⇒ Q⇢H
H
P(a)
∀x P(x)
vilkårlig
P ⇒ Q, P
Q
Induksjon kombinerer disse
mlh@
ntnu.no
!293
-
dekomponering › induksjon
P...
Q
P ⇒ Q⇢H
H
P(a)
∀x P(x)
vilkårlig
P ⇒ Q, P
Q
Vi introduserer og eliminerer mange implikasjoner
mlh@
ntnu.no
!294
-
dekomponering › induksjon
Generell induksjon kan foregå i et nettverk av utsagn . . .
mlh@
ntnu.no
!295
-
dekomponering › induksjon
. . . men vi kan alltid ordne dem i en serie med trinn
mlh@
ntnu.no
!296
-
dekomponering › induksjon
. . . men vi kan alltid ordne dem i en serie med trinn
mlh@
ntnu.no
!297
-
dekomponering › induksjon
Ett eller flere tilfeller baserer seg ikke på noen andre
mlh@
ntnu.no
!298
-
dekomponering › induksjon
Ett eller flere tilfeller baserer seg ikke på noen andre
Grunntilfelle
mlh@
ntnu.no
!299
-
dekomponering › induksjon
De andre er induktive: De følger av tidligere trinn
Grunntilfelle
⇑
⇑
⇑
⇑
⇑
mlh@
ntnu.no
!300
-
dekomponering › induksjon
De andre er induktive: De følger av tidligere trinn
Induktive trinn
Grunntilfelle
⇑
⇑
⇑
⇑
⇑
mlh@
ntnu.no
!301
-
dekomponering › induksjon
Induktive trinn
Grunntilfelle
⇑
⇑
⇑
⇑
⇑
...
mlh@
ntnu.no
!302
-
dekomponering › induksjon
Grunntilfellet (evt. grunntilfellene) viser vi for seg
mlh@
ntnu.no
!303
-
dekomponering › induksjon
(Det er ofte svært enkelt)
mlh@
ntnu.no
!304
-
dekomponering › induksjon
Vil beskrive alle induktive trinn
mlh@
ntnu.no
!305
-
dekomponering › induksjon
Vil beskrive alle induktive trinn
P(a)
∀x P(x)
vilkårlig
Så vi ser på et vilkårlig et
mlh@
ntnu.no
!306
-
dekomponering › induksjon
P(a)
∀x P(x)
vilkårlig
vilkår
lig
mlh@
ntnu.no
!307
-
dekomponering › induksjonvilkår
lig
⇑
P
Q
Vil vise implikasjon
mlh@
ntnu.no
!308
-
dekomponering › induksjonvilkår
lig
⇑
P
Q
Vil vise implikasjon
P...
Q
P ⇒ Q⇢H
H
Anta forrige trinn
mlh@
ntnu.no
!309
-
dekomponering › induksjonvilkår
lig
⇑
IH
P...
Q
P ⇒ Q⇢H
H
P = Induksjonshypotesen
mlh@
ntnu.no
!310
-
dekomponering › induksjon
⇑
⇑
⇑
⇑
⇑
...
rett
Vi vet at grunntilfellet stemmer
mlh@
ntnu.no
!311
-
dekomponering › induksjon
⇑
⇑
⇑
⇑
⇑
...
rett
Vi vet at grunntilfellet stemmer
P ⇒ Q, P
Q
Dette «smitter» til alle de andre
mlh@
ntnu.no
!312
-
dekomponering › induksjon
...
rett
rett
rett
rett
rett
rett
Vi vet at grunntilfellet stemmer
P ⇒ Q, P
Q
Dette «smitter» til alle de andre
mlh@
ntnu.no
!313
-
dekomponering
Problem
instans svar
instans svar
Et problem er en relasjon mellom instanser og riktige svar
mlh@
ntnu.no
!314
-
dekomponering
Problem
instans svar
instans svarløsning
En algoritme finner ett riktig svar for hver instans
mlh@
ntnu.no
!315
-
dekomponering
Problem
instans svar
instans svarløsning
Algoritmen må løse alle instanser. Vi ser på en vilkårlig instans
mlh@
ntnu.no
!316
-
dekomponering
Problem
instans svarløsning
Vi vet ikke ennå hvordan vi løser instansen
mlh@
ntnu.no
!317
-
dekomponering
Problem
instans svarløsning
Vi spalter instansen i én eller flere delinstanser
mlh@
ntnu.no
-
dekomponering
Problem
delinstans
instans svarløsning
spal
ting
Vi spalter instansen i én eller flere delinstanser
mlh@
ntnu.no
-
dekomponering
Problem
delinstans
instans svarløsning
spal
ting
Vi antar at vi kan løse delinstansene
mlh@
ntnu.no
!320
-
dekomponering
Problem
delinstans delsvar
instans svarløsning
spal
ting
antatt delløsning
Vi antar at vi kan løse delinstansene
mlh@
ntnu.no
!321
-
dekomponering
Problem
delinstans delsvar
instans svarløsning
spal
ting
antatt delløsning
samlin
g
Vi samler så delsvar til et endelig svar
mlh@
ntnu.no
!322
-
dekomponering
Problem
delinstans delsvar
instans svarløsning
spal
ting
antatt delløsning
samlin
g
Om vi setter sammen disse får vi en løsning!
mlh@
ntnu.no
!323
-
dekomponering
Problem
delinstans delsvar
instans svarløsning
spal
ting
antatt delløsning
samlin
g
Hvorfor fungerer dette?
mlh@
ntnu.no
!324
-
dekomponering
Problem
delinstans delsvar
instans svarløsning
spal
ting
antatt delløsning
samlin
g
Det er samme prinsipp som før!
mlh@
ntnu.no
!325
-
dekomponering
Problem
delinstans delsvar
instans svarløsning
spal
ting
antatt delløsning
samlin
g
Vis grunntilfelle. Anta delløsning. Vis korrekt spalting/samling
mlh@
ntnu.no
!326
-
dekomponering
instans svar
Poenget er at det samme skjer på hvert nivå
mlh@
ntnu.no
!327
-
dekomponering
instans svar
Poenget er at det samme skjer på hvert nivå
mlh@
ntnu.no
!328
-
dekomponering
instans svar
Poenget er at det samme skjer på hvert nivå
mlh@
ntnu.no
!329
-
dekomponering
instans svar
Poenget er at det samme skjer på hvert nivå
mlh@
ntnu.no
!330
-
dekomponering
instans svar
Om grunntilfelle, spalting og samling er rett . . .
mlh@
ntnu.no
!331
-
dekomponering
instans svar
. . . så er alle svarene riktige
mlh@
ntnu.no
!332
-
dekomponering
instans svar
⇑
⇑
⇑
...
. . . så er alle svarene riktige
mlh@
ntnu.no
!333
-
Generell strategi
!334lgoritmer
Problemløsningsguide, 2019
Mag
nus
Lie
Het
land
-
Tolkning T
Definér problemet eller problemene du står overfor.Klargjør hva din oppgave er: Hva skal du gjøre medproblemene?
Vanligvis: Hva er relasjonen mellom input og output?
mlh@
ntnu.no
!335lgoritmer
Problemløsningsguide, 2019
Mag
nus
Lie
Het
land
-
Analyse A
Plukk problemet fra hverandre og plassér det i enstørre kontekst. List opp alt du har av relevantkunnskap og relevante verktøy.
Vanligvis: Del en vilkårlig instans i delinstanser.
mlh@
ntnu.no
!336lgoritmer
Problemløsningsguide, 2019
Mag
nus
Lie
Het
land
-
Syntese S
Koble sammen bitene og fyll inn det som mangler avtransformasjoner, mindre beregningstrinn og eventuellekorrekthetsbevis.
Vanligvis: Bygg løsning av hypotetiske delløsninger.
mlh@
ntnu.no
!337lgoritmer
Problemløsningsguide, 2019
Mag
nus
Lie
Het
land
-
Tolkning T
Hva er relasjonen mellom input og output?
Analyse A
Del en vilkårlig instans i delinstanser.
Syntese S
Bygg løsning av hypotetiske delløsninger.
mlh@
ntnu.no
!338
-
Tolkning T
Hva er relasjonen mellom input og output?
Analyse A
Del en vilkårlig instans i delinstanser.
Syntese S
Bygg løsning av hypotetiske delløsninger.
(Dette er ikke hele historien; mer i forelesning 7)
mlh@
ntnu.no
!339
-
L-problemet
!340
-
!341
Vi har et kvadratisk rutenett der sidene er toerpotenser, og der ett hjørne mangler. Vi ønsker å dekke dette «brettet» med L-formede brikker som består av 3 ruter.
-
!342
-
!343
-
!344
-
!345
-
!346
Hvordan kan vi spalte instansen i mindre instanser av samme problem?
-
Tolkning T
Hva er relasjonen mellom input og output?
Analyse A
Del en vilkårlig instans i delinstanser.
Syntese S
Bygg løsning av hypotetiske delløsninger.
mlh@
ntnu.no
!347
-
!348
-
!349
-
!350
-
!351
-
!352
-
Cover(A)
Dekk «nesten-kvadrat» A med L-brikker
dekomp › l-dekke
!353
-
Cover(A)
Manglende hjørne i samme retning som A
1 place middle L
dekomp › l-dekke
!354
-
Cover(A)1 place middle L
Grunntilfelle: Vi har løst denne delinstansen!
2 if A is 2 × 2
dekomp › l-dekke
!355
-
Cover(A)1 place middle L2 if A is 2 × 2
Grunntilfelle: Vi har løst denne delinstansen!
3 return
dekomp › l-dekke
!356
-
Cover(A)1 place middle L2 if A is 2 × 23 return
Spalt i fire delinstanser: Mindre kvadrater med manglende hjørne
4 for each quadrant Q
dekomp › l-dekke
!357
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q
Løs disse fire. Nå vet vi jo hvordan!
5 Cover(Q)
dekomp › l-dekke
!358
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!359
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!360
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!361
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!362
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!363
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!364
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!365
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!366
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › , › ,
dekomp › l-dekke
mlh@
ntnu.no
!367
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › , › ,
dekomp › l-dekke
mlh@
ntnu.no
!368
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › , › ,
dekomp › l-dekke
mlh@
ntnu.no
!369
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!370
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!371
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › , › ,
dekomp › l-dekke
mlh@
ntnu.no
!372
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › , › ,
dekomp › l-dekke
mlh@
ntnu.no
!373
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › , › ,
dekomp › l-dekke
mlh@
ntnu.no
!374
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!375
. . .
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!376
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!377
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!378
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!379
. . .
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = , › ,
dekomp › l-dekke
mlh@
ntnu.no
!380
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!381
. . .
-
Cover(A)1 place middle L2 if A is 2 × 23 return4 for each quadrant Q5 Cover(Q)
A, Q = ,
dekomp › l-dekke
mlh@
ntnu.no
!382
-
• Bryt ned problemet så det kan løses
trinn for trinn
• Fokusér på ett (representativt) trinn
!383
Kjerneprinsipp
-
Rekursiv dekomp.
!384
Induksjon over delproblemer
-
En rekursiv prosedyre kaller seg selv.
Evt.: Den er definert vha. seg selv.
Evt.: Den bruker seg selv som subrutine.
Om du er litt rusten på rekursjon:
Lurt å børste støv av kunnskapene!
!385
-
Rekursjon … og induksjon
• Del opp i mindre problemer
• Induktivt premiss: Anta at du kan løse
de mindre problemene
• Induksjonstrinn: Konstruer fullstendig
løsning ut fra del-løsningene
!386
Induktivt premiss kalles ofte «induksjonshypotese». Ordet «premiss» passer godt til algoritmedesign, siden det også kan bety «betingelse» – og vi beskriver her betingelser for at trinnet vårt skal bli korrekt.
Vi må også sørge for at ting terminerer – at ting blir rett når vi kommer til grunntilfellet (base case) i rekursjonen/induksjonen.
-
LøkkeinvarianterIterativ dekomponering
!387
-
Induksjon: Iterativ utgave
• Invariant: Egenskap som ikke endres
• Initialisering: Inv. er sann ved start
• Vedlikehold i hver iterasjon
• Induktivt premiss: Antatt sann først
• Induksjonstrinn: Vist sann etterpå
• Terminering: Vis at løkka stopper
!388
-
Nok en gang …
• Anta at du kan løse mindre problemer
• Bruk dette til å lage en løsning
• Invariant: «Det har gått bra så langt»
• Dette kan vi anta, og «dra med oss»
!389
Dette er selvfølgelig ikke den eneste varianten vi kan velge – men den enkleste til å begynne med.
-
I begge tilfeller
• Anta at du kan løse mindre instanser
• Bruk dette til å finne en løsning
!390
-
Vi kan tenke på det induktive premiss
som forarbeide. Arbeidet frem til ett
trinn blir forarbeide for det neste!
!391
-
!392
La oss bruke dekomponering på et par
eksempelproblemer …
-
Eksempel: Sum
!393
4:5+ + + +
-
Tolkning T
Hva er relasjonen mellom input og output?
Analyse A
Del en vilkårlig instans i delinstanser.
Syntese S
Bygg løsning av hypotetiske delløsninger.
mlh@
ntnu.no
!394
-
Rekursiv
!395
Sum
-
Dekomponering• Vi vil summere elementene i en tabell
• Rekursjon: Summér alle unntatt siste
• Grunntilfelle: Tom sum er null
• Induktivt premiss: Summen er rett
• Induksjonstrinn: Legg til siste element
!396
-
Sum(A, i)
Summen av A[1 . . i]
rekursiv sum
!397
-
Sum(A, i)
Grunntilfelle
1 if i < 1
rekursiv sum
!398
-
Sum(A, i)1 if i < 1
Summen av en tom sekvens
2 return 0
rekursiv sum
!399
-
Sum(A, i)1 if i < 12 return 0
Induksjonshypotese: Sum(A, i − 1) er summen av A[1 . . i − 1]
3 tmp = Sum(A, i − 1)
rekursiv sum
!400
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)
Induktivt trinn: Sørg for at Sum(A, i) er summen av A[1 . . i]
4 return tmp + A[i]
rekursiv sum
!401
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6i
tmp = −
rekursiv sum
mlh@
ntnu.no
!402
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6i
tmp = −
rekursiv sum
mlh@
ntnu.no
!403
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › −
rekursiv sum
mlh@
ntnu.no
!404
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › −
rekursiv sum
mlh@
ntnu.no
!405
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › −
rekursiv sum
mlh@
ntnu.no
!406
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › −
rekursiv sum
mlh@
ntnu.no
!407
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › −
rekursiv sum
mlh@
ntnu.no
!408
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › −
rekursiv sum
mlh@
ntnu.no
!409
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!410
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!411
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!412
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!413
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
tmp = − › − › − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!414
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
tmp = − › − › − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!415
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 0
5 1
2 2
4 3
7 4
1 5
3 6
tmp = − › − › − › − › − › − › −
rekursiv sum
mlh@
ntnu.no
!416
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › − › 0
rekursiv sum
mlh@
ntnu.no
!417
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 5
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › − › 0
rekursiv sum
mlh@
ntnu.no
!418
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › 5
rekursiv sum
mlh@
ntnu.no
!419
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 7
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › − › 5
rekursiv sum
mlh@
ntnu.no
!420
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › 7
rekursiv sum
mlh@
ntnu.no
!421
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 11
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › − › 7
rekursiv sum
mlh@
ntnu.no
!422
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › 11
rekursiv sum
mlh@
ntnu.no
!423
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 18
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › − › 11
rekursiv sum
mlh@
ntnu.no
!424
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › 18
rekursiv sum
mlh@
ntnu.no
!425
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 19
5 1
2 2
4 3
7 4
1 5
3 6
i
tmp = − › 18
rekursiv sum
mlh@
ntnu.no
!426
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
5 1
2 2
4 3
7 4
1 5
3 6i
tmp = 19
rekursiv sum
mlh@
ntnu.no
!427
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 22
5 1
2 2
4 3
7 4
1 5
3 6i
tmp = 19
rekursiv sum
mlh@
ntnu.no
!428
-
Iterativ
!429
Sum
-
Dekomponering• Invariant: Vi har summert rett så langt
• Initialisering: Tom sum er null
• Vedlikehold:
• Induktivt premiss: Summen er rett før iterasjonen
• Induksjonstrinn: Legg til neste element
• Terminering: Til slutt har vi summert alle
!430
-
Sum(A)
Vi vil summere elementene i A
iterativ sum
!431
-
Sum(A)
Initialisering: Sum så langt er 0
1 res = 0
iterativ sum
!432
-
Sum(A)1 res = 0
Induksjonshypotese: res er summen av A[1 . . j − 1]
2 for j = 1 to A.length
iterativ sum
!433
-
Sum(A)1 res = 02 for j = 1 to A.length
Induktivt trinn: Sørg for at res er summen av A[1 . . j]
3 res = res + A[j]
iterativ sum
!434
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]
Terminering: j = n, så res er summen av A[1 . . n]
4 return res
iterativ sum
!435
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
res = −
iterativ sum
mlh@
ntnu.no
!436
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
res = 0
iterativ sum
mlh@
ntnu.no
!437
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 0
iterativ sum
mlh@
ntnu.no
!438
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 5
iterativ sum
mlh@
ntnu.no
!439
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 5
iterativ sum
mlh@
ntnu.no
!440
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 7
iterativ sum
mlh@
ntnu.no
!441
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 7
iterativ sum
mlh@
ntnu.no
!442
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 11
iterativ sum
mlh@
ntnu.no
!443
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 11
iterativ sum
mlh@
ntnu.no
!444
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 18
iterativ sum
mlh@
ntnu.no
!445
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 18
iterativ sum
mlh@
ntnu.no
!446
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6
j
res = 19
iterativ sum
mlh@
ntnu.no
!447
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6j
res = 19
iterativ sum
mlh@
ntnu.no
!448
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
1 5
3 6j
res = 22
iterativ sum
mlh@
ntnu.no
!449
-
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
! 22
5 1
2 2
4 3
7 4
1 5
3 6j
res = 22
iterativ sum
mlh@
ntnu.no
!450
-
Et spørsmål om perspektiv
!451
Rek. vs. Iter.
Rekursjon og iterasjon er i all hovedsak ekvivalente ting. Her har vi en sammenligning av hvordan de to variantene oppfører seg; for begge to er det induktive premisset at den grå biten er summert allerede. I den rekursive varianten gjør vi det rekursivt før vi legger til det siste elementet. I den iterative varianten har vi allerede gjort det iterativt når vi skal legge til det siste elementet. Men … det er jo nesten samme sak, da.
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
!452
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4i
!453
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
i
!454
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
i
!455
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
i
!456
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
i
!457
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
i
!458
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
i
!459
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
5 1
2 2
4 3
7 4
!460
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 0
5 1
2 2
4 3
7 4
!461
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 0
tmp = − › − › − › − › −
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 0
5 1
2 2
4 3
7 4
j
!462
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › − › 0
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 5
5 1
2 2
4 3
7 4
i, j
!463
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 5
tmp = − › − › − › 0
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 5
5 1
2 2
4 3
7 4
i
j
!464
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › − › 5
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 7
5 1
2 2
4 3
7 4
i, j
!465
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 7
tmp = − › − › 5
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 7
5 1
2 2
4 3
7 4
i
j
!466
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = − › 7
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 11
5 1
2 2
4 3
7 4
i, j
!467
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 11
tmp = − › 7
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 11
5 1
2 2
4 3
7 4
i
j
!468
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
tmp = 11
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
res = 18
5 1
2 2
4 3
7 4i, j
!469
-
Sum(A, i)1 if i < 12 return 03 tmp = Sum(A, i − 1)4 return tmp + A[i]
! 18
tmp = 11
Sum(A)1 res = 02 for j = 1 to A.length3 res = res + A[j]4 return res
! 18
res = 18
5 1
2 2
4 3
7 4i, j
!470
-
SCIENTIFIC AND BUSINESS APPLICATIONS A High-Speed Sorting Procedure
D. L. SHELL, General Electric Company, Cincinnati, Ohio
There are a number of methods that have been used for
sorting purposes in various machine programs from time
to time. Most of these methods are reviewed by Harold
Seward [1] in his thesis. One tacit assumption runs through
his entire discussion of internal sorting procedures, namely,
that the in te rna l memory is relatively small. In other
words, the n u m b e r of items to be sorted is so large that
they cannot possibly all fit into the memory at one time.
The methods of internal sorting which he discusses are
sorting by: 1) Finding t h e smallest.
2) In te rchanging pairs. 3) Sifting. 4) Partial sor t . 5) Merging pairs. 6) Floating decimal sort.
The first four methods all require a time proportional
to n ~, where n is the number of items being sorted. The
time for the f i f th method is proportional to n(ln n). The
time for the s ix th method is proportional to n(ln r), where
r is the largest number to be used in a key.
As pointed o u t in Seward's paper, one would normally
choose either me thod five or six for a rapid internal sort,
especially if n is to be very large. The chief drawback of
these two me thods , however, is the fact that they require
twice as much storage as the other four methods.
The advent of very large high-speed random access
memories changes the picture relative to sorting some-
what. I t is 1now possible to have a very large number of
items to be so r ted in memory all at one time. I t is highly
desirable, therefore , to have a method with the speed
characteristics of the merging by pairs and the space
characteristics of sifting. If such a method were available
it would be possible to sort twice as many items at one
time in the m