PG4200 Algoritmer og datastrukturer Forelesning 12 Lars Sydnes, NITH 30. april 2014
I. SIST: NOTAT OM HARDE PROBLEMER
INNHOLD Håndterlige problemer: Problemer med kjente algoritmer med polynomisk kjøretid (Polynomisk = orden O(n k )). Uhåndterlige problemer: Problemer som ikke har kjente algoritmer med polynomisk kjøretid. Problemklassene P og NP: To viktige klasser av beslutningsproblemer. P: Løses innenfor polynomisk kjøretid. NP: Verifisering av løsning innenfor polynomisk kjøretid. NP-tunge problemer: Problemer som er minst like vanskeligere som alle NP-problemer. Ryggsekkproblemet: Knapsack problem. Velg last til ryggsekk. Søk høyeste verdi innenfor en viss vektbegrensning. (NP-tungt) Hamiltonsk rundreise-problemet: Fins det en rundreise i den gitte grafen som besøker hver eneste node presis én gang? (NP-komplett) Lastebilproblemet: (Uvanlig terminologi) Fyll esker i en lastebil. Ønske: Lasten skal ha størst mulig verdi. (NP-tungt)
REDUKSJON: SLIK VIRKER DET heapsort(comparable[] data) { maxheapify(data); for(int i = data.length-1; i >0; i--){ swap(data,0,i); fixheap(data,i); } } Reduksjon til velkjente metoder: maxheapify sort swap fixheap
REDUKSJON: KARTLEGGING AV TUNGE PROBLEM A: Problemet vi ønsker å løse. B: Kjent beregningskrevende problem. (F.eks: NP-komplett eller NP-hardt) Resdusér problem B til problem A: Vis hvordan en algoritmisk løsning av problem A kan brukes til å løse problem B. Vanskelig problem B Problemet vi arbeider med A
REDUKSJON B kan reduseres til A. A er minst like beregningskrevende som B. Vi forstår at A er vanskeligere enn B. Vi kan innføre en relasjon: A er minst like vanskelig som B: B A. OBS: Vi er interessert i polynomiske reduksjoner: Oversettelsen skal ha polynomisk kjøretid. B A = A er håndterbart hvis B er håndterbart.
KARTLEGGING Rettet graf. C E H D A G F I J B G A, H, E, D, C E A, I A, I kan ikke sammenlignes Vi har en pil fra noden X til noden Y når Y er minst like vanskelig som X. I dette kartet er B og J de vanskeligste problemene, mens C og E er de enkleste problemene. Legg merke til at H G D H. Disse problemene er like vanskelige.
NP -KOMPLETTHET Et NP -komplett problem X kan karakteriseres slik: X tilhører klassen NP. (Løsning kan verifiseres med polynomisk kjøretid). Hvis Y er et NP -problem, så er Y X. (Y kan reduseres til X). Et problem X slik at Y X dersom Y er et NP -problem kalles NP -tungt / NP -hardt / NP -hard.
REDUKSON LASTEBILPROBLEMET Oversettelse mellom lastebilproblemet optimal stabling av pappesker i lastebil og ryggsekkproblemet (knapsack problem) optimalt utvalg av tunge salgsvarer. Ryggsekkproblemet er kjent som NP -hardt (NP -hard). Konklusjon: Det gjelder også lastebilproblemet.
II. KORT PENSUMOVERSIKT SJEKKLISTE FØR EKSAMEN
LISTER SØK SORTERING Liste-implementasjoner: Tabeller i minnet / Lenkede strukturer Søk: Sekvensielt søk / Binært søk Sortering av lister: Sekvensiell sortering: Insertion sort, Selection sort, Bubble sort. O(n 2 ) Quick sort O(n 2 ) (Dog som oftest O(n log n)) Merge sort O(n log n) Heap sort O(n log n) Radix sort O(n) (Når dataene er velegnet).
REKURSJON Jeg kan en sang som går folk på nervene Sangen begynner sånn: "Jeg kan en sang som går..." public void syng() { if (nerveneerkaputt) { //Stoppbetingelse return; } else { syng("jeg kan en sang..."); syng(); //Rekursivt kall } } Bestanddeler Stoppbetingelse Rekursivt kall Iblant: Ikke-rekursivt offentlig grensesnitt
TRÆR Binære trær / søketrær Heaps Ubalanserte trær. AVL-trær, Black-Red-trær. B-trær (Variabelt antall barn pr. node) Min-heap Max-heap Anvendelse: Prioritetskøer. Lenket implementasjon BinaryNode root BinaryNode left = current.left; Tabell-implementasjon int left = 2*current + 1, right = left + 1;
HASHING Utnytte random access / indeksering. Genial idé: Regn ut minneadressen ved hjelp av hash-funksjon. I praksis: Faller ofte tilbake til sekvensielt søk i en liten del av minnet. Chaining Probing: Linear, Quadratic Double hashing. Begrenset kapasitet rehashing. Likevel: Lagring og søk med kjøretid O(1).
GRAFER Grafer Rettede grafer Nettverk / Vektede grafer Rettede nettverk Naboskapsmatriser / Adjacency matrix. Naboskapslister / Adjacency list. Ingen struktur for lagring av data. Søk, sortering, Ofte: Abstraksjon av generelle situasjoner. Nettverk av flyplasser nettverk. Bekjentskaper mellom mennesker graf.
KØ STAKK MENGDE AVBILDNING Liste: Noe man kan gå sekvnsielt gjennom. Indeksert liste: Vi aksesserer elementer via indeks Kø: Queue. First in, first out. enqueue, dequeue Stakk: Stack. First in, last out. push, pop Prioritetskø: Priority queue. add, removemin Mengder: Sets. HashSet, TreeSet. contains, add, remove Avbildninger: Maps. HashMap, TreeMap. containskey, add(key, value), get(key), remove(key)
KJØRETIDSANALYSE O-notasjon Kjøretidsanalyse for løkker Kjøretidsanalyse for nettverk av funksjonskall. Vurdering av enkeltalgoritmer. Sammenligning av algoritmer Dette gjennomsyrer hele kurset.
III. HVA KAN VI TA MED OSS VIDERE?
ENKLE PRINSIPPER KAN GI INTERESSANTE STRUKTURER commons.wikimedia.org Blomkål av størrelse 10 er satt sammen av to mindre blomkål: En av størrelse 1 og en av størrelse 9.
DET ER FAKTISK MULIG Å VÆRE LUR Lister: Sekvensiell håndtering. Typisk operasjon: O(n). Søketrær: Forbedrer søk. Typisk operasjon O(log n). Hashtabeller: Forbedret søk. Typisk operasjon O(1). Utnytter hardware bedre enn trær: Random access / Indeksering. Sekvensielt søk Sortering + binært søk Binære søketrær Oppslag i hash-tabeller
TEORI OG PRAKSIS 1 Når matematikeren bruker O-notasjon, er det som om vi har ubegrensede ressurser. DET FINNES INGEN ØVRE GRENSE FOR n Derfor er det matematisk riktig å si: Oppslag i hashtabeller har kjøretid av orden O(log n). I virkeligheten har vi begrensede ressurser. Derfor er det praktisk talt riktig å si: Oppslag i hashtabeller har kjøretid av orden O(1). Eksempel: Økonomifaget, uendelig tid og rom. Enkle teorier om rasjonalitet forutsetter uendelige ressurser. Men jorden er en kule og vi lever nokså kort. Vi kan likevel lære mye av slike forenklede teorier. Begrensede ressurser Vi kan ikke annet.
TEORI OG PRAKSIS 2 Stor spredning: Det er vanskelig å forutsi kjøretiden. Vi er dog som regel i nærheten av det teoretiske.
ORDEN I SYSAKENE = EFFEKTIVITET I DET LANGE LØP Binære søketrær og Hash-tabeller: Fantastiske instrumenter for å holde orden på data. Det er ingen ting som heter gratis lunsj. Binære trær krever kontinuerlig rebalansering. Hashtabeller må rehashes når de er fulle. KONTINUERLIG VEDLIKEHOLD Lignende situasjon: Refaktorering av kode Må vi søke sekvensielt gjennom koden, eller har den en stuktur som gjør at vi finner raskere frem?
ALGORITMENES GRENSER Problemer uten praktiske løsninger Optimalisering: Traveling salesman. Distribusjon av aviser. Timeplaner. Ryggsekkproblemet. Knekke koder: Ikke umulig, bare uhåndterlig. Dette har ikke bare akademisk interresse. Dårlige nyheter: Vi må være fornøyd med det brukbare. Gode nyheter: Vi kan slå oss til ro med det brukbare. Bedre (?) nyheter: Vi kan strebe mot det optimale og være trygge på at vi aldri kommer helt i mål.
IV. EVALUERING
EVALUERING Evalueringsskjema på it s learning. Kommentarer til vurderingsopplegget. (Obligatoriske innleveringer) Gjenta gjerne ting dere har sagt før. Det er fint å samle tingene svart på hvitt. Sluttspørsmål: Eksakt ett svar på hvert spørsmål. (i) En ting som fungerte (ii) En ting som ikke fungerte (iii) Hva vil du ha mer av? (iv) Hva vil du ha mindre av?
V. OPPGAVER
EKSAMENSOPPGAVER: Her er fjorårets eksamen: Eksamen 2013v Flere oppgaver og løsningsforslag