Datastrukturer og algoritmer

Slides:



Advertisements
Lignende præsentationer
HUNDE SPEED km h 34,4 HUNDE SPEED km h 34,1 HUNDE SPEED km h 32,8 HUNDE SPEED km h 31,9 HUNDE SPEED km h 31,8 HUNDE SPEED km h 30,9.
Advertisements

Atomer Et programmeret forløb. En måde at lære på.
Tre klare mål 1.Folkeskolen skal udfordre alle elever, så de bliver så dygtige, de kan –Mindst 80 pct. af eleverne skal være gode til at læse og regne.
NemID og Fællesskema 2014 v/Signe Hansen Blegmand
Funktioner Grundbegreber.
Torbenfeldvej Vallensbæk strand Tlf.: – – dagligt brug af vores hjemmeside •AGEN LYS har en stor og omfattende.
1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Trivselsundersøgelse og ledelsesevaluering
1 Rekursion og algoritmedesign. 2 Rekursion Rekursiv definition af X: X defineres i termer af sig selv. Rekursion er nyttig, når en generel version af.
Symbolsk maskinsprog.
Sammenligning af to grupper – kapitel 7
1 Går fra at vil maksimere dækning til at minimere omkostning Det kender vi fra den anden bog Omkostningen er afstanden gange antal enheder der skal transporteres.
1 Effektiv forrentning Kjeld Tyllesen PEØ, CBS Erhvervsøkonomi / Managerial Economics Kjeld Tyllesen, PEØ, CBS.
Statistik.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Økonometri 1: Specifikation og dataproblemer1 Økonometri 1 Specifikation, og dataproblemer 4. november 2005.
Representations for Path Finding in Planar Environments.
Kursus om borger.dk og brugen af digital signatur
Opslagsfelter (Access, del 6). RHS – Informationsteknologi 2 Udgangspunkt Vi er ofte i den situation, at valg af en type for et felt ikke begrænser vores.
Datastruktur & Algoritmik1 Datastruktur & Algoritmik 99 Kim Guldstrand Larsen.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
Søgning & sortering Intro søgning Lineær søgning Binær søgning
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
1 Projektforslag på modul 2 ved Keld Helsgaun. 2 Fagligt indhold Projekt- og kursusarbejdet skal give de studerende indsigt i følgende emnekredse: Gå.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
Kvalitet i almindelighed og i relation til softwareudvikling.
Induktion og rekursion
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Trivselsundersøgelse og ledelsesevaluering Anæstesiologisk Afdeling Flere ledere
1 Algoritme til at løse knude P-center problemet Algoritmen brugte set covering problemet Virker derfor kun til knude problemer Vi vil alligevel bruge.
1 Datalogi C Datastrukturer og algoritmer ved Keld Helsgaun.
FEN Prædikater/Seminar 11 Prædikatslogik eller Kvantificerede udtryk Prædikater udvider propositionslogikken på to måder: –Vi tillader variable.
Gymnasiet (Stx)
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Anvendelser I Leg og spil.
Hvordan kan man læse dette regnestykke? -7 – 3
1 Vi ser nu på en general graf Men antager at alle afstande er heltallige (Det er ikke så restriktivt) Algoritmen leder efter den mindst mulige dækningsdistance.
1 Algoritmik ved Keld Helsgaun. 2 Plan Algoritmebegrebet et simpelt eksempel Et eksempel på algoritmedesign.
Mød Aalborg Universitet
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
Grunde til at jeg elsker dig
1 Algoritmik ved Keld Helsgaun. 2 Plan Hvad er algoritmik? Et eksempel Kursusbeskrivelse formål, indhold og form.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
Lektion 7 Læsestof: Kopier fra Caranno
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
1 Design, analyse og verifikation. 2 Algoritmebegrebet Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær.
Fundamentale datastrukturer
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
Design, verifikation og analyse
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
Opslagsfelter (Access, del 6). RHS – Informationsteknologi – Udgangspunkt Vi er ofte i den situation, at valg af en type for et felt ikke begrænser.
Slide Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 15 Algorithms for Query Processing and Optimization.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
1 Kursusafslutning. 2 Plan Opgaveseminar Kursusevaluering.
DIEB4.1 Kursusgang 4 Oversigt: Sidste kursusgang Opgaver Aktivitet 2: Generer design (fortsat) Design af interaktionselementer.
1 Kap. 4, Jordens Tyngdefelt = Torge, 2001, Kap. 3. Tyngdekraftens retning og størrelse g (m/s 2 ) Acceleration Tyngdepotentialet (W): evene til at udføre.
1 Algoritmedesign med internetanvendelser ved Keld Helsgaun.
Økonometri 1: Specifikation og dataproblemer1 Økonometri 1 Specifikation, og dataproblemer 9. november 2004.
Kapitel 5 Lineære DB-modeller
Økonometri 1: Specifikation og dataproblemer1 Økonometri 1 Specifikation og dataproblemer 2. november 2004.
Økonometri 1: F151 Økonometri 1 Specifikation og dataproblemer 10. november 2006.
Grundlæggende programmering Forår 2002
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
Præsentationens transcript:

Datastrukturer og algoritmer ved Keld Helsgaun

Plan Algoritmebegrebet Kursusbeskrivelse

Hvad er en algoritme? En algoritme er en fremgangsmåde til løsning af et problem Bemærk. Det er ikke et krav, at en algoritme skal kunne udføres på en datamat! Dette kursus omhandler dog mest algoritmer af denne type. Inddata Uddata Algoritme

Tre vigtige områder: • Design • Analyse • Verifikation Design: Hvorledes konstrueres en algoritme? Analyse: Hvor “ressourcekrævende” er en algoritme? Verifikation: Er en algoritme korrekt?

Hvorfor studere algoritmer? (1) For at kunne vælge kvalificeret imellem eksisterende algoritmer (2) For at kunne tilpasse eksisterende algoritmer til givne formål (3) For at kunne udvikle nye algoritmer

Databegrebet Data: En formaliseret repræsentation af kendsgerninger eller forestillinger på en sådan form, at den kan kommunikeres eller omformes ved en eller anden proces. Datalogi: Læren om data, deres væsen og brug. Datastruktur: Den sammenhæng, der er mellem en række sammenhørende dataelementer.

Informationsbegrebet Det betydningsindhold, et menneske tillægger data ud fra en vedtagen konvention. Informationsteknologi: Enhver form for teknologi, der anvendes til opsamling, behandling, lagring og formidling af data og information.

Hvad forstås ved en “god” algoritme? (1) En algoritme, der løser problemet korrekt (2) En algoritme, der er (tilstrækkelig) hurtig (3) En algoritme, der kræver et (tilstrækkeligt) lille lagerforbrug (4) En algoritme, der er simpel De sidste tre krav kan ofte være i konflikt med hinanden.

Betydningen af effektive algoritmer Hvorfor bekymre sig om effektivitet med dagens hurtige computere? Teknologi forbedrer hastigheden med en konstant faktor. Med godt algoritmedesign opnås ofte langt større hastighedsforbedringer. En dårlig algoritme på en supercomputer kan være langsommere end en god algoritme på en kugleramme. Kraftigere computere medfører ønske om at løse større problemer Antag at en algoritmes tidsforbrug er proportional med kvadratet på problemet størrelse (tid = k*n2, hvor k er en konstant, og n er problemstørrelsen). Med anskaffelsen af en ny computer med 10 gange så meget lager, kan der løses problemer, der er 10 gange så store. Men hvis den nye computer “kun” er 10 gange hurtigere, vil det tage 10 gange så lang tid at udføre algoritmen.

Algoritmebegrebet Historie: Ordet “algoritme” er oprindelig afledt af “algorisme”: (i middelalderen) at udføre aritmetik med arabertal, i modsætning til “abacisme”: at udføre aritmetik med kugleramme. Algorisme er igen afledt at navnet på en persisk forfatter af matematiklærebøger, Abu Ja´far Mohammed ibn Mûsâ al-Khowârizmî (cirka år 825).

Euklids algoritme En af de første ikke-trivielle algoritmer blev designet af Euklid (græsk matematiker cirka 300 år f. Kr.) Problem: Find den største fælles divisor for to givne positive heltal. Den største fælles divisor for to positive heltal er det største heltal, der “går op” i begge tal (giver resten 0 ved division). Givet Løsning 24 og 32 8 og 12 7 og 8 8 4 1

Lad gcd(u,v) betegne største fælles divisor for u og v Lad gcd(u,v) betegne største fælles divisor for u og v. Problemet kan da formuleres således: Givet to heltal u ≥ 1 og v ≥ 1. Bestem gcd(u,v). gcd betegner greatest common divisor Løsning af problemet er bl.a. relevant ved forkortelse af brøker: 24 = 24/gcd(24,32) = 24/8 = 3 32 32/gcd(24,32) 32/8 4

To simple algoritmer En simpel algoritme er følgende (skrevet i Java): for (d = 1; d <= u; d++) if (u % d == 0 && v % d == 0) gcd = d; En anden simpel algoritme er: d = u < v ? u : v; while (u % d != 0 || v % d != 0) d--; gcd = d; Algoritmernes ineffektivitet er tydelig for store værdier af u og v, f.eks. 461952 og 116298 (hvor gcd er lig med 18).

Euklids algoritme Euklid benyttede følgende observation til at opnå en mere effektiv algoritme: Hvis u ≥ v, og d går op i både u og v, så går d også op i differensen imellem u og v. Hvis u > v, så gælder gcd(u,v) = gcd(u-v,v). Hvis u = v, så gælder gcd(u,v) = v [ = gcd(0,v) ] Hvis u < v, så udnyttes, at gcd(u,v) = gcd(v,u) [ u og v ombyttes ]

Euklids algoritme (version 1) while (u > 0) { if (u < v) { int t = u; u = v; v = t; } u = u - v; } gcd = v; Eksempel på kørsel: } u = 461952, v = 18 u = 461934, v = 18 u = 461916, v = 18 . u = 18 , v = 18 u = 0 , v = 18 461952/18 = 25664 iterationer

Euklids algoritme (version 2) Kan effektiviteten forbedres? Ja. Algoritmen trækker v fra u, indtil u bliver mindre end v. Men det er præcis det samme som at dividere u med v, og så sætte u lig med resten. Hvis u > v, så er gcd(u,v) = gcd(u%v,v). while (u > 0) { if (u < v) { int t = u; u = v; v = t; } u = u % v; } gcd = v; Antallet af iterationer ved kørsel af eksemplet fra før reduceres til 1.

Udførelse af version 2 } u = 461952, v = 116298 u = 113058, v = 116298 u = 3240, v = 113058 u = 2898, v = 3240 u = 342, v = 2898 u = 162, v = 342 u = 18, v = 162 u = 0, v = 18 7 iterationer Algoritmen er meget effektiv, selv for store værdier af u og v. Hvor effektiv kan bestemmes ved algoritmeanalyse. antal iterationer ≤ 4.8 log10N - 0.32, gennemsnitligt antal iterationer ≈ 1.94 log10N

En alternativ algoritme En velkendt metode til forkortelse af brøker: Ethvert positivt heltal kan udtrykkes som et produkt af primfaktorer u = 2u2 . 3u3 . 5u5 . 7u7 . 11u11 ... = ∏ pup p primtal Lad u og v være to heltal. Så kan gcd(u,v) bestemmes som ∏ pmin(up ,vp) . p primtal Eksempel: u = 4400 = 24 . 52 . 70 . 111, v =7000 = 23 . 53 . 71 . 110 gcd(u,v) = 23 . 52 . 70 . 110 = 23 . 52 = 8 . 25 = 200

Ulempe ved den alternative algoritme Der kendes i dag ingen effektiv metode til at opløse et tal i dets primfaktorer. Dette faktum udnyttes i dag i mange krypteringsalgoritmer (algoritmer til hemmeligholdelse af meddelelser).

Algoritmebegrebet (præcisering) Ved en algoritme forstås en fremgangsmåde til løsning af et problem. Udover blot at være en sekvens af operationer skal en algoritme have følgende 4 egenskaber: (1) Endelighed. Algoritmen skal terminere efter et endeligt antal skridt. (2) Entydighed. Hvert skridt skal være defineret præcist og utvetydigt. (3) Effektfuldhed. Hvert skridt skal kunne udføres på endelig tid. (4) Korrekthed. Udførelse af algoritmen skal resultere i uddata, der opfylder en specificeret relation med de givne inddata.

Euklids algoritme er en algoritme En kogebogsopskrift er i mange tilfælde ikke en algoritme [ udsagn som “tilsæt en smule salt”, “rør forsigtigt” er ikke tilstrækkeligt præcise]

Matematisk definition af begrebet “algoritme” En beregningsmetode er et tupel (Q, I, Ω, f), hvor Q er en mængde, der omfatter mængderne I og Ω, og f er en funktion fra Q på sig selv. Endvidere skal f(q) være lig med q for alle q i Ω. Q repræsenterer mængden af beregningstilstande, I mængden af inddatatilstande, Ω mængden af uddatatilstande og f den beregningsmæssige regel. Hvert element x i I definerer en beregningssekvens x0 = x, xk+1 = f(xk) for k ≥ 0. En beregningssekvens siges at terminere i k skridt, hvis k er det mindste heltal, for hvilket xk tilhører Ω. En algoritme er en beregningsmetode, der for enhver beregningssekvens terminerer i et endeligt antal skridt.

Notation for algoritmer (1) Natursproglig beskrivelse E1. [Find rest] Divider u med v, og lad r betegne resten. E2. [Er den nul?] Hvis r = 0, så afslut algoritmen med v som svar. E3. [Ombyt] Sæt u lig med v, og v lig med r. Gå til trin E1. (2) Rutediagram Start r = u % v r = 0 ? u = v v = r Stop nej ja

eller ved brug af rekursion (3) Programmeringssproglig beskrivelse, f.eks. i Java (eller en tilpasset delmængde heraf) while (true) { int r = u % v; if (r == 0) { gcd = v; break; } u = v; v = r; } eller while ((r = u % v) != 0) { u = v; v = r; } gcd = v; eller ved brug af rekursion int gcd(int u, int v) { return v == 0 ? u : gcd(v, u % v); }

Kursusbeskrivelse Formål Mål Indhold Form

Formål Formålet er • at opøve evnen til at konstruere algoritmer • at give viden om centrale algoritmer og datastrukturer • at give kendskab til analyse og verifikation af algoritmer Hovedvægten lægges på de to første punkter.

Mål Målet er, at den studerende • kender til de vigtigste principper for algoritmekon- struktion og er i stand til at anvende dem i praksis • kender til elementære datastrukturer og deres anvendelse i forbindelse med implementering af abstrakte datatyper • kender til en række vigtige algoritmer inden for datalogien, bl.a. algoritmer til sortering og søgning • i simple tilfælde kan bestemme kompleksiteten af en forelagt algoritme og udtrykke den ved O-notation • har et rudimentært kendskab til algoritmeverifikation

Indhold (1) Algoritmeanalyse (2) Datastrukturer I (3) Rekursion (4) Sortering (5) Anvendelser I (6) Anvendelser II (7) Anvendelser III (8) Datastrukturer II (9) Datastrukturer III (10) Datastrukturer IV spil, syntaksanalyse, filkomprimering, simulering, grafer

Form Forelæsningerne gennemgår pensum i lærebogen, men ofte på en anderledes måde. Forelæsningerne supplerer lærebogen. Der lægges vægt på datalogiens kreative sider, således bl.a. på designprincipper for algoritmer. Øvelserne udgør et absolut nødvendigt led i kurset (jvf. man kan ikke blive musiker ved kun at læse musikteori). Arbejdsbelastning: 12 timer/uge

Øvelserne varetages af Kim Haagensen Mads Hjorth mandage 1300-1530 og tirsdage 930-1200, teorirummet i 42.2 Øvelsesopgaver Multiple choice tests Spørgsmål til stoffet

Lærebog Data Structures & Problem Solving Using Java Mark Allen Weiss, Addison-Wesley, 1998. Fordele: gode beskrivelser på letforståeligt engelsk vægt på dataabstraktion algoritmerne er omsat til udførbar kode

Relation til det tidligere kursus “Algoritmik” Java-baseret lærebog Mere fokus på datastrukturer Mere objektorienteret Mere anvendelsesrorienteret

Deltagerforudsætninger Kurset Datalogi A (struktureret programmering) på den naturvidenskabelige basisuddannelse eller tilsvarende. Kendskab til datalogiske metoder og praktiske erfaringer med datalogisk projektarbejde, af et minimumsomfang svarende til et halvt semesters arbejde. Det er en fordel at have et basalt kendskab til objektorienteret programmering i Java. For deltagere uden et sådant kendskab etableres i kursets start et kort undervisningsforløb baseret på lærebogens kapitel 2-4.

Forløbet i kursets start Mandag den 4. september (930-1000): Algoritmebegrebet ved Keld H. Mandag den 4. september (1015-1530) og tirsdag den 5. september (930-1200): OOP (Weiss, Kapitel 1-3) ved Kim og Mads Mandag den 11. september (930-1200): Algoritmeanalyse (Weiss, Kapitel 5) ved Keld H. Mandag den 11. september (1300-1530) og tirsdag den 12. september (930-1200): OOP (Weiss, Kapitel 4) ved Kim og Mads

2 timers skriftlig prøve Eksamen 2 timers skriftlig prøve

Ugeseddel 0 29. august - 11. september • OOP-forløbet: Til mandag den 4. september læses kapitel 2 og 3 i lærebogen Til mandag den 11. september læses kapitel 4 Læs kapitel 5 i lærebogen (side107-141) • Løs følgende opgave 0. Konstruer en største-fælles-divisor-algoritme, gcd, baseret på følgende observationer: gcd(a, b) = a, hvis b = 0, gcd(a, b) = gcd(b, a % b), hvis b > 0.