45
02105 Eksamensnoter Lasse Herskind S153746 12. maj 2017 Indhold 1 Sortering 3 2 Analyse af algoritme 4 2.1 Køretid .......................................... 4 2.2 Pladsforbrug ....................................... 5 2.3 Asymptotisk tid ..................................... 5 2.3.1 O-notation, øvre grænse ............................. 5 2.3.2 Ω-notation, nedre grænse ............................ 5 2.3.3 Θ-notation .................................... 5 2.3.4 Lidt regler / nyttige egenskaber ......................... 6 2.3.5 Eksperimentiel analyse .............................. 6 3 Datastrukture 7 3.1 Stak ............................................ 7 3.2 ............................................. 7 3.3 Hægtede lister ...................................... 8 3.4 Lidt samlet om stakke og køer .............................. 8 4 Prioritetskøer, træer og hobe 9 4.1 Prioritetskø ........................................ 9 4.2 Rodfæstede træer ..................................... 10 4.3 Binære træer ....................................... 10 4.4 Hob ............................................ 11 4.4.1 Algoritmer p˚ a hobe ............................... 12 4.4.2 Hobsortering ................................... 13 5 Uorienteree grafer 13 5.1 Repræsentation ...................................... 14 5.2 Dybdeførst ........................................ 16 5.2.1 Sammenhængskomponenter ........................... 16 5.3 Bredderførst ........................................ 17 5.4 Todelte grafer ....................................... 17 5.5 Grafalgoritmer ...................................... 18 6 Orienterede grafer 18 6.1 Repræsentation ...................................... 19 6.2 DAG ............................................ 20 6.3 Topologisk sortering ................................... 21 6.4 Stærke sammenhængskomponenter ........................... 22 6.5 Implicit graf ........................................ 23 1

02105 Eksamensnoter - uniguld.dkuniguld.dk/wp-content/guld/DTU/Algo1//algoritmer_og_datastrukturer... · 1 Sortering Husk: Flettesortering sortere to sorterede lister. Derudover er

Embed Size (px)

Citation preview

02105

Eksamensnoter

Lasse HerskindS153746

12. maj 2017

Indhold

1 Sortering 3

2 Analyse af algoritme 42.1 Køretid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Pladsforbrug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3 Asymptotisk tid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3.1 O-notation, øvre grænse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3.2 Ω-notation, nedre grænse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3.3 Θ-notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3.4 Lidt regler / nyttige egenskaber . . . . . . . . . . . . . . . . . . . . . . . . . 62.3.5 Eksperimentiel analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Datastrukture 73.1 Stak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 Kø . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Hægtede lister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.4 Lidt samlet om stakke og køer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Prioritetskøer, træer og hobe 94.1 Prioritetskø . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.2 Rodfæstede træer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.3 Binære træer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.4 Hob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4.4.1 Algoritmer pa hobe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.4.2 Hobsortering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5 Uorienteree grafer 135.1 Repræsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145.2 Dybdeførst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.2.1 Sammenhængskomponenter . . . . . . . . . . . . . . . . . . . . . . . . . . . 165.3 Bredderførst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175.4 Todelte grafer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175.5 Grafalgoritmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6 Orienterede grafer 186.1 Repræsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196.2 DAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206.3 Topologisk sortering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216.4 Stærke sammenhængskomponenter . . . . . . . . . . . . . . . . . . . . . . . . . . . 226.5 Implicit graf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1

7 Foren og find 237.1 Hurtig find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247.2 Hurtig forening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247.3 Vægtet forening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257.4 Overblik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257.5 Stikompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267.6 Overblik 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267.7 Dynamiske sammenhængskomponenter . . . . . . . . . . . . . . . . . . . . . . . . . 27

8 Mindste udspændende træ 278.1 Repræsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288.2 Snitegenskaber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288.3 Kredsegenskaber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298.4 Prims algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298.5 Kruskals algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

9 Korteste veje 329.1 Dijkstras algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339.2 Korteste veje pa DAG’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

10 Hashing 3510.1 Hægtet hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3510.2 Uniform hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3610.3 Overblik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3610.4 Hashfunktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3710.5 Lineær probering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

11 Binære søgetræer 3811.1 Nærmeste naboer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3911.2 Indsættelse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4111.3 Predecessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4111.4 Sletning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4111.5 Algoritmer pa træer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

11.5.1 Tip til rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4211.5.2 Størrelse af træ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.5.3 Længste sti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.5.4 Korteste sti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.5.5 Inorder trægennemløb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.5.6 Preorder trægennemløb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4411.5.7 Postorder trægennemløb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2

1 Sortering

Husk:Flettesortering sortere to sorterede lister. Derudover er køretiden Θ(n ∗ log(n))

1 p r i v a t e s t a t i c i n t [ ] s o r t ( i n t [ ] numbers ) 2 i f ( numbers . l ength <= 1) 3 return numbers ;4 5 i n t m = numbers . l ength / 2 ;6 i n t [ ] A1 = Arrays . copyOfRange ( numbers , 0 , m) ;

3

7 i n t [ ] A2 = Arrays . copyOfRange ( numbers , m, numbers . l ength ) ;8 A1 = s o r t (A1 ) ;9 A2 = s o r t (A2 ) ;

10 re turn merge (A1 , A2 ) ;11 1213 p r i v a t e s t a t i c i n t [ ] merge ( i n t [ ] A1 , i n t [ ] A2) 14 i n t [ ] numbers2 = new i n t [ A2 . l ength + A1 . l ength ] ;15 i n t k = 0 , l = 0 ;16 f o r ( i n t a = 0 ; a < A1 . l ength + A2 . l ength ; a++) 17 i f ( k == A1 . l ength ) 18 numbers2 [ k + l ] = A2 [ l ] ;19 l ++;20 e l s e i f ( l == A2 . l ength ) 21 numbers2 [ k + l ] = A1 [ k ] ;22 k++;23 e l s e i f (A1 [ k ] < A2 [ l ] ) 24 numbers2 [ k + l ] = A1 [ k ] ;25 k++;26 e l s e 27 numbers2 [ k + l ] = A2 [ l ] ;28 l ++;29 30 31 return numbers2 ;32

2 Analyse af algoritme

2.1 Køretid

4

2.2 Pladsforbrug

2.3 Asymptotisk tid

For alle typer er følgende gældende, vi opskriver dog blot med O

• O(g(n)) er en mængde af funktioner

• Opfat = som in

• f(n) = O(n2) er fint, men ikke O(n2) = f(n)

2.3.1 O-notation, øvre grænse

Definition:f(n) = O(g(n)) hvis f(n) ≤ c · g(n) for store nTo hurtige:

• 5 ∗ n2 = O(n2)

• 5 ∗ n2 = O(n3)

2.3.2 Ω-notation, nedre grænse

Definition:f(n) = Ω(g(n)) hvis f(n) ≥ c · g(n) for store nTo hurtige

• 5 ∗ n2 = Θ(n2)

• 5 ∗ n3 = Θ(n2)

2.3.3 Θ-notation

Definition:f(n) = Θ(g(n)) hvis f(n) er bade O(g(n)) og Ω(g(n))To hurtige

• 5 ∗ n2 = Θ(n2)

• 5 ∗ n2 + 7n = Θ(n2)

5

2.3.4 Lidt regler / nyttige egenskaber

2.3.5 Eksperimentiel analyse

6

3 Datastrukture

3.1 Stak

Alle operationer foregar i konstant tid Θ(1)

3.2 Kø

Alle operationer foregar i konstant tid Θ(1)

7

3.3 Hægtede lister

Search er i lineær tid, insert og delete i konstant tid. Pladsen er lineær.

3.4 Lidt samlet om stakke og køer

8

4 Prioritetskøer, træer og hobe

4.1 Prioritetskø

9

4.2 Rodfæstede træer

4.3 Binære træer

10

4.4 Hob

11

4.4.1 Algoritmer pa hobe

12

4.4.2 Hobsortering

5 Uorienteree grafer

13

5.1 Repræsentation

14

15

5.2 Dybdeførst

5.2.1 Sammenhængskomponenter

16

5.3 Bredderførst

5.4 Todelte grafer

For at undersøge om noget er en todelt graf kan du bruge BFS og sa tjekke om nogen af knudernei samme lag er forbundet med hinanden, hvis ikke er det en todelt graf.

17

5.5 Grafalgoritmer

6 Orienterede grafer

18

6.1 Repræsentation

19

6.2 DAG

Husk!For at vurdere om noget er en DAG kan du bruge DFS eller BFS. Hvis du rammer en knude somallerede er markeret, men ikke er den forgænger, sa vil der være en kreds.

20

6.3 Topologisk sortering

21

6.4 Stærke sammenhængskomponenter

Husk!At hver knude ogsa er et stærkt sammenhængskomponent med sig selv

22

6.5 Implicit graf

7 Foren og find

23

7.1 Hurtig find

7.2 Hurtig forening

24

7.3 Vægtet forening

7.4 Overblik

25

7.5 Stikompression

7.6 Overblik 2

26

7.7 Dynamiske sammenhængskomponenter

8 Mindste udspændende træ

27

8.1 Repræsentation

8.2 Snitegenskaber

28

8.3 Kredsegenskaber

8.4 Prims algoritme

29

30

8.5 Kruskals algoritme

31

9 Korteste veje

32

9.1 Dijkstras algoritme

33

34

9.2 Korteste veje pa DAG’s

10 Hashing

10.1 Hægtet hashing

35

10.2 Uniform hashing

10.3 Overblik

36

10.4 Hashfunktioner

10.5 Lineær probering

37

11 Binære søgetræer

38

11.1 Nærmeste naboer

39

40

11.2 Indsættelse

11.3 Predecessor

11.4 Sletning

Tid: O(h)

41

11.5 Algoritmer pa træer

11.5.1 Tip til rekursion

42

11.5.2 Størrelse af træ

11.5.3 Længste sti

1 LongestRoute ( root x )2 i f ( x == n u l l )3 return −1;4 5 return Math . max( LongestRoute ( x . l e f t ) , LongestRoute ( x . r i g h t ))+1;6

11.5.4 Korteste sti

1 Kor t e s t eS t i ( root x )2 i f ( x == n u l l )3 return −1;4 5 return Math . min ( Kor t e s t eS t i ( x . l e f t ) , Kor t e s t eS t i ( x . r i g h t ))+1;6

11.5.5 Inorder trægennemløb

Under

43

11.5.6 Preorder trægennemløb

Venstre

11.5.7 Postorder trægennemløb

Højre

44

45