Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

1 Øvingsforelesning 2003.09.18 Andreas Knudsen Nils Grimsmo

Liknende presentasjoner


Presentasjon om: "1 Øvingsforelesning 2003.09.18 Andreas Knudsen Nils Grimsmo"— Utskrift av presentasjonen:

1 1 Øvingsforelesning 2003.09.18 Andreas Knudsen andreakn@idi.ntnu.no Nils Grimsmo nilsgri@idi.ntnu.no

2 2 Innhold Presentasjon av praksisøving 5. Repetisjon: Kjøretidsanalyse Teoriøving 4 Praksisøving 4

3 3 Praksisøving 5 Aksjespekulanten Problem: ”Gitt et sett med endringer i en aksjekurs, når lønner det seg å kjøpe og selge. Du har en sum penger, og kan kun kjøpe og selge en gang.” Gitt flere løsninger som er like innbringende, velg den som har kortest tid mellom kjøp og salg

4 4 Praksisøving 5 Aksjespekulanten

5 5 KompleksitetKommentarFor 365 dager O(n 5 )Dum løsning6’478’348’728’125 O(n 4 )Finnes en slik?17’748’900’625 O(n 3 )Naiv løsning48’627’125 O(n 2 )Litt naiv løsning133’225 O(n log n)Lur løsning, men ikke best 3’107 O(n)Smart løsning365

6 6 Repetisjon Kjøretidsanalyse Vi ser uformelt på kjøretidsanalyse av søk i forskjellige typer datastrukturer Array – O(n) Balansert binærtre – O(log 2 n) Ubalansert binærtre – O(n) Graf – O(v + e)

7 7 Repetisjon Kjøretidsanalyse – Søk i array Har ingen informasjon om hvor i arrayet elementet vi leter etter ligger Når vi ser på ett element får vi ikke vite mer enn om det er det vi søker etter eller ikke Kjøretid: O(n) 1342182025641287

8 8 Repetisjon Søk i balansert binærtre Ved å se på ett element, kan vi halvere søkerommet. Høyden på treet: floor(log 2 n). Går ett hakk ned per sammenligning  Kjøretid: O(log 2 n) 34 1768 14 755031 2 13 321935 99 7153 log 2 n

9 9 Repetisjon Søk i ubalansert binærtre Høyden på treet er i verste fall n Må da gjøre Θ(n) operasjoner hvis elementet vi leter etter ligger nederst. Kjøretiden blir da generelt sett O(n) O(n)

10 10 Repetisjon Køretidsanalyse - Søk i graf Marte Svein Håvard Espen Jonas Per Guri

11 11 Repetisjon Kjøretidsanalyse - Søk i graf Kan søke i grafen dybde- eller bredde-først Gitt v noder og e kanter: Må besøke O(v) noder, da den vi leter etter kan være den vi finner sist Gitt e j kanter ut fra node j, må vi se på e j kanter nå vi undersøker j e = e 1 + e 2 + … + e v Vi må undersøke O(e) kanter til sammen Kjøretid: O(v) + O(e) = O(v+e)

12 12 Praksisøving 4 Spionproblemet Variasjon over det mer kjente kjendisproblemet. Def: ”Gitt en gruppe mennesker, finn en person som kjenner alle, men som ingen av de andre kjenner.” Motivasjon: Øving på problemløsing. Mange andre problemer har løsninger som minner om denne.

13 13 Spionproblemet Grafrepresentasjon Marte Svein Håvard Espen Jonas Per Guri

14 14 Spionproblemet Naiv løsning for hver person: sjekk om denne kjenner alle de andre sjekk om ingen av de andre kjenner denne

15 15 Spionproblemet Matrise Kjennes PerHåvardJonasMarteGuriEspenSvein Kjenner Per-000X00 Håvard0-000X0 Jonas00-0000 MarteXXX-XXX GuriX000-00 EspenXXX0X-X Svein0X000X-

16 16 Spionproblemet Naiv løsning - Pseudokode for hver person A: for alle andre personer B: hvis A ikke kjenner B: for alle andre personer C: hvis C kjenner A:

17 17 Spionproblemet Naiv løsning - Kjøretid Sjekker n personer: Θ(n) For hver person, se om hun kjenner alle de n-1 andre, samt om ingen andre kjenner henne. Θ(n) + Θ(n) = Θ(n). Samlet kompleksitet: Θ(n) * Θ(n) = Θ(n²) Ser fra pseudokode: To nivåer med løkker uten hopp → kjøretiden må være Θ(n²)

18 18 Spionproblemet Naiv løsning - Optimering Slutt å undersøke personer etter at du har funnet ut at de ikke kan være spion Det kan bare være en mulig spion, slutt å søke når du har funnet denne Trenger bare en indre løkke

19 19 Spionproblemet Naiv løsning - Pseudokode for hver person A: for alle andre personer B: hvis A ikke kjenner B: continue(2) hvis B kjenner A: continue(2) spion = A break Kjøretiden er nå O(n 2 ) i stedet for Θ(n²)

20 20 Spionproblemet Lineær løsning Motivasjon: –Hvis A kjenner B, betyr dette at B ikke kan være spion (Det sier ingenting om A) –Hvis A ikke kjenner B, betyr dette at A ikke kan være spion (Det sier ingenting om B) Vi kan eliminere en mistenkt per sammenligning! Bare en person kan være spion  Reductio ad absurdum (Motsigelesesbevis)

21 21 Spionproblemet Lineær løsning – Pseudokode 1 så lenge det er minst 2 kandidater igjen: velg to mistenkte A og B hvis A kjenner B: kan B ikke være spion hvis ikke: kan A ikke være spion det er nå 1 mulig spion igjen sjekk denne på gamlemåten

22 22 Spionproblemet Lineær løsning – Pseudokode 2 liste = alle personer så lenge lengde(liste) > 1: A = liste[0] B = liste[1] hvis A kjenner B: slett(liste[1]) hvis ikke: slett(liste[0]) sjekk om liste[0] er spion

23 23 Spionproblemet Lineær løsning – Java-kode public static int traverser(int[][] nm, int antNoder) { int k = 0; for (int i = 1; i < antNoder; i++) { if (nm[k][i] != 1) { k = i; } for (int i = 0; i < antNoder; i++) { if ((k != i) && ((nm[k][i] != 1) || (nm[i][k] == 1))) { return -1; } return k; } nm er nabomatrise, k er kandidat, i er den vi sammenligner med

24 24 Spionproblemet Lineær løsning - Kjøretid Kan med 1 sjekk eliminere 1 person. Θ(1) Gitt n mistenkte, vil vi kunne eliminere n-1 personer på n-1 runder. Θ(n-1) = Θ(n) Kan sjekke siste kandidat på n+n operasjoner (”Kjenner noen denne personen? Kjenner denne alle andre?”). Θ(n+n) = Θ(n) Samlet kjøretid: Θ(1) * Θ(n) + Θ(n) = Θ(n) Ser fra kode: To separate løkker uten hopp

25 25 Spionproblemet Lineær løsning - Oppsummering Vi utnytter det faktum at bare en person kan være spion. Gitt to personer, kan vi eliminere en av dem. Lærdom: –Analyser problemet godt –Skriv ned alt du vet –Utnytt egenskapene til problemet til din fordel


Laste ned ppt "1 Øvingsforelesning 2003.09.18 Andreas Knudsen Nils Grimsmo"

Liknende presentasjoner


Annonser fra Google