02105 Eksamensnoter -...
Transcript of 02105 Eksamensnoter -...
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
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
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
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.4 Stærke sammenhængskomponenter
Husk!At hver knude ogsa er et stærkt sammenhængskomponent med sig selv
22
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