TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Personal 2005: ALGORITM-delen: • Kursledare, examinator, DALG föreläsningar: Jan Maluszynski epost: janma@ida.liu.se • Kursassistent, lektionsgrupp, labgrupper: Vilhelm Dahllöf epost: vilda@ida.liu.se • Assistent, lektionsgrupp, labgrupper: Magnus Wahlström epost: magwa@ida.liu.se • Assistent, lektionsgrupp, labgrupper: David Broman epost: davbr@ida.liu.se • Assistent, lektionsgrupp, labgrupper: Bengt Wersten epost: benwe332@student.liu.se • Kurssekreterare: Madeleine Häger epost: madha@ida.liu.se TDDB56 – DALGOPT-D Algorithms and optimization Jan Maluszynski, IDA, 2004 http://www.ida.liu.se/~TDDB56 janma @ ida.liu.se Subject: TDDB56 Jan Maluszynski - HT 2005 1.1 TDDB56 DALGOPT-D – Lecture 1 Planering: Litteratur: • ht1/2005: 12 Fö DALG, 6 Le DALG, 4 Labs DALG • ht2/2005: 1 Le DALG, 1 Lab DALG, 10 Fö OPT, 10 Le OPT, 3 Labs OPT Skriv TDDB56 i subjekt-raden! Se även hemsidan för aktuell info! Jan Maluszynski - HT 2005 TDDB56 DALGOPT-D – Lecture 1 Kursen är organiserad i två spår: • DALG (data structurer och algorithmer) – IDA • OPT (optimering) – MAI Kursen går över två perioder: OPTIMERINGS-delen: • Ansvarig för OPT-delen, OPT föreläsningar: Kaj Holmberg epost: kahol@mai.liu.se Kursassistent: Jenny Karlsson epost: jekar@mai.liu.se • Assistent: Reza Razmara epost: nigol@mai.liu.se 1.2 • DALG (data structurer och algorithmer) – Michael T. Goodrich, Roberto Tamassia: Data Structures and Algorithms in Java (3d edition), Wiley 2004 (alternativa böcker: se hemsidan) – Uppgifssamling till lektionerna (.pdf hemsidan) – Laborationskompendium (.pdf hemsidan) • OPT (optimering) – Kaj Holmberg: Kombinatorisk optimering med linjärprogrammering (kompendium 2005), Bokakademien – Laborationskompendium (.pdf hemsidan) Jan Maluszynski - HT 2005 1.3 Jan Maluszynski - HT 2005 1.4 1 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Planering – Examination... Planering – Föreläsningar... Det finns fyra (4) tentatillfällen 04/05: • • • • Kontrollskrivning efter p1 (frivillig) Ordinarie tentamen efter p2 Inkluderar kontrollOmtenta under våren skrivningen. Man behöver Omtenta i augusti inte göra om den delen! Kontrollskrivning Tentan består av två delar: • 70-80% av DALG-delen • Resterande 20-30% av DALG och all OPT Ordinarie tentamen Jan Maluszynski - HT 2005 Period 1 (prel): Period 2 (prel): 1. 1. Inledning, vad & varför, notationer, ”komplexitet”, RAM-modell... 2. Hur analysera algoritmer? 3. Enkla abstrakta datatyper: Listor, Stackar, Köer 4. Arrayer, Tabeller, Hashing, ...mer analystekniker. 5. Träd, Binära träd, trädvandring... 6. Trädsökning, balansering av träd 7. Skip-listor, prioritetsköer 8. Sortera och söka 9. Mera sortera och söka... 10. Datastrukturer, algoritmer för Grafer, egenskaper hos dessa... 11. Mera grafer... 12. Reserv! 1.5 Optimering - Intro, problemformulering, grafisk lösning. Linjärprogrammeringens grunder …Simplexmetoden ... Dualitet och känslighetsanalys Grafteori, billigaste-uppspännandeträdproblemet,handelsresandeproble met, kinesiska brevbärarprobemet 6. Billigaste-vägproblem, dynamisk programmering 7. Flöden i nätverk 8. Heltals problem 9. Problemkomplexitet 10. Heuristiker, approximativa algoritmer 2. 3. 4. 5. Jan Maluszynski - HT 2005 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Planering – Lektioner... Planering – Laborationer... Lektioner, ”räknestuga” handledd problemlösning... Period 1: • Period 1: • • • • 6 lektioner ALG Period 2: 1.6 Svarta lådor - analysera tidskomplexitet genom att provköra med olika indata Hashtabeller - implementeras i Java Binära sökträd - implementeras i Java Quicksort - implementeras i Java Period 2: • 1 lektion ALG • 10 lektioner OPT • • • Simplexmetoden: Övning och implementering. Flöden i nätverk: Modellering och lösning med programpaket Netlin. Lokaliseringsproblemet: Lösning med AMPL samt heuristik. Anmälning till laborationer på webben, se hemsidan! Jan Maluszynski - HT 2005 1.7 Jan Maluszynski - HT 2005 1.8 2 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 DALGOPT – till vad nytta? DALG – Viktiga principer: Abstract data types (ADTs) • machine-independent, high-level description • of data and operations on them e.g.: Dictionary, Stack, Queue, PriorityQueue, Set, ... Data structures: logical organization of computer memory for storing data Algorithms: high-level description of concrete operations on data structures (to be cont.) ADT implemented by suitable data structures and algorithms Program: implements algorithms and data structures in some programming language Jan Maluszynski - HT 2005 1.9 Jan Maluszynski - HT 2005 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 DALG – Viktiga principer... Exempel problem: Algorithm • Concrete but machine- and language-independent specification of all necessary steps (simple operations on data) to compute a solution (output) from a given problem instance (input) • Correctness – the computed output for any given input is as stated in the problem description • Algorithm analysis – time and space consumption, scalability, efficiency, worst case, best case, average case, amortized analysis • Algorithmic paradigms – commonly used problem solving strategies e.g., divide&conquer, dynamic programming, greedy strategy, ... Jan Maluszynski - HT 2005 1.11 1.10 Problemet: • Legal in-data är: – En lista med alla resultat på tentan – Element: (Namnet på en student, resultat) • Önskad utdata är ett värde ur mängden {”ja”, ”nej”} • Hur ser data ut som skall manipuleras, vilka operationer på data behövs? ADT • Hur representerar dessa data i en dator? datastruktur • Hur realiserar vi operationerna på en sådan datastruktur? Jan Maluszynski - HT 2005 1.12 3 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Exempel problemet: Beskriv data! Exempel (forts): Realisera & Analysera • Steg 1 – välj en lämplig Abstract Data Type objekt och operationer på dessa! ...i detta fall: ett ”dictionary”, dvs en uppslagstabell, men ”set” (mängd) fungerar också... • Domain: K: linjärt ordnad mängd av ”nycklar” (namnen) I: information (i vårt fall: bara ”ok” / ”inte ok”) • Ett dictionary D: mängd av element (nyckel,info) • Operationer på ett dictionary: LookUp(D,nyckel) returns info • ...detaljerna är dock dolda för användaren/programmeraren Jan Maluszynski - HT 2005 1.13 TDDB56 DALGOPT-D – Lecture 1 Sök lämplig implementering av ADT som datastruktur dvs organisera ditt användande av datorminne Implementera algoritmerna i din ADT! Olika algoritmer kan lösa samma problem! Hur jämföra dem? Algoritmer använder... • Tid • Minne Jan Maluszynski - HT 2005 1.14 TDDB56 DALGOPT-D – Lecture 1 Effektivitet Hur ”mäter” vi exekvering... Källa till förvirring • Använd en enkel modell av datorn och fel! • Glöm allt vad OS heter • All minnesåtkomst tar lika lång tid (random access) • Alla grundläggande operationer sker på konstant, känd tid (tidsenheten 1) • Kopiera mer än en minnesplats = kopiera många gånger! Analys av ”effektivitet”: • Maskinoberoende • Giltig för alla indata Vi jämför två algoritmer (och de datastrukturer de behöver) med avseende på: • Tidsåtgång (som funktion av indata) • Minnesåtgång (som funktion av indata) ...fokus på värstafallsbeteende! Jan Maluszynski - HT 2005 1.15 Jan Maluszynski - HT 2005 1.16 4 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Hur beskriva det som mäts? Pseudokod: ...data: • Som ett program som enbart består av de primitiva operationerna i vår RAM ...? (Random Access Machine) ...add, mult, move, jmp, Grundläggande datatyper: • integer, boolean, character... • ”Pekare” är minnesaddresser, Λ ”null”-pekare • Något lämpligt ”högnivåspråk” som ändå bevarar analyserbarheten? ... Pascal, C, Java Man brukar använda en förenklad notation som är nära Pascal/C Pseudokod [Goodrich/Tamassia 3.3] Jan Maluszynski - HT 2005 1.17 TDDB56 DALGOPT-D – Lecture 1 • Table/Array: en i minnet sammanhängande sekvens av data av samma typ. Deklaration: table<boolean>T [a..b] • Key: generellt begrepp för den del av ett dataelement som används vid sortering/sökning i en sekvens av sådana dataelement Jan Maluszynski - HT 2005 1.18 TDDB56 DALGOPT-D – Lecture 1 Pseudokod – operationer... Programmoduler • Tilldelning: x ← y x↔ y x y ← y x ...samtidig tilldelning • De vanliga ”strukturprimmitiverna”: if ... then ... / if ... then ... else ... for ... from ... to ... do while ... do • Kortslutande evaluering av boolska uttryck: X and Y and.... Jan Maluszynski - HT 2005 Sammansatta data: • Node (= post, record eller struct): en fix sammansättning av datatyper som ges ett eget namn... 1.19 Funktioner: function TableSearch (table T[1..n] , key K): integer integer x; {en lokal variabel} ... ... return x; {avslutar exekvering och returnerar värdet x} Anrop: X TableSearch(D, V) Procedures (functions not returning values) procedure Link (pointer P, Q)... Rekursion är tillåten, används flitigt Jan Maluszynski - HT 2005 1.20 5 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Exempel på användning av pseudokod: Alternativt – gör det med pekare... Implementering av ADT ”dictionary” med hjälp av en totalt ordnad (=sorterad) tabell... function TableSearch ( table<integer> T[1..n], key k ):boolean for i from 1 to n do if T [i] = k then return true if T [i] > k then return false return false ...”scope” definieras av indenteringen! Jan Maluszynski - HT 2005 1.21 Jan Maluszynski - HT 2005 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Målet med allt detta: Analysis of Algorithms... What to analyze ADT tells what to do: set of operations on data. To describe how to do that, we must • choose a data structure (representation in memory) • find algorithms that realize the ADT operations and describe them as functions on that data structure The same ADT can be implemented with different data structures. The data structure chosen may restrict the choice of the algorithms to be used for the ADT operations and thus the efficiency that can be achieved. We use pseudocode notation for precise and concise description of algorithms. Jan Maluszynski - HT 2005 1.22 1.23 [Goodrich/Tamassia 3.5, Lewis/Denenberg 2.1] • correctness • termination • efficiency -- yes! Time/space efficiency • • • • ...not in TDDB56! [Goodrich/Tamassia 3.4, Lewis/Denenberg 2.2] growth rate worst case, expected case, amortized analysis techniques for iterative algorithms analysis techniques for recursive algorithms Mathematical background [Goodrich/Tamassia 3.4] Jan Maluszynski - HT 2005 1.24 6 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Principles of Algorithm Analysis How to compare time/space efficiency? An algorithm should work for (input) data of any size. (Example TableSearch: input size is the size of the table.) Show the resource (time/memory) used as an increasing function of input size. Focus on the worst case performance. Ignore constant factors • analysis should be machine-independent; • more powerful computers introduce speed-up by constant factors. Study scalability / asymptotic behaviour for large problem sizes: • ignore lower-order terms, focus on dominating terms. Jan Maluszynski - HT 2005 1.25 TDDB56 DALGOPT-D – Lecture 1 • Study execution time (or memory usage) as a function of the size of input data: • When are they ”equally” effective? • When is one better than the other? Jan Maluszynski - HT 2005 1.26 TDDB56 DALGOPT-D – Lecture 1 Use asymptotic analysis! ”Order” notation • Consider two growing functions f , g from natural numbers to positive real numbers: • Quite nice to be able to say that (time or memory consumption of) f grows aproximately as (for) g ...i.e., except for constant factors they have a similar resource consumption behaviour • We often use simple well known functions as comparison functions.... example: f(n) grows aproximately as n2 f dominates g iff f(n) / g(n) increases without bounds for n ∞ that is, for a given constant factor c > 0, there is some threshold value such that • There are many such functions ”similar” to g, f ∈ O(g) ...f is in ”Ordo” of g ...belongs to the set of functions that does not grow faster than g Jan Maluszynski - HT 2005 Jan Maluszynski - HT 2005 1.27 1.28 7 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 Types of growth comparison: Types of growth comparison: • f , g growing functions from natural numbers to positive real numbers • f is (in) O(g) iff there exist c > 0, n0 ≥ 1 such that f(n) ≤ c g(n) for all n ≥ n0 Intuition: Apart from constant factors, f grows at most as quickly as g • f is (in) Ω(g) iff there exist c > 0, n0 ≥ 1 such that f(n) ≥ c g(n) for all n ≥ n0 Intuition: Apart from constant factors, f grows at least as quickly as g Ω() is the converse of O, i.e. f is in Ω(g) iff g is in O(f) ≥≤ • f is (in) Θ(g) iff f(n) ∈ O(g(n)) and g(n) ∈ O(f(n)) Ω(g) , Θ(g), O(g) ..?? Intuition: Apart from constant factors, f grows exactly as quickly as g Jan Maluszynski - HT 2005 1.29 TDDB56 DALGOPT-D – Lecture 1 Jan Maluszynski - HT 2005 1.30 TDDB56 DALGOPT-D – Lecture 1 …comparison with simple math function: Asymptotic analysis: Dominance Relation Revisited • Growing functions on natural numbers: f and g n log2n n n log2 n n log2 n 2n 2 1 2 2 4 4 16 4 16 64 256 6.5*104 64 6 64 384 4096 1.84*1019 there exists f is (in) o(g) iff there exist c > 0, n0 ≥ 1 such that f(n) ≤ c g(n) for all n ≥ n0 for any c f(n) < g(n) i.e., f is dominated by g Intuition: g grows strictly more quickly than f . 1.84* 1019 µsec = 2.14* 108 days = 5845 centuries Jan Maluszynski - HT 2005 1.31 • If f ∈ o(g) then f O(g) but not vice versa. Example: n ∈ o(2n) Jan Maluszynski - HT 2005 1.32 8 TDDB56 DALGOPT-D – Lecture 1 TDDB56 DALGOPT-D – Lecture 1 How to check growth rate? Examples: Prove or disprove... • Asuming algorithm f has an execution time behaviour T(f) as listed below, e.g., T(f) = (n+1)2 ... Jan Maluszynski - HT 2005 1.33 TDDB56 DALGOPT-D – Lecture 1 Jan Maluszynski - HT 2005 1.34 TDDB56 DALGOPT-D – Lecture 1 To check growth rate? Jan Maluszynski - HT 2005 1.35 Jan Maluszynski - HT 2005 1.36 9