PG4200 Algoritmer og datastrukturer forelesning 10 Lars Sydnes 21. november 2014
I Grafer
Grafisk fremstilling av en graf D A B C Ikke-rettet graf
Grafisk fremstilling av en graf D A B C Rettet graf
Grafisk fremstilling av en graf D 1 A 2 B 4 3 1 C Ikke-rettet vektet graf
Grafisk fremstilling av en graf D 1 A 2 B 4 3 1 C Rettet vektet graf
Grafer I dagligtale : En visuell fremstilling. Her: Selve strukturen Man kan tegne opp en graf på mange måter Strukturen = det som er uavhengig av fremstillingen
Grafer I dagligtale : En visuell fremstilling. Her: Selve strukturen Man kan tegne opp en graf på mange måter Strukturen = det som er uavhengig av fremstillingen Mange interessante problemer kan uttrykkes ved grafer. Dette er grunnen til at grafer regnes som så viktige.
Grafer I dagligtale : En visuell fremstilling. Her: Selve strukturen Man kan tegne opp en graf på mange måter Strukturen = det som er uavhengig av fremstillingen Mange interessante problemer kan uttrykkes ved grafer. Dette er grunnen til at grafer regnes som så viktige. Grafer brukes gjerne til å fremstille relasjoner mellom objekter. Representasjon av struktur i datasettet.
Grafer Byggesteiner node kant rettet kant vektet kant 3.4 vektet rettet kant 3.4
Grafer Terminologi Ikke-rettet graf: Kantene har ikke retning. Rettet graf: Kantene har retning: Fra A til B. Kalles digraph. Ikke-vektet graf: Kantene har ikke vekt. Vektet graf: Kantene har vekt. Ulike kombinasjoner: Ikke-rettet vektet graf Rettet vektet graf Rettet ikke-vektet graf Ikke-vektet ikke-rettet graf
II Eksempler
Eksempel: Referanser en rettet graf Double another Object obj void main Integer number funksjon Object data
Eksempel: Referanser og Garbage Collector Sett obj = null i main: Double another Object obj void main Integer number funksjon Object data Søppelåndteringen (gc) kan nå gjøre jobben sin og slette obj. Men, den må unngå å slette number.
Eksempel: Funksjonskall Noder = funksjoner Kanter = funksjonskall void main mergesort merge
Datanettverk Andre eksempler
Andre eksempler Datanettverk Worldwide web
Andre eksempler Datanettverk Worldwide web Geometriske nettverk: Posisjoner og veier i en spill-verden. Vekt = avstand. Flyplasser og flyruter. Vekt = pris.
Andre eksempler Datanettverk Worldwide web Geometriske nettverk: Posisjoner og veier i en spill-verden. Vekt = avstand. Flyplasser og flyruter. Vekt = pris. Avhengighet mellom operasjoner: Rettet graf. Kant fra A til B når operasjonen B forutsetter at A er fullført.
Andre eksempler Datanettverk Worldwide web Geometriske nettverk: Posisjoner og veier i en spill-verden. Vekt = avstand. Flyplasser og flyruter. Vekt = pris. Avhengighet mellom operasjoner: Rettet graf. Kant fra A til B når operasjonen B forutsetter at A er fullført. Problemer som vi ønsker å løse med algoritmer.
Eksempel: Modell av flyplassnettverk Ålesund Trondheim 399 579 645 599 Bergen 549 Oslo Hvordan kan vi reise fra Ålesund til Trondheim? Hva er den billigste veien fra Ålesund til Trondheim?
III Graf-algoritmer
Traversering Vi ønsker å besøke alle nodene i en graf. Hvor skal vi starte? Rekkefølge? public Iterator<Node> iterator(){ /*...*/ } Trær er eksempler på grafer, og vi har Bredde først = Level order Dybde først = preorder, postorder
Traversering Bredde først Vi starter i en villkårlig utvalgt node. Besøk alle naboene til startnoden (avstand = ett steg). Besøk naboene til naboene (avstand = to steg) Besøk alle nodene i avstand 3, avstand 4, et.c.
Traversering Dybde først Vi starter i en villkårlig utvalgt node. Vi går til det første barnet. Vi går til det første barnebarnet... Vi går til det andre barnet Vi går til det andre barnets første barnebarn... Dybde først vs Bredde først Et uhyre viktig begrepspar!
Traversering Kode Å forstå et dataprogram. Rettet graf av referanser (Objekter, funksjoner) som det gjøres operasjoner på. Ulike deler av koden skrives, presenteres og leses sekvensielt (av mennesker og maskin) Tenker du dybde først eller bredde først når du skriver kode?
Konkretisering: Representasjon av grafer Tegninger / Grafikk Naboskapsmatriser Naboskapslister. Graph.java EdgeWeightedDigraph.java
Konkretisering: Traversering DepthFirstPaths.java BreadthFirstPaths.java
Finn korteste vei (Pathfinding) Finn korteste vei fra A til B. Bruk bredde først-traversering med utgangspunkt i A. Første gangen B dukker opp, har vi funnet den korteste veien. Dijkstras algoritme: Variant av bredde først-søk. Bygg alle mulige veier med utgangspunkt i A. Arbeid på det korteste alternativet. Fortsett arbeidet helt til det dukker opp en vei som ender i B. A -algoritmen: Forbedret variant av Dijkstras algoritme. Brukes når vi kan estimere avstandene.
Dijkstras algoritme: Ålesund til Trondheim 399 Ålesund 579 645 Trondheim 599 Bergen 549 Oslo
Dijkstras algoritme: Ålesund til Trondheim 399 Ålesund 579 645 Trondheim 599 399 Ålesund 579 645 Trondheim 599 Bergen 549 Oslo Bergen 549 Oslo
Dijkstras algoritme: Ålesund til Trondheim 399 Ålesund 579 645 Trondheim 599 399 Ålesund 579 645 Trondheim 599 Bergen 549 Oslo Bergen 549 Oslo 399 Ålesund 579 645 Trondheim 599 Bergen 549 Oslo
Dijkstras algoritme: Ålesund til Trondheim 399 Ålesund 579 645 Trondheim 599 399 Ålesund 579 645 Trondheim 599 Bergen 549 Oslo Bergen 549 Oslo 399 Ålesund 579 645 Trondheim 599 399 Ålesund 579 645 Trondheim 599 Bergen 549 Oslo Bergen 549 Oslo
Dijkstras algoritme: Implementasjon Hvilke noder har vi allerede besøkt? Hva er den korteste tilgjengelige veien? Alternativene kan legges i en prioritetskø (heap). Køoperasjoner med logaritmisk kjøretid.
Konkretisering: Implementasjon DijkstraSP.java
Worst case-analyse Når vi må vurdere alle kantene. La V være antall noder i grafen og E antallet kanter. Vi undersøker maksimalt V veier. Heap kjøretid O(log V ) for lagring og henting av veier. Dette skjer maksimalt E ganger kjøretid O(E log V ) // TODO: KONTROLLER DETTE EN GANG TIL
A -algoritmen: Korteste vei fra A til B Ny ingrediens: Estimat min(a, B) for korteste mulige avstand mellom A og B. Dijkstras algoritme bedømmer en vei kun etter lengden. A D W E A*-algoritmen bedømmer denne veien etter Lengde(A-D-W-E) + min(e, B).
A -algoritmen: Eksempel. 399 Ålesund 579 645 Trondheim 599 Bergen 249 Stavanger 549 369 Oslo Estimat basert på geografisk avstand: Minstepris Stavanger - Trondheim = 500kr. A*-algoritmen vil ikke ta Stavanger i betraktning
IV Fagevaluering
Fagevaluering Gå på it s learning. Ta gjerne opp ting dere har nevnt før, så vi har det dokumentert.
V Travelling salesman problem
Travelling salesman problem (TSP) Konkret problem Handelsmannen besøke 20 byer. Hva er den korteste/rimeligste/raskeste rundreisen?
Travelling salesman problem (TSP) Konkret problem Handelsmannen besøke 20 byer. Hva er den korteste/rimeligste/raskeste rundreisen? Abstrakt problem Finn den korteste rundreisen i en vektet graf.
Uttømmende søk int[] tsp(graph graph){ int[] shortestcircuit double minimallength = DOUBLE.MAX_VALUE; for (int[] circ: permutations(graph.vertices())) if (ispath(circ)) continue; } } if (path.length() < minimallength){ shortestpath = path; minimallength = path.length(); }
Analyse Vi itererer over alle permutasjoner av nodene. Permutasjon = Omstokking. Kan du permutere kortstokken?
Hvor mange permutasjoner finnes det Name and conquer: P n = Antall permutasjoner av n elementer 1, 2, 3,..., n P n 1 permutasjoner med 1 først P n 1 permutasjoner med 2 først. P n 1 permutasjoner med n først P n = n P n 1 = n(n 1)P n 2 = = n(n 1)(n 2) 2 1 = n! ulike permutasjoner av de n tallene.
Kjøretidsanalyse n = antall noder i grafen. (Antall byer) Antall iterasjoner i den indre løkka $ = P_n =n!$. n! Kjøretid n!
Kjøretidsanalyse n = antall noder i grafen. (Antall byer) Antall iterasjoner i den indre løkka $ = P_n =n!$. n! vokser ekstremt raskt. n! Kjøretid n! Når n vokser fra 99 til 100 100-dobles verdien. Når n vokser fra 999 999 til 1 000 000 milliondobles verdien.
Kjøretidsanalyse n = antall noder i grafen. (Antall byer) Antall iterasjoner i den indre løkka $ = P_n =n!$. n! vokser ekstremt raskt. n! Kjøretid n! Når n vokser fra 99 til 100 100-dobles verdien. Når n vokser fra 999 999 til 1 000 000 milliondobles verdien. 2 n vokser også utrolig raskt, men Når n vokser fra 99 til 100 dobles verdien. Når n vokser fra 999 999 til 1 000 000 dobles verdien.
Konsekvens Hvis det tar handelsmannen 1 time å lage en plan for 99 byer, tar det 100 timer å planlegge for 100 byer. ( 5 døgn) 10,000 timer å planlegge for 101 byer ( 1.5 år)
Konsekvens Hvis det tar handelsmannen 1 time å lage en plan for 99 byer, tar det 100 timer å planlegge for 100 byer. ( 5 døgn) 10,000 timer å planlegge for 101 byer ( 1.5 år) Altså: Kjøretiden er ekstremt følsom.
Spørsmål Det finnes vel noe mer effektivt enn brute-force-metoden?
Spørsmål Det finnes vel noe mer effektivt enn brute-force-metoden? Bedre løsninger av problemet: Bedre worst-case kjøretid. (Ikke så viktig) Bedre kjøretid på typiske datasett. (Veldig viktig)
Spørsmål Det finnes vel noe mer effektivt enn brute-force-metoden? Bedre løsninger av problemet: Bedre worst-case kjøretid. (Ikke så viktig) Bedre kjøretid på typiske datasett. (Veldig viktig) Raske løsninger av lignende problemer: Finn en vei som ikke er mer enn dobbelt så lang som den korteste. Dette kan gjøres veldig effektivt.
VI Uhåndterlige problemer
Uhåndterlige problemer Vi har sett mange problemer som vi kan løse innenfor akseptabel kjøretid.
Uhåndterlige problemer Vi har sett mange problemer som vi kan løse innenfor akseptabel kjøretid. Men i mange tilfeller har vi ingen kjent akseptabel løsning. ingen kan bevise at det ikke finnes noen akseptabel løsning.
Uhåndterlige problemer Vi har sett mange problemer som vi kan løse innenfor akseptabel kjøretid. Men i mange tilfeller har vi ingen kjent akseptabel løsning. ingen kan bevise at det ikke finnes noen akseptabel løsning. Praktisk problem: Lage effektive algoritmer Teoretisk problem: Finne ut hva som er mulig.
Polynomisk kjøretid Polynomisk kjøretid i n: der k er en konstant. Kjøretid n k
Polynomisk kjøretid Polynomisk kjøretid i n: Kjøretid n k der k er en konstant. Eksponentiell kjøretid: Hvis Kjøretid A n er det lavest mulige estimatet.
Polynomisk kjøretid Polynomisk kjøretid i n: Kjøretid n k der k er en konstant. Eksponentiell kjøretid: Hvis Kjøretid A n er det lavest mulige estimatet. Faktoriell kjøretid: Hvis Kjøretid n! er det lavest mulige estimatet.
Søkeproblemer: NP Et problem tillhører klassen NP derssom en løsning kan verifiseres innenfor polynomisk kjøretid.
Søkeproblemer: NP Et problem tillhører klassen NP derssom en løsning kan verifiseres innenfor polynomisk kjøretid. opplagt brute-force-løsning: Undersøk alle mulige alternativer. (Søk)
Søkeproblemer: NP Et problem tillhører klassen NP derssom en løsning kan verifiseres innenfor polynomisk kjøretid. opplagt brute-force-løsning: Undersøk alle mulige alternativer. (Søk) Fra et praktisk synspunkt: Alle problemene vi kan håpe på å håndtere med en datamaskin tilhører klassen NP.
Problemklassen P Dette er problemer som har kjente løsninger med polynomisk worst case-kjøretid.
Problemklassen P Dette er problemer som har kjente løsninger med polynomisk worst case-kjøretid. Fra et praktisk synspunkt: Dette er de problemene vi kan håndtere med en datamaskin.
P = NP? Dette er et spørsmål vi ikke har svar på.
P = NP? Dette er et spørsmål vi ikke har svar på. Finnes det noen problemer i klassen NP som ikke ligger i P?
P = NP? Dette er et spørsmål vi ikke har svar på. Finnes det noen problemer i klassen NP som ikke ligger i P? Et åpent (og meget vanskelig) forskningsspørsmål.
Reduksjon Anta at vi kan løse problemet A innen rimelig kjøretid.
Reduksjon Anta at vi kan løse problemet A innen rimelig kjøretid. Metode for å løse en instans b av et problem B: 1 Transformer om til instans a av problemet a. 2 Finn løsningen s a av a. 3 Transformer s a om til s b. løsning s b av problemet B.
Reduksjon Anta at vi kan løse problemet A innen rimelig kjøretid. Metode for å løse en instans b av et problem B: 1 Transformer om til instans a av problemet a. 2 Finn løsningen s a av a. 3 Transformer s a om til s b. løsning s b av problemet B. Her har vi redusert B til A Vi kan skrive: B A
Reduksjon Anta at vi kan løse problemet A innen rimelig kjøretid. Metode for å løse en instans b av et problem B: 1 Transformer om til instans a av problemet a. 2 Finn løsningen s a av a. 3 Transformer s a om til s b. løsning s b av problemet B. Her har vi redusert B til A Vi kan skrive: B A Problemet A er minst like vanskelig som problemet B.
Reduksjon Det finnes en algoritme som transformerer instanser av B om til instanser av A. Innen rimelig tid
Reduksjon Det finnes en algoritme som transformerer instanser av B om til instanser av A. Innen rimelig tid Det finnes en algortime som transformerer løsninger av A om til løsninger av B. Innen rimelig tid
Kartlegging av problemer Noder = Problemer
Kartlegging av problemer Noder = Problemer Kanter = Reduksjoner.
Kartlegging av problemer Noder = Problemer Kanter = Reduksjoner. Eksempel: Finne like par i en liste
Kartlegging av problemer Noder = Problemer Kanter = Reduksjoner. Eksempel: Finne like par i en liste overgi listen til sortering finne like par reduksjon sortere listen sammenligne naboer
Kartlegging av problemer Noder = Problemer Kanter = Reduksjoner. Eksempel: Finne like par i en liste overgi listen til sortering finne like par reduksjon sortere listen sammenligne naboer Vi reduserer problem B til problem A for å løse B.
Reduksjon og tunge problemer Anta at vi har en reduksjon B A.
Reduksjon og tunge problemer Anta at vi har en reduksjon B A.... løsning av A Løsning av B Problem A er minst like vanskelig som problem B.
Reduksjon og tunge problemer Anta at vi har en reduksjon B A.... løsning av A Løsning av B Problem A er minst like vanskelig som problem B. Dersom vi er rimelig sikre på at B er et vanskelig problem så kan vi være like sikre på at A er et vanskelig problem.
NP-komplette problemer: Teori NP-komplett problem A Et NP-problem som er slik at ethvert NP-problem B kan reduseres til A.
NP-komplette problemer: Teori NP-komplett problem A Et NP-problem som er slik at ethvert NP-problem B kan reduseres til A. NP-hardt problem A Et problem som er slik at ethvert NP-problem B kan reduseres til A. (Nå kan A være ikke-np)
NP-komplette problemer: I praksis Vi kan ikke regne med at det finnes algoritmer med akseptabel worst case-kjøretid.
NP-komplette problemer: I praksis Vi kan ikke regne med at det finnes algoritmer med akseptabel worst case-kjøretid. Eksempel: To fjell: A,B Det finnes en farbar vei mellom A og B. Vi vet at ingen har lykkes med å bestige A. Bør vi prøve å bestige B?
NP-komplette problemer: Botemidler Algoritmer med akseptabel kjøretid i typiske tilfeller. Worst case-kjøretid kan fortsatt være uakseptabel. Løs et enklere problem. Sørg for at rundreisen ikke er mer enn dobbelt så lang som nødvendig. Finn tilnærmede løsninger Matematikk gir mer effektive avisbud
Eksempel: Ryggsekkproblemet Problem: Handelsmannen kan ta 1000 kg med last i bilen sin. Han har n gjenstander G 1, G 2,..., G n. Hver gjenstand har salgsverdi v i og vekt w i.
Eksempel: Ryggsekkproblemet Problem: Handelsmannen kan ta 1000 kg med last i bilen sin. Han har n gjenstander G 1, G 2,..., G n. Hver gjenstand har salgsverdi v i og vekt w i. Han ønsker å velge ut gjenstander G i1, G i2,..., G ik slik at w i1 + w i2 + + w ik 1000 kg. Målsetningen er at den totale prisen skal være så høy som mulig. v i1 + v i2 + + v ik
Sprint-planlegging i Scrum Diskusjon
Mer lesning 1 Læreboka 910-917. 2 Notatet hardproblems.pdf Dette er på norsk og forhåpentligvis lettlest.
Fremover Mandag 8.12 Gjennomgang av eksamensoppgave om NP-harde problemer Spørretime/Repetisjon Eksamensoppgaver. Onsdag 10.12 Eksamen
Oppgave Funksjonskallgrafen Ta for dere en del av løsningen av innlevering 1, og tegn opp funksjonskallgrafen. Politikergrafen Filen politikergraf.txt representerer en graf der nodene er politikere. Grafen inneholder en kant mellom to politikere dersom det finnes en avisartikkel som omtaler begge politikerne. Bruk SymbolGraph og BreadthFirstPaths til å rangere stortingspolitikerne etter deres Solberg-tall (Hvor stor er avstanden til Erna Solberg i politikergrafen?) Datane er høstet hos aftenposten.no.