Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

1 Algoritmik ved Keld Helsgaun. 2 Plan Hvad er algoritmik? Et eksempel Kursusbeskrivelse formål, indhold og form.

Lignende præsentationer


Præsentationer af emnet: "1 Algoritmik ved Keld Helsgaun. 2 Plan Hvad er algoritmik? Et eksempel Kursusbeskrivelse formål, indhold og form."— Præsentationens transcript:

1 1 Algoritmik ved Keld Helsgaun

2 2 Plan Hvad er algoritmik? Et eksempel Kursusbeskrivelse formål, indhold og form

3 3 Algoritmik er studiet af algoritmer Hvad er algoritmik? En algoritme er en metode til at løse en opgave 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

4 4 Tre vigtige områder inden for algoritmik er Design Analyse Verifikation Design: Hvorledes konstrueres en algoritme? Analyse: Hvor “effektiv” er en algoritme? Verifikation: Er en algoritme korrekt?

5 5 Algoritmik som studium er gammelt nok til at være veletableret ungt nok til at mange nyopdagelser venter Hvorfor studere algoritmer? (1) For at kunne vælge kvalificeret imellem eksisterende algoritmer (vidensaspekt) (2) For at kunne udvikle nye algoritmer (kreativitetsaspekt)

6 6 Problem: Til præsidentvalget i Frankrig har cirka 20 millioner vælgere afgivet deres stemme på et antal præsidentkandidater. Afgør om en af kandidaterne har opnået mere end halvdelen af stemmerne, og angiv i givet fald, hvem der er tale om (”vinderen”). Et eksempelproblem (majoriseringsproblemet) Præcisering af inddata: Vælgernes stemmer er lagret i en tabel, stemme, således at stemme[v] angiver nummeret (≥ 1) på den kandidat, som vælgeren v har stemt på. Præcisering af uddata: Hvis en kandidat har fået mere end halvdelen af stemmerne, så udskriv nummeret på kandidaten. Ellers udskriv ”Ingen vinder”.

7 7 Programmering i Java: Hver bunke repræsenteres ved en tæller. for (k = 1; k <= kandidater; k++) tæller[k] = 0; for (v = 1; v <= vælgere; v++) tæller[stemme[v]]++; vinder = 0; for (k = 1; k <= kandidater; k++) if (tæller[k] > vælgere/2) vinder = k; if (vinder != 0) System.out.println("Vinder: " + vinder); else System.out.println("Ingen vinder"); Algoritme: Opret en tom bunke for hver kandidat. Læg hver stemme i den bunke, der svarer til den kandidat, der er stemt på. Hvis antallet af stemmer i en af bunkerne overstiger halvdelen af de afgivne stemmer, er der fundet en vinder. Løsningsmulighed 1 (optælling i bunker)

8 8 Fordele: Simpel at programmere. Hurtig (køretiden er proportional med antal afgivne stemmer). Løsningsmulighed 1 Ulemper: Hvis der er mange kandidater, bruges megen ekstra plads til tællere Hvis tabellen stemme indeholder kandidaternes navne (i stedet for numre) vanskeliggøres optællingen. Algoritmen er ikke generel.

9 9 Algoritme: Sorter stemmesedlerne efter deres kandidatnummer. Gennemløb derefter de sorterede stemmesedler for at afgøre, om en af kandidaterne successivt står på mere end halvdelen af stemmesedlerne. Løsningsmulighed 2 (sortering) Programmering i Java: sorter(stemme); kandidat = tæller = 0; for (v = 1; v <= vælgere; v++) if (stemme[v] != kandidat) { kandidat = stemme[v]; tæller = 1; } else if (++tæller > vælgere/2) break; if (tæller > vælgere/2) System.out.println("Vinder: " + kandidat); else System.out.println("Ingen vinder");

10 10 Løsningsmulighed 2 Ulemper: Sorteringen kan tidsmæssigt være dyr. Det er et krav, at indholdet af stemme kan sorteres, f.eks. indeholder tal eller tekst. Algoritmen er ikke generel.

11 11 Algoritme: Find den kandidat, der ville blive den midterste, såfremt stemmesedlerne blev sorteret efter deres kandidatnummer (uden dog at foretage sorteringen). Afgør herefter ved simpel tælling, om kandidaten er vinder. Løsningsmulighed 3 (bestemmelse af median) Programmering i Java: kandidat = median(stemme); tæller = 0; for (v = 1; v <= vælgere; v++) if (stemme[v] == kandidat) tæller++; if (tæller > vælgere/2) System.out.println("Vinder: " + kandidat); else System.out.println("Ingen vinder");

12 12 Løsningsmulighed 3 Ulempe: Det er et krav, at indholdet af stemme kan sorteres, f.eks. indeholder tal eller tekst. Algoritmen er ikke generel. Fordel: Hurtig. Medianen kan bestemmes i tid, der i gennemsnit er proportional med antal afgivne stemmer. (Med en indviklet algoritme, kan medianen bestemmes i tid, der i alle tilfælde er proportional med antal afgivne stemmer.)

13 13 Løsningsmulighed 4 (udtynding, problemreduktion) Ide: Hvis to stemmer er afgivet på to forskellige kandidater, og de pågældende to stemmesedler fjernes, så vil en eventuel vinder for de oprindelige stemmesedler også være en vinder for de resterende. NB: Det modsatte er ikke tilfældet. F.eks. har listen (1, 2, 5, 5, 3) ingen vinder, men hvis 1 og 2 fjernes, så bliver 5 ny vinder.

14 14 Løsningsmulighed 4 Algoritme: Stemmesedlerne gennemløbes i rækkefølge. Hver gang to er forskellige, eliminerer vi begge. Vinderen i den resterende liste bestemmes, hvorefter det kontrolleres, at denne kandidat også er vinder i den originale liste. Men hvad gør vi, hvis to successive stemmer er ens? Svar: Vedligehold to variabler: kandidat, der udpeger en potentiel vinder, og tæller, der angiver hvor mange gange kandidat ikke har kunnet parres med en anden kandidat. Hvis tæller efter gennemløbet er positiv, undersøges ved simpel tælling, om kandida t er vinder.

15 15 Løsningsmulighed 4 Programmering i Java: tæller = 0; for (v = 1; v <= vælgere; v++) if (tæller == 0) { kandidat = stemme[v]; tæller = 1; } else if (stemme[v] == kandidat) tæller++; else tæller--; if (tæller > 0) { tæller = 0; for (v = 1; v <= vælgere; v++) if (stemme[v] == kandidat) tæller++; } if (tæller > vælgere/2) System.out.println("Vinder: " + kandidat); else System.out.println("Ingen vinder");

16 16 Løsningsmulighed 4 Fordele: Hurtig. Køretiden er proportional med antal afgivne stemmer. Kræver næsten ingen ekstra plads. Let at programmere - og let at bevise. Algoritmen er generel (forudsætter ikke, at tabellen kan sorteres). Ulemper: Ingen.

17 17 Empirisk undersøgelse af de fire løsningsmuligheder 20,000,000 stemmer afgivet på 255 kandidater. Køretid i sekunder på en 233 MHz Macintosh G3: 1. Optælling i bunker: 3 2. Sortering (med quicksort)96 3. Bestemmelse af median 13 4. Udtynding 5

18 18 Kursusbeskrivelse Formål Mål Indhold Form

19 19 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.

20 20 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

21 21 Indhold (1) Algoritmebegrebet (2) Elementære datastrukturer (3) Design, analyse og verifikation (4) Sortering I (5) Sortering II (6) Søgning I (7) Søgning II (8) Strengbehandling (9) Grafalgoritmer I (10) Grafalgoritmer II

22 22 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å algoritmikkens kreative sider, d.v.s. på designprincipper for algoritmer. Kurset skal opøve evnen til at tænke “algoritmisk”. Øvelser udgør et absolut nødvendigt led i kurset (jvf. man kan ikke blive musiker ved kun at læse musikteori). Arbejdsbelastning: 10 timer/uge

23 23 Algorithms in C++ Robert Sedgewick, Addison-Wesley, 1992. Lærebog Ulemper: det anvendte programmeringssprog er ikke Java (dog afhjulpet af mit tillæg: “Algoritmer i Java”) de algoritmiske principper drukner undertiden i programmeringsmæssige detaljer der lægges for lidt vægt på algoritmisering Fordele: gode algoritmebeskrivelser på letforståeligt engelsk algoritmerne er omsat til udførbar kode (her C++) matematikken er holdt på et minimum

24 24 Udeladelser i forhold til lærebogen Sortering og søgning på eksterne lagermedier Komprimering af filer Kryptering Geometriske algoritmer Visse grafalgoritmer: Strømning i netværk og Parring Matematiske algoritmer (herunder generering af tilfældige tal, løsning af ligningssystemer) Udtømmende søgning Parallelle algoritmer Dynamisk programmering Problemkompleksitet Emnerne er spændende (og relevante), men tiden tillader ikke en gennemgang.

25 25 Algoritmetyper Sædvanlige behandles indgående Approksimative behandles ikke Giver tilnærmede løsninger Heuristiske behandles ikke Baseret på tommelfingerregler (eks. bjergbestigning) Parallelle behandles ikke Tillader samtidige operationer Probabilistiske behandles ikke Baseret på lodtrækning

26 26 Ugeseddel 0 31. august - 15. september Læs kapitel 1 og 2 i lærebogen (side 3-14) Løs følgende opgave (løsning gennemgås ved forelæsningen den 30. september) Blandt en forsamling af personer defineres en berømthed som en person, som alle kender, men som ikke kender nogen andre i forsamlingen. Design en algoritme, der kan identificere berømtheden, hvis denne eksisterer, ved kun af stille spørgsmål af formen ”Undskyld, kender du den person derhenne?”. Alle personer, også berømtheden, antages at svare korrekt. Inddata er givet ved antallet af personer, N, og et boolesk array kender[][], hvor kender[a][b] er true, hvis og kun hvis person a kender person b. Antallet af spørgsmål ( kender[a][b] ?) ønskes minimeret. Angiv det maksimale antal spørgsmål, algoritmen må stille, når forsamlingen består af N personer.


Download ppt "1 Algoritmik ved Keld Helsgaun. 2 Plan Hvad er algoritmik? Et eksempel Kursusbeskrivelse formål, indhold og form."

Lignende præsentationer


Annoncer fra Google