INF 4130 Algoritmer: Design og effektivitet
Velkommen Forelesere: Stein Krogdahl, steinkr at ifi.uio.no Petter Kristiansen pettkr at ifi.uio.no Lærebok: Algorithms: Sequential, Parallel, and Distributed, Kenneth A. Berman and Jerome L. Paul. Til salgs i bokhandelen. (Sørg for å få boka med copyright 2005.)
Velkommen Gruppelærer: Matias Holte kjetimh at student.matnat.uio.no Obliger: Tre stykker, som må godkjennes. Andre, «nærliggende» kurs: INF-MAT 3370 INF-MAT 5360 Lineær optimering Matematisk optimering
Kvalitetssikring ved Ifi Som student har du rett og plikt til å bidra til kvalitetssikringen av studiet ditt. Dette gjør du først og fremst gjennom å delta i undervisningsevaluering. Faglærer vil ta initiativ til å sette i gang undervisningsevalueringen for hvert enkelt emne. Undervisningsevalueringen gir deg mulighet til å komme med tilbakemeldinger og innspill på undervisningen i løpet av semesteret, slik at forbedringer kan gjøres underveis. Du finner mer informasjon om dette på hovedsiden til Institutt for informatikk, under Annet Kvalitetssikring, eller ved å følge denne linken: http://www.ifi.uio.no/studinf/kvalitetssikring/studenter.
Undervisningsplan 27/08 pk Introduksjon 03/09 pk Søking i strenger (kap. 20) 10/09 pk Dynamisk programmering (kap. 9) 17/09 24/09 01/10 08/10 11/12 Eksamen (09:00, 3 timer, sted ikke fastsatt)
Algoritmer, effektivitet, kompleksitet Hvordan løse databehandlingsproblemer effektivt. Problemer interessante, formelle språk naturlige problemer (formal languages) (MATCHING, SORTING, TSP) Løsninger algoritmer Turing-maskiner Effektivitet kompleksitet kompleksitetsklasser
Algoritmer, effektivitet, kompleksitet Problemene (de formelle språkene) havner i ulike klasser, kompleksitstsklasser, ut ifra hvor effektive løsninger som er mulig for disse problemene. Problemer, formelle språk Uløsbare (unsolvable) Umedgjørlige (intractable) Lette
R ELEMENTARY 2-EXP EXPSPACE conexp NEXP EXP PSPACE conp NP P
Algoritmer, effektivitet, kompleksitet Problemene (de formelle språkene) havner i ulike klasser, kompleksitstsklasser, ut ifra hvor effektive løsninger som er mulig for disse problemene. Problemer, formelle språk Uløsbare (unsolvable) Umedgjørlige (intractable) Lette
Historisk introduksjon Den beste måte å løse et problem på (enten det er matematisk eller kulinarisk eller noe annet) er å lage en generell metode som håndterer alle situasjoner (alle instanser av problemet). På den måten kan vi si at løsning = algoritme. Eksempler: Den babylonske metode for kvadratrøtter 253 = Andregradslikningsformelen ax 2 + bx + c = 0 Euclids algoritme for største felles faktor (g.c.d.) den første ikke-trivielle algoritme?
Historisk introduksjon Fra 1900 og utover vokste feltet som kalles metamatematikk (matematiske studier av matematikken selv, dens muligheter og begrensninger). På 1930-tallet kom en del resultater omkring eksistens/ikke-eksistens av algoritmer for ulike problemer. Kurt Gödel (1931): Ufullstendighetsresultater. Alan Turing (1936): «On computable numbers, with an application to the Entscheidungsproblem». Uløsbare Løsbare Turings resultater og teknikker
Historisk introduksjon CPU John von Neumann (ca 1945): den første moderne datamaskin. Minne Program kontroll Regneenhet I/O Jack Edmonds (1965): «Paths, Trees, and Flowers», en algoritme for MAXIMUM MATCHING. Anne Camilla Elin Bjørn David Frank Artikkelen ble først refusert av redaktørene i Canadian Journal of Mathematics ettersom en triviell algoritme opplagt finnes: prøv alle muligheter!
Historisk introduksjon Kompleksitetsanalyse av den trivielle matching-algoritmen: Anta n = 100 gutter. n! = 100 * 99 * 98 * * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 > 10 * 10 * 10 * * 10 = 10 90. Anta 10 16 muligheter (permutasjoner) testes per sekund. (1,4 Pflops (1,4*10 15 ) er pt. verdens raskeste maskin, Roadrunner.) 10 16+4+2+3+2 = 10 27 muligheter testes per århundre. Kjøretiden for n = 100 er 10 90-27 = 10 63 århundrer(!!)! Universets antatte alder : 14 mrd år (1,4 * 10 10 < 10 11 år)! Ca(?) 10 90 elementærpartikler i det synlige univers (diameter ca 95 mrd lysår).
Historisk introduksjon Edmonds: «min algoritme har polynomisk kjøretid, den trivielle bruker eksponensiell tid!» Vi har altså nå resultater omkring problemer som har algoritmer med polynomisk kjøretid. Cook / Levin (1972): NP-completeness. Umedgjørlige Cook / Levins resultater og teknikker P (Polynomisk kjøretid)
Problemer, formelle språk Alle mulige databehandlingsproblemer Lønnsberegning, månelanding, ruteplanlegging, grafer tall «interessante», «naturlige» problemer MATCHING SORTING TSP input output Funksjoner (Mengder av I/O-par) output = JA/NEI Formelle språk (Mengder av «JA-strenger»)
Problemer, formelle språk Definisjon Et alfabet Ʃ er en endelig mengde symboler. Alfabetet vårt kan f.eks være Ʃ = {0,1} eller Ʃ = {a,, å}. (Alle symboler kan kodes med ASCII-koder el. og deretter binært.) Definisjon Ʃ* = alle endelige strenger vi kan lage med symbolene i Ʃ. For alfabetet {0,1} er Ʃ* = {ε, 0, 1, 00, 01, } i leksikografisk rekkefølge. Definisjon Et formelt språk L over Ʃ er en delmengde av Ʃ*. Når et formelt språk L skal brukes til å representere et problem, lar vi L bestå av mengden av alle «JA-instanser» for problemet vårt. Et formelt språk for SORTING (av heltallene) vil f.eks bestå av alle korrekt sorterte sekvenser av heltall: {ε, 0, 1, 2,, 01, 02,, 012, 013, }.
Algoritmer, Turing-maskiner Algoritme 1 1 397 + 56 = 397 + 46 443 input 443 output beregning regler Turingmaskin b b 0/ 1 0 b b uendelig tape (input/output) lese-/skrivehode Regler (del av maskinen) q 1 s «prosessor» Kontrollenhet med et endelig antall tilstander og regler for overgang mellom tilstandene, skriving på tapen og flytting av lese-/skrivehodet d(s,0) = (q 1, b, R) d(q 1,0) = (q 2, b, R) q 2 tilstander
Algoritmer, Turing-maskiner b 0 1 0 b b q 2 q 1 s Regler (del av maskinen) d(s,0) = (q 1, b, R) d(q 1,0) = (q 2, b, R) CPU Minne Program kontroll Regneenhet I/O
Algoritmer, Turing-maskiner program, regler 0 1 0 b b Regler (del av maskinen) s De hardkodede reglene styrer nå bare applisering av de programmerte reglene fra tapen q 1 q 2 CPU Minne Program kontroll Regneenhet I/O
Algoritmer, Turing-maskiner Problemene våre har vi sett at vi kan modellere med formelle språk. Algoritmene kan representeres med Turing-maskiner. En Turing-maskin M avgjør språket L hvis og bare hvis M beregner funksjonen f : Ʃ* {JA, NEI} slik at for hver l œ L : f(l) = JA for hver l L : f(l) = NEI En Turing-maskin M aksepterer språket L hvis og bare hvis gir stopper med svaret JA for alle l œ L. For l L krever vi ikke engang at maskinen stopper. Turing-maskiners regnekraft gir en inndeling av de formelle språkene:
Algoritmer, Turing-maskiner Alle mulige formelle språk
Algoritmer, Turing-maskiner Alle mulige formelle språk Språk som aksepteres av Turing-maskiner (svarer Ja)
Algoritmer, Turing-maskiner Alle mulige formelle språk Komplementene av de språk som aksepteres av Turing-maskiner (svarer Nei) Språk som aksepteres av Turing-maskiner (svarer Ja)
Algoritmer, Turing-maskiner Alle mulige formelle språk Komplementene av de språk som aksepteres av Turing-maskiner (svarer Nei) Språk som aksepteres av Turing-maskiner (svarer Ja) Det er kun disse språkene (problemene) som har algoritmer (svarer ja og nei). De kalles rekursive språk (R).
Algoritmer, Turing-maskiner Alle mulige formelle språk Komplementene av de språk som aksepteres av Turing-maskiner (svarer Nei) ELEMENTARY 2-EXP EXPSPACE conexp NEXP EXP PSPACE conpnp Språk som aksepteres av Turing-maskiner (svarer Ja) P Det er kun disse språkene (problemene) som har algoritmer. De kalles rekursive språk (R).
Effektivitet, kjøretid, kompleksitet Algoritmers kjøretid beregnes i prinsippet ved å telle antall operasjoner. Det tar som regel mindre tid å løse en liten probleminstans enn det tar å løse en stor, f.eks å sortere noen få tall i forhold til å sortere mange. Algoritmers kjøretid angis derfor som en funksjon av lengden på input. Polynomiske algoritmer (gode algoritmer) Hvis f(n) er en algoritmes maksimale kjøretid på instanser av lengde inntil n, så sier vi at algoritmen er polynomisk hvis f(n) = O(n k ), for en konstant k. Ekponensielle algoritmer (dårlige algoritmer) Litt feilaktig regner vi ofte algoritmer som ikke har polynomisk kjøretid for eksponensielle. Disse har typisk kjøretid Θ(k n ) eller Θ(n!), eller liknende.
Churchs tese Algoritme @ Turing-maskin Turing-maskiner kan beregne enhver funksjon som kan beregnes av en algoritme, et dataprogram eller en datamaskin. Programmeringsspråks beregningskraft Et programmeringsspråk (Java, C, Lisp, ) er Turing-komplett om det kan gjøre de samme beregninger som Turing-maskiner. Kan vi implementere en Turingmaskin i språket vårt, er det det. Universelle datamaskinmodeller En datamaskinmodell er Turing-komplett om den kan gjøre de samme beregninger som en Turing-maskin. McCullok og Pitts har vist at nevrale nett kan simulere Turing-maskiner. Uberegnbarhet Hvis en funksjon f ikke kan beregnes av en Turing-maskin, så finnes det ingen datamaskin som kan beregne f.