forelesning 1 læringsmål - algoritmer og datastrukturerforelesning 1 vi starter med fagfeltets...

547
Forelesning 1 Vi starter med fagfeltets grunnleggende byggesteiner, og skisserer et rammeverk for å tilegne seg resten av stoet. Spesielt viktig er ideen bak induksjon og rekursjon: Vi trenger bare se på siste trinn , og kan anta at resten er på plass. Pensum Kap. 1. The role of algorithms in computing Kap. 2. Getting started: Innledning, 2.1–2.2 Kap. 3. Growth of functions: Innledning og 3.1 Læringsmål [A 1 ] Forstå bokas pseudokode - konvensjoner [A 2 ] Kjenne egenskapene til random- access machine -modellen (RAM) [A 3 ] Kunne definere problem , instans og problemstørrelse [A 4 ] Kunne definere asymptotisk notasjon , O, Ω, Θ, o og ω . [A 5 ] Kunne definere best-case , average- case og worst-case [A 6 ] Forstå løkkeinvarianter og induksjon [A 7 ] Forstå rekursiv dekomponering og induksjon over delproblemer [A 8 ] Forstå Insertion-Sort mlh @ ntnu.no 1

Upload: others

Post on 30-Jan-2021

9 views

Category:

Documents


0 download

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…

  • [email protected]

    !135

  • [email protected]

    !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