Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertMona Møller Endret for 9 år siden
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
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.