Post on 30-Jan-2021
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…
mlh@ntnu.no
!135
mlh@ntnu.no
!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
mlh@
ntnu.no
!140
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
mlh@
ntnu.no
!141
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
mlh@
ntnu.no
!142
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
mlh@
ntnu.no
!143
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
mlh@
ntnu.no
!144
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
mlh@
ntnu.no
!145
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
mlh@
ntnu.no
!146
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
Hunder
mlh@
ntnu.no
!147
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
mlh@
ntnu.no
!148
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
mlh@
ntnu.no
!149
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
mlh@
ntnu.no
!150
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
Verdenskriger
Vannklosett
Skriftspråk
Hunder
Mennesker
Siste istid
mlh@
ntnu.no
!151
100
101
102
103
104
105
106
107
108
109
1010
Rakettlanding
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
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
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
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
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
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
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