02105 eksamensnoteruniguld.dk/wp-content/guld/dtu/algo1/algoritmer_og...3.4 lidt samlet om stakke og...
Post on 16-Oct-2020
4 Views
Preview:
TRANSCRIPT
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
top related