Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Save this PDF as:
 WORD  PNG  TXT  JPG

Storlek: px
Starta visningen från sidan:

Download "Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6"

Transkript

1 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6?

2 DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar vi med pseudokod

3 KOMPLEXITET Anta att ADT:n Fält behöver en operation som returnerar vilket index som en viss iterator pekar på (kanske ett meningslöst exempel, men enkelt...). Om x inte pekar på något element i fältet så returneras storleken... En möjlig algoritm: Integer GetIndex(Iterator x) Integer i = 0 p = First() While p!= x do If p.isend() then Break End If i = i + 1 p = Next() Return i

4 KOMPLEXITET Anta att operationen - finns för iteratorer och att den beräknar avståndet mellan två iteratorer (uttryckt i antal element). Följande algoritm är då möjlig Integer GetIndex(Fält f, Iterator x) Integer i i = x - First() If i < 0 OR i >= Size() then i = NrOfElements() End If Return i

5 KOMPLEXITET Vi räknar operationerna som kommer att utföras för ett visst indatafall. Operationer är aritmetiska (+, - etc), jämförelser och tilldelningar. Först fallet att det efterfrågade elementet ligger först: Integer GetIndex(Fält f, Iterator x) Integer i i = x - First() If i < 0 OR i >= Size() then i = NrOfElements() End If Return i i = 0 p = First() While p!= x do If p.isend() then Break End If i = i + 1 p = Next()

6 KOMPLEXITET Vi räknar operationerna som kommer att utföras för ett visst indatafall. Operationer är aritmetiska (+, - etc), jämförelser och tilldelningar. Först fallet att det efterfrågade elementet ligger först: Integer GetIndex(Fält f, Iterator x) Integer i i = x - First() If i < 0 OR i >= Size() then i = NrOfElements() End If Return i i = 0 p = First() While p!= x do If p.isend() then Break End If i = i + 1 p = Next()

7 KOMPLEXITET För detta fall är algoritmen med iteration effektivast Först fallet att det efterfrågade elementet ligger först: Integer GetIndex(Fält f, Iterator x) Integer i i = x - First() If i < 0 OR i >= Size() then i = NrOfElements() End If Return i 5 i = 0 p = First() While p!= x do If p.isend() then Break End If i = i + 1 p = Next() 3

8 KOMPLEXITET Vi räknar nu operationer för fallet att det efterfrågade elementet ligger först på plats Integer GetIndex(Fält f, Iterator x) Integer i i = x - First() If i < 0 OR i >= Size() then i = NrOfElements() End If Return i i = 0 p = First() While p!= x do If p.isend() then Break End If i = i + 1 p = Next()

9 KOMPLEXITET Vi får nu det omvända förhållandet: algoritmen med loop blir ineffektivare mot 5 Det efterfrågade fallet ligger på plats Integer GetIndex(Fält f, Iterator x) Integer i i = x - First() If i < 0 OR i >= Size() then i = NrOfElements() End If Return i 5 i = 0 p = First() While p!= x do If p.isend() then Break End If i = i + 1 p = Next() ca

10 KOMPLEXITET I detta fall vet vi inte det det exakta antalet iterationer för varje sökning. Vi vet inte heller hur lång tid respektive operation tar, men det är uppenbart att loop-lösningen tar enormt mycket mer datorkraft.

11 KOMPLEXITET I detta fall vet vi inte det det exakta antalet iterationer för varje sökning. Vi vet inte heller hur lång tid respektive operation tar, men det är uppenbart att loop-lösningen tar enormt mycket mer datorkraft. Om t.ex. Två algoritmer som löser samma problem ska jämföras eller vi vill ha en grov uppfattning om en algoritms komplexitet/effektivitet och mängden data kan vara stor Använd stora ordo, O(x) för att ge en grov bild av komplexiteten

12 ORDOBEGREPPET Komplexiteten för en algoritm är det antal distinkta steg den kan behöva för att slutföra en beräkning Komplexiteten uttrycks som en funktion av datamängden n n är mängden data som algoritmen behandlar O-notation beskriver prestanda och komplexitet Kan beskriva exekveringstid eller minne

13 ORDOBEGREPPET Komplexiteten för en algoritm är det antal distinkta steg den kan behöva för att slutföra en beräkning Komplexiteten uttrycks som en funktion av datamängden n n är mängden data som algoritmen behandlar O-notation beskriver prestanda och komplexitet Kan beskriva exekveringstid eller minne Idag kan vi tänka på exekveringstid när vi pratar om komplexitet

14 ORDOBEGREPPET Komplexiteten för en algoritm är det antal distinkta steg den kan behöva för att slutföra en beräkning Komplexiteten uttrycks som en funktion av datamängden n n är mängden data som algoritmen behandlar O-notation beskriver prestanda och komplexitet Kan beskriva exekveringstid eller minne Idag kan vi tänka på exekveringstid när vi pratar om komplexitet O-notation beskriver (oftast) värsta möjliga scenario

15 Dessa är de komplexiteter vi kommer att hålla oss till NÅGRA VANLIGA KOMPLEXITETSKLASSER

16 NÅGRA VANLIGA KOMPLEXITETSKLASSER Dessa är de komplexiteter vi kommer att hålla oss till - alltid samma

17 NÅGRA VANLIGA KOMPLEXITETSKLASSER Dessa är de komplexiteter vi kommer att hålla oss till - alltid samma - halverad sökmängd

18 NÅGRA VANLIGA KOMPLEXITETSKLASSER Dessa är de komplexiteter vi kommer att hålla oss till - alltid samma - halverad sökmängd - direkt beroende av n

19 NÅGRA VANLIGA KOMPLEXITETSKLASSER Dessa är de komplexiteter vi kommer att hålla oss till - alltid samma - halverad sökmängd - direkt beroende av n - blandning av log n och n

20 NÅGRA VANLIGA KOMPLEXITETSKLASSER Dessa är de komplexiteter vi kommer att hålla oss till - alltid samma - halverad sökmängd - direkt beroende av n - blandning av log n och n - nästlade loopar i två steg

21 NÅGRA VANLIGA KOMPLEXITETSKLASSER Dessa är de komplexiteter vi kommer att hålla oss till - alltid samma - halverad sökmängd - direkt beroende av n - blandning av log n och n - nästlade loopar i två steg - nästlade loopar i tre steg

22 ORDOBEGREPPET Om körtiden för en algoritm inte alls påverkas av antalet element säger man att den är konstant eller O(1) Om körtiden för en algoritm påverkas linjärt av antalet element säger man att den är linjär eller, där n är antalet element Om körtiden för en algoritm påverkas kvadratiskt av antalet element säger man att den är kvadratisk eller O(n²), där n är antalet element Att nollställa en matris är O(m*n) där m är antalet rader och n är antalet kolumner

23 O(1) Algoritmen kommer alltid att exekvera på samma tid oavsett hur stort indatat är Exempel: bool IsFirstElementNull(String[] strings) If string[0] = NULL then Return true End If Return false

24 O(LOG N) Algoritmen kommer att exekvera på en tid proportionell till logaritmen av indatats storlek. Detta betyder generellt att algoritmen jobbar med en datamängd som iterativt delas Exempel: Sökning i sorterat binärt träd Binärsökning log(n) < n, när n går mot stora värden Algoritmer som körs i O(log n) använder inte hela indatat

25 O(N) Algoritmens exekveringstid kommer att växa linjärt och i direkt proportion till indatats storlek Exempel: bool ContainsValue(String[] strings, String value) For i = 0; i < strings.length; i++ do If strings[i] = value then Return true End If Return false

26 ORDOBEGREPPET 2 algoritmer, A och B, som löser samma typ av problem - Komplexitet på A är 5000n - Komplexitet på B är 1,1 n Indata A B n 5 000n [1,1 n ] ,5 * * ,8 *

27 ORDOBEGREPPET 2 algoritmer, A och B, som löser samma typ av problem - Komplexitet på A är 5000n - Komplexitet på B är 1,1 n För n = 10: - A kräver steg - B kräver 3 steg B är bättre Indata A B n 5 000n [1,1 n ] ,5 * * ,8 *

28 ORDOBEGREPPET B kan inte användas för stora datamängder 2 algoritmer, A och B, som löser samma typ av problem - Komplexitet på A är 5000n - Komplexitet på B är 1,1 n För n = 10: - A kräver steg - B kräver 3 steg För n = 1 000: - A kräver steg - B kräver 2,5 * steg B är bättre A är bättre Indata A B n 5 000n [1,1 n ] ,5 * * ,8 *

29 ORDOBEGREPPET B kan inte användas för stora datamängder 2 algoritmer, A och B, som löser samma typ av problem - Komplexitet på A är 5000n - Komplexitet på B är 1,1 n För n = 10: - A kräver steg - B kräver 3 steg För n = 1 000: - A kräver steg - B kräver 2,5 * steg B är bättre A är bättre Indata A B n 5 000n [1,1 n ] ,5 * * ,8 * Vad som är viktigt är hur funktionen växer vid stora n

30 KÖRTID FÖR OLIKA KOMPLEXITETSKLASSER Algoritmen körs på f(n) mikrosekunder f(n) n = 2 n = 16 n = 256 n = 1024 n = log2n n 2 1,6 * ,6 * ,02 * ,05 * 10 6 n log2n 2 6,4 * ,1 * ,02* ,10 * 10 7 n 2 4 2,6 * ,6 * ,05 * ,10 * n 3 8 4,1 * ,7 * ,07 * ,15 * n 4 6,6 * ,2 * ,80 * ,74 *

31 KÖRTID FÖR OLIKA KOMPLEXITETSKLASSER f(n) n = 2 n = 16 n = 256 n = 1024 n = µsec 1 µsec 1 µsec 1 µsec 1 µsec log2n 1 µsec 4 µsec 8 µsec 10 µsec 20 µsec n 2 µsec 16 µsec 260 µsec 1,02 ms 1,05 sec n log2n 2 µsec 64 µsec 2,1 ms 10,2 ms 21 sec n 2 4 µsec 260 µsec 66 ms 1,05 sec 1,8 wks n 3 8 µsec 4,1 ms 17 sec 17,9 min yrs 2 n 4 µsec 66 ms 3,7 * yrs 5,7 * yrs 2,1 * yrs

32 KOMPLEXITET Formellt gäller: Om f(n) är en funktion som uttrycker komplexiteten exakt, så är g(n) en övre begränsning, dvs vi kan säga O(g(n)), om det går att välja en konstant K och fixt n 0, så att K * g(n) >= f(n) för alla n > n 0 Dvs om man bortser från små värden och konstanta faktorer så är g(n) större eller lika

33 KOMPLEXITET Vi kan säga O(g(n)) om det går att välja en konstant K och ett fixt n 0, så att K * g(n) >= f(n) för alla n > n 0

34 KOMPLEXITET Det är de STORA värdena på n som är intressanta Värsta möjliga scenario! Därför räknar vi inte exakt utan gör en uppskattning baserat på komplexitetklasserna Vi kan säga O(g(n)) om det går att välja en konstant K och ett fixt n 0, så att K * g(n) >= f(n) för alla n > n 0

35 EXEMPEL En operation Clear() på ADT:n Matrix med m rader och n kolumner. Den nollställer alla matrisens element med hjälp av operationen ClearElement() Clear() Integer i = 0; j = 0 While i < m do While j < n do ClearElement(i, j) j = j + 1 j = 0 i = i + 1

36 EXEMPEL En operation Clear() på ADT:n Matrix med m rader och n kolumner. Den nollställer alla matrisens element med hjälp av operationen ClearElement() Clear() Integer i = 0; j = 0 While i < m do While j < n do ClearElement(i, j) j = j + 1 j = 0 i = i + 1 Vilken är komplexiteten? Och hur räknar vi ut den? Använd komplexitetsklasserna

37 EXEMPEL En operation Clear() på ADT:n Matrix med m rader och n kolumner. Den nollställer alla matrisens element med hjälp av operationen ClearElement() Clear() Integer i = 0; j = 0 While i < m do While j < n do ClearElement(i, j) j = j + 1 j = 0 i = i + 1 Vilken är komplexiteten? Och hur räknar vi ut den? Använd komplexitetsklasserna Komplexiteten: O(m*n), ty för varje varv i den yttre loopen (det är m st) kommer hela den inre loopen att snurra n st varv, dvs totalt n*m iterationer av den inre loopens kropp (dvs anrop till ClearElement()):

38 EXEMPEL Skulle vi räkna mer exakt skulle det bli 4n 2 + 4m + 3 enligt tidigare sätt att räkna operationer. Men vi säger alltså ändå att den är O(n 2 ) Allmänt: endast den terms om har högst dignitet tas med och konstanta faktorer på denna ignoreras. Motivering: För stora mängder av data är det den tyngst vägande termen som kommer att dominera Man kan t.ex. jämföra kurvorna för n n och n 2. Ju större värden på n, desto mindre relativ skillnad. För 1 miljon är den 0.002%, men för 1 är den 42100%. Det intressanta är beteendet vid stora mängder data.

39 EXEMPEL Skulle vi räkna mer exakt skulle det bli 4n 2 + 4m + 3 enligt tidigare sätt att räkna operationer. Men vi säger alltså ändå att den är O(n 2 ) Allmänt: endast den terms om har högst dignitet tas med och konstanta faktorer på denna ignoreras. Motivering: För stora mängder av data är det den tyngst vägande termen som kommer att dominera För att inte behöva räkna så mycket använder vi alltså de övergripande komplexitetsklasserna för att beskriva komplexiteten. Man kan t.ex. jämföra kurvorna för n n och n 2. Ju större värden på n, desto mindre relativ skillnad. För 1 miljon är den 0.002%, men för 1 är den 42100%. Det intressanta är beteendet vid stora mängder data.

40 ÖVNINGAR A Init(A a[], Integer n) Integer i = 0 While i < n do a[i].d = 42 a[i].i = i i = i + 1 Vilken Init har högst komplexitet? - kod A eller kod B? B Init(A a[], Integer n) InitD(a, n) InitI(a, n) InitD(A a[], Integer n) Integer i = 0 While i < n do a[i].d = 42 i = i + 1 InitI(A A[], Integer n) Integer i = 0 While i < n do a[i].i = i i = i + 1 end loop

41 Loopen körs i värsta fallet n ggr Init(A a[], Integer n) Integer i = 0 While i < n do a[i].d = 42 a[i].i = i i = i + 1 Båda har komplexiteten Alltså samma! Init(A a[], Integer n) InitD(a, n) InitI(a, n) InitD(A a[], Integer n) Integer i = 0 While i < n do a[i].d = 42 i = i + 1 InitI(A A[], Integer n) Integer i = 0 While i < n do a[i].i = i i = i + 1 end loop

42 Loopen körs i värsta fallet n ggr Init(A a[], Integer n) Integer i = 0 While i < n do a[i].d = 42 a[i].i = i i = i + 1 Båda har komplexiteten Alltså samma! Looperna InitD och InitI körs vardera i värsta fallet n ggr alltså n+n = 2n Init(A a[], Integer n) InitD(a, n) InitI(a, n) InitD(A a[], Integer n) Integer i = 0 While i < n do a[i].d = 42 i = i + 1 InitI(A A[], Integer n) Integer i = 0 While i < n do a[i].i = i i = i + 1 end loop

43 ÖVNINGAR G(B b[], Integer n) Integer i = 0 While i < n do b[i].c = 0 i = i + 1 Vilken komplexitet har F?? F(A a[], Integer n) Integer i = 0 While i < n do G(a[i].b, n) i = i + 1

44 I F() körs loopen i värsta fallet n ggr, för varje varv så körs loopen i G() n ggr = n*n O(n 2) G(B b[], Integer n) Integer i = 0 While i < n do b[i].c = 0 i = i + 1 O(n 2 ) F(A a[], Integer n) Integer i = 0 While i < n do G(a[i].b, n) i = i + 1

45 ÖVNINGAR F(A a[], Integer n) Integer i = 0 While i < n do a[i].x = 0 i = i + 1 Integer j = 0 While j < 2*n do a[j].c = 0 j = j + 1 Vilken komplexitet har F??

46 Den första loopen körs i värsta fallet n ggr, den andra loopen körs i värsta fallet 2n ggr = n + 2n = 3n F(A a[], Integer n) Integer i = 0 While i < n do a[i].x = 0 i = i + 1 Integer j = 0 While j < 2*n do a[j].c = 0 j = j + 1

47 ÖVNINGAR 1: 2: F(A a[][], Integer n) While i < n do While j < n do a[i][j] = 7 F(A a[][], Integer n) While i < n do While j < 42 do a[i][j] = 7 Vilken komplexitet har F i de båda fallen??

48 Den yttre loopen körs i värsta fallet n ggr, den inre loopen körs i värsta fallet n ggr = n*n = n 2 O(n 2) F(A a[][], Integer n) While i < n do While j < n do a[i][j] = 7 O(n 2 ) F(A a[][], Integer n) While i < n do While j < 42 do a[i][j] = 7

49 Den yttre loopen körs i värsta fallet n ggr, den inre loopen körs i värsta fallet n ggr = n*n = n 2 O(n 2) F(A a[][], Integer n) While i < n do While j < n do a[i][j] = 7 O(n 2 ) Den yttre loopen körs i värsta fallet n ggr, den inre loopen körs i värsta fallet 42 ggr = n*42 = 42n O(n ) F(A a[][], Integer n) While i < n do While j < 42 do a[i][j] = 7

50 NÄSTLADE LOOPAR Oberoende nästlade loopar: Antalet iterationer i den inre loopen är inte beroende av antalet iterationer i den yttre loopen Exempel: x = 0 For j = 1; j <= n/2; j++ do For k = 1; k <= n*n; k++ do x = x + j + k Den yttre loopen exekverar n/2 gånger. För varje varv i den yttre loopen, exekverar den inre loopen n 2 gånger. Så kroppen till den inre loopen exekverar (n/2)*n 2 = n 3 /2 gånger Algoritmens komplexitet är O(n 3 )

51 NÄSTLADE LOOPAR Beroende nästlade loopar: Antalet iterationer i den inre loopen beror på ett värde från den yttre loopen Exempel: x = 0 For j = 1; j <= n/2; j++ do For k = 1; k <= 3*j; k++ do x = x + j När j är 1, körs den inre loopen 3 gånger; När j är 2, körs den inre loopen 3*2 gånger;... När j är n, körs den inre loopen 3*n gånger. Totalt körs den inre loopen n = 3( n) = 3n 2 /2 + 3n/2 gånger. Algoritmens komplexitet är alltså O(n 2 )

52 NÅGRA ENKLA REGLER OM LOOPAR Det är bara loopar vars antal iterationer som är beroende av indatats storlek som man behöver ta hänsyn till Nästlingen avgör vilket O (ordo) det blir Man måste titta i alla funktioner som anropas O för nästlade loopar multipliceras om de är oberoende O för sekventiella loopar adderas Om två loopar är nästlade på samma nivå i loophierarkin så är det den av looparna som har högst O som man räknar med Bara den största (mest dominanta) termen behålls, resten skippas

53 KOMPLEXITET FÖR OPERATIONER PÅ DATASTRUKTURER Man kan ofta hitta komplexitet för en operation (på en datastruktur) genom att gå igenom hur den fungerar (och vad den faktiskt gör)

54 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last Insert Remove first O(1) Remove last Remove Find O(1)

55 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Insert Remove first Remove last O(1) Remove Find

56 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Lägg in på nästa lediga plats (förutsatt att det finns en) Insert Remove first Remove last O(1) Remove Find

57 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last Insert Remove first O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Lägg in på nästa lediga plats (förutsatt att det finns en) Värsta fallet: i början - flytta alla efterföljande för att skapa plats (förutsatt att det finns plats) Remove last O(1) Remove Find

58 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last Insert Remove first Remove last O(1) O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Lägg in på nästa lediga plats (förutsatt att det finns en) Värsta fallet: i början - flytta alla efterföljande för att skapa plats (förutsatt att det finns plats) Det blir en lucka. Alla kvarvarande element måste flyttas ett steg bakåt Remove Find

59 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last Insert Remove first Remove last O(1) O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Lägg in på nästa lediga plats (förutsatt att det finns en) Värsta fallet: i början - flytta alla efterföljande för att skapa plats (förutsatt att det finns plats) Det blir en lucka. Alla kvarvarande element måste flyttas ett steg bakåt Ta bort det med högst index Remove Find

60 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last Insert Remove first Remove last Remove Find O(1) O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Lägg in på nästa lediga plats (förutsatt att det finns en) Värsta fallet: i början - flytta alla efterföljande för att skapa plats (förutsatt att det finns plats) Det blir en lucka. Alla kvarvarande element måste flyttas ett steg bakåt Ta bort det med högst index Värsta fallet: i början - flytta alla efterföljande för att täppa till lucka

61 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Insert first Insert last Insert Remove first Remove last Remove Find O(1) O(1) Alla som redan ligger i arrayen måste flyttas ett steg framåt för att skapa plats (förutsatt att det finns plats) Lägg in på nästa lediga plats (förutsatt att det finns en) Värsta fallet: i början - flytta alla efterföljande för att skapa plats (förutsatt att det finns plats) Det blir en lucka. Alla kvarvarande element måste flyttas ett steg bakåt Ta bort det med högst index Värsta fallet: i början - flytta alla efterföljande för att täppa till lucka Värsta fallet: Det eftersökta finns inte i listan - alla element måste genomsökas

62 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Insert last O(1) O(1) Insert Remove first O(1) Remove last O(1) O(1) Remove Find

63 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Insert Remove first O(1) Remove last O(1) O(1) Remove Find

64 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Länka in vid tail Insert Remove first O(1) Remove last O(1) O(1) Remove Find

65 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Länka in vid tail Insert Värsta fall: I slutet - sök upp noden Remove first O(1) Remove last O(1) O(1) Remove Find

66 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Länka in vid tail Insert Remove first O(1) Värsta fall: I slutet - sök upp noden Ta bort vid head Remove last O(1) O(1) Remove Find

67 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Länka in vid tail Insert Remove first O(1) Remove last O(1) O(1) Värsta fall: I slutet - sök upp noden Ta bort vid head Ta bort vid tail (föregående nod nås via länk bakåt) Remove Find

68 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Länka in vid tail Insert Remove first O(1) Remove last O(1) O(1) Remove Värsta fall: I slutet - sök upp noden Ta bort vid head Ta bort vid tail (föregående nod nås via länk bakåt) Värsta fall: i slutet - sök upp noden Find

69 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Insert first O(1) Länka in vid head Insert last O(1) O(1) Länka in vid tail Insert Remove first O(1) Remove last O(1) O(1) Remove Find Värsta fall: I slutet - sök upp noden Ta bort vid head Ta bort vid tail (föregående nod nås via länk bakåt) Värsta fall: i slutet - sök upp noden Värsta fall: finns inte - sök igenom hela listan

70 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Balanserat Binärt Sökträd Insert first O(1) X Insert last O(1) O(1) X Insert O(log n) Remove first O(1) X Remove last O(1) O(1) X Vid sökning efter rätt plats i trädet halveras sökmängden för varje iteration Remove O(log n) Find O(log n)

71 KOMPLEXITETER PÅ DATASTRUKTURERNA Värsta fallet: degenererat träd (beter sig som en länkad lista). Sökmängden halveras aldrig utan alla element måste i värsta fallet sökas igenom Lista Array Lista Dubbellänkad lista med head och tail Balanserat Binärt Sökträd Obalanserat Binärt Sökträd Insert first O(1) X X Insert last O(1) O(1) X X Insert O(logn) Remove first O(1) X X Remove last O(1) O(1) X X Remove O(logn) Find O(logn)

72 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Balanserat Binärt Sökträd Obalanserat Binärt Sökträd Insert first O(1) X X Insert last O(1) O(1) X X Insert O(logn) Remove first O(1) X X Remove last O(1) O(1) X X Remove O(logn) Find O(logn)

73 KOMPLEXITETER PÅ DATASTRUKTURERNA Lista Array Lista Dubbellänkad lista med head och tail Balanserat Binärt Sökträd Obalanserat Binärt Sökträd Insert first O(1) X X Insert last O(1) O(1) X X Insert O(logn) Remove first O(1) X X Remove last O(1) O(1) X X Remove O(logn) Find O(logn)?

Föreläsning 5 Innehåll

Föreläsning 5 Innehåll Föreläsning 5 Innehåll Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Datavetenskap (LTH) Föreläsning 5 VT 2019 1 / 39 Val av algoritm och datastruktur

Läs mer

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek Föreläsning 5 Innehåll Val av algoritm och datastruktur Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Det räcker inte med att en algoritm är korrekt

Läs mer

Asymptotisk komplexitetsanalys

Asymptotisk komplexitetsanalys 1 Asymptotisk komplexitetsanalys 2 Lars Larsson 3 4 VT 2007 5 Lars Larsson Asymptotisk komplexitetsanalys 1 Lars Larsson Asymptotisk komplexitetsanalys 2 et med denna föreläsning är att studenterna skall:

Läs mer

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet Föreläsning 5 Innehåll Algoritmer och effektivitet Algoritmer och effektivitet Att bedöma, mäta och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Undervisningsmoment: föreläsning 5, övningsuppgifter

Läs mer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

TDDI16 Datastrukturer och algoritmer. Algoritmanalys TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen Datastrukturer, DAT037, Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-01-10 1. Båda looparna upprepas n gånger. s.pop() tar O(1), eventuellt amorterat. t.add() tar O(log i) för i:te iterationen av första loopen.

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2 Föreläsning 4 ADT Map/Dictionary, hashtabeller, skip-listor TDDC91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 9 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 4.1

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Lösningsförslag för tentamen i Datastrukturer (DAT037) från Lösningsförslag för tentamen i Datastrukturer (DAT7) från --9 Nils Anders Danielsson. Träd- och köoperationerna har alla tidskomplexiteten O(log s), där s är antalet element i trädet/kön (notera att jämförelser

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Algoritmanalys Tidskomplexitet, Rumskomplexitet

Läs mer

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035 Tentamen med lösningsförslag Datastrukturer för D2 DAT 035 17 december 2005 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.)

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig

Läs mer

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm? Föreläsning 1. Introduktion och sökning i graf Vad är en algoritm? Först: Vad är ett problem? Består av indata och ett mål. Indata: [En beskrivning av en struktur.] Mål: [Kan vara Ja/Nej, ett tal eller

Läs mer

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5 Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5? FORTSÄTTNING TRÄD RECAP (förra föreläsningen) RECAP (förra föreläsningen) Träd är icke-linjära datastrukturer som ofta

Läs mer

Datastrukturer. föreläsning 3. Stacks 1

Datastrukturer. föreläsning 3. Stacks 1 Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer

Läs mer

Grundläggande datalogi - Övning 4

Grundläggande datalogi - Övning 4 Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008 Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för

Läs mer

Länkade strukturer, parametriserade typer och undantag

Länkade strukturer, parametriserade typer och undantag Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer

Läs mer

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.' Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.' Skrivtid: 08.30 13.30 Hjälpmedel: Inga Lärare: Betygsgränser DVA104' Akademin)för)innovation,)design)och)teknik) Onsdag)2014:01:15) Caroline

Läs mer

Lösningar Datastrukturer TDA

Lösningar Datastrukturer TDA Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

Programmering för språkteknologer II, HT2014. Rum

Programmering för språkteknologer II, HT2014. Rum Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Datastrukturer och algoritmer Föreläsning 5 Algoritmer & Analys av Algoritmer Algoritmer Vad är det? Innehåll Mer formellt om algoritmer beräkningsbarhet Att beskriva algoritmer Analysera algoritmer Exekveringstid,

Läs mer

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =

Läs mer

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Föreläsning 5: Kardinalitet. Funktioners tillväxt Föreläsning 5: Kardinalitet. Funktioners tillväxt A = B om det finns en bijektion från A till B. Om A har samma kardinalitet som en delmängd av naturliga talen, N, så är A uppräknelig. Om A = N så är A

Läs mer

Programkonstruktion och Datastrukturer

Programkonstruktion och Datastrukturer Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna

Läs mer

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd Innehåll Föreläsning 12 Sökträd Sökning Sökning och Sökträd 383 384 Binärt sökträd Används för sökning i linjära samlingar av dataobjekt, specifikt för att konstruera tabeller och lexikon. Organisation:

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som

Läs mer

Algoritmer och datastrukturer 2012, fo rela sning 8

Algoritmer och datastrukturer 2012, fo rela sning 8 lgoritmer och datastrukturer 01, fo rela sning 8 Komplexitet för binära sökträd De viktigaste operationerna på binära sökträd är insert, find och remove Tiden det tar att utföra en operation bestäms till

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.

Läs mer

Vad har vi pratat om i kursen?

Vad har vi pratat om i kursen? Vad har vi pratat om i kursen? Föreläsning 1 & 2 Systemminnet och systemstacken Rekursion Abstrakta datatyper Föreläsning 3 ADT:n Länkad lista Föreläsning 4 ADT:n Kö ADT:n Stack Föreläsning 5 Komplexitet

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Fredag 10 juni 2016 kl 8 12

Fredag 10 juni 2016 kl 8 12 KTH CSC, Alexander Baltatzis DD1320/1321 Lösningsförslag Fredag 10 juni 2016 kl 8 12 Hjälpmedel: En algoritmbok (ej pythonkramaren) och ditt eget formelblad. För betyg E krävs att alla E-uppgifter är godkända,

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-13 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 8 Sortering och urval TDDC70/91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 1 oktober 2013 Tommy Färnqvist, IDA, Linköpings universitet 8.1 Innehåll Innehåll 1 Sortering

Läs mer

Några svar till TDDC70/91 Datastrukturer och algoritmer

Några svar till TDDC70/91 Datastrukturer och algoritmer Några svar till TDDC70/91 Datastrukturer och algoritmer 2011--18 Följande är lösningsskisser och svar till uppgifterna på tentan. Lösningarna som ges här ska bara ses som vägledning och är oftast inte

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016 Objektorienterad Programkonstruktion Föreläsning 9 30 nov 2016 Collections Ett samlingsnamn på objekt som innehåller en samling av andra objekt Det finns många olika sorters Collections, t.ex listor, träd,

Läs mer

Magnus Nielsen, IDA, Linköpings universitet

Magnus Nielsen, IDA, Linköpings universitet Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1

Läs mer

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Lösningsförslag för tentamen i Datastrukturer (DAT036) från Lösningsförslag för tentamen i Datastrukturer (DAT036) från 2011-12-16 Nils Anders Danielsson 1. Låt oss benämna indatalistan strängar. Vi kan börja med att beräkna varje strängs frekvens genom att använda

Läs mer

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får

Läs mer

Trädstrukturer och grafer

Trädstrukturer och grafer Översikt Trädstrukturer och grafer Trädstrukturer Grundbegrepp Binära träd Sökning i träd Grafer Sökning i grafer Programmering tillämpningar och datastrukturer Varför olika datastrukturer? Olika datastrukturer

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-18 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Prims algoritm. Kruskals algoritm. Djupet först-sökning. Cykel

Läs mer

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

Algoritmer och datastrukturer TDA143

Algoritmer och datastrukturer TDA143 Algoritmer och datastrukturer TDA143 2017 02 15 Uno Holmer Algoritmer och datastrukturer, TDA143, HT17, UH Algoritm Informell beskrivning: Ett antal steg som beskriver hur en uppgift utförs. Formell beskrivning:

Läs mer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2

Läs mer

Övning 2. (Länkade) Listor, noder

Övning 2. (Länkade) Listor, noder Per Sedholm DD30 (tilda3) 03-09-03 Övning Listor, pekare, binära träd, rekursion, komplexitet (Länkade) Listor, noder. Ta bort andra noden (a) Skriv en sats som tar bort andra noden ur en länkad lista.

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037) Föreläsning 13 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-12-14 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Sammanfattning

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Algoritmanalys, Ordo Sortering, Insertionsort

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 1 Anton Grensjö grensjo@csc.kth.se 14 september 2015 Anton Grensjö ADK Övning 1 14 september 2015 1 / 22 Översikt Kursplanering F1: Introduktion, algoritmanalys

Läs mer

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller Översikt Linjär sökning Sökning Binär sökning Hashtabeller Programmering tillämpningar och datastrukturer 2 Linjär sökning Binärt sökträd Undersök ett element i taget tills du hittar det sökta Komplexitet

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem Översikt Stegvis förfining Pseudokod Flödesdiagram Dekomposition KISS-regeln Procedurell dekomposition DRY-regeln Algoritmer Sortering och sökning Stegvis förfining Metod för att skapa ett program från

Läs mer

Dugga Datastrukturer (DAT036)

Dugga Datastrukturer (DAT036) Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre

Läs mer

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037) Föreläsning 10 Datastrukturer (DAT037) Fredrik Lindblad 1 29 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2012-08-24, 8:30 12:30. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 9:30 och ca

Läs mer

Föreläsning 4 Innehåll

Föreläsning 4 Innehåll Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift

Läs mer

Lösningsförslag till exempeltenta 1

Lösningsförslag till exempeltenta 1 Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och

Läs mer

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 6 Datastrukturer (DAT037) Föreläsning 6 Datastrukturer (DAT037) Fredrik Lindblad 1 15 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

Programmering för språkteknologer II, HT2014. Rum

Programmering för språkteknologer II, HT2014. Rum Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ 1 Idag - Parametriserade

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2007-03-13 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Magnus Nielsen, IDA, Linköpings universitet

Magnus Nielsen, IDA, Linköpings universitet Föreläsning ADT Map/Dictionary, hashtabeller TDDC9,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 7 september 208 Magnus Nielsen, IDA, Linköpings universitet. ADT Map/Dictionary.

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 22 december 2006 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,

Läs mer

Föreläsning 1. Introduktion. Vad är en algoritm?

Föreläsning 1. Introduktion. Vad är en algoritm? Några exempel på algoritmer. Föreläsning 1. Introduktion Vad är en algoritm? 1. Häll 1 dl havregryn och ett kryddmått salt i 2 1 2 dl kallt vatten. Koka upp och kocka gröten ca 3minuter. Rör om då och

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), 2017-01-11 1. Loopen upprepas n gånger. getat på en dynamisk array tar tiden O(1). member på ett AVL-träd av storlek n tar tiden O(log n).

Läs mer

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Algoritm En algoritm är ett begränsat antal instruktioner/steg

Läs mer

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037) Föreläsning 8 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-23 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Förra

Läs mer

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen Datastrukturer och algoritmer Föreläsning 15 Inför tentamen 1 Innehåll Kursvärdering Vi behöver granskare! Repetition Genomgång av gammal tenta 2 Första föreläsningen: målsättningar Alla ska höja sig ett

Läs mer

Exempeltenta GruDat 2002/2003

Exempeltenta GruDat 2002/2003 Exempeltenta GruDat 2002/2003 Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ ger noll poäng på uppgiften. Obs: Den riktiga tentan kommer

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2011-03-15 Skrivtid: 4 timmar Kontakt person: Mattias Wecksten 7396 Poäng / Betyg: Max poäng

Läs mer

n (log n) Division Analysera skolboksalgoritmen för division (trappdivision). Använd bitkostnad.

n (log n) Division Analysera skolboksalgoritmen för division (trappdivision). Använd bitkostnad. Algoritmer och Komplexitet ht 08. Övning 1 Algoritmanalys Ordo Jämför följande par av funktioner med avseende på hur dom växer då n växer. Tala i varje fall om ifall f(n) Θ(g(n)), f(n) O(g(n)) eller f(n)

Läs mer

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2 Självbalanserande träd AVL-träd Koffman & Wolfgang kapitel 9, avsnitt 1 2 1 Balanserade träd Nodbalanserat träd: skillnaden i antalet noder mellan vänster och höger delträd är högst 1 Höjdbalanserat träd:

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen Datastrukturer, DAT037, Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-04-05 1. q.dequeue() tar O(1) (eventuellt amorterat) s.contains(x) tar O(1) pq.add(x) tar O(log i) I värsta fall exekveras innehållet i if-satsen.

Läs mer

Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-10-30 Repetition Analys av tidskomplexitet. Kostnadsmodeller. Asymptotisk komplexitet/notation. Dynamiska arrayer. Amorterad tidskomplexitet

Läs mer

Föreläsning 7. Träd och binära sökträd

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Det är extra mycket

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-13 Idag Mer om grafer: Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. Floyd-Warshall. Topologisk sortering

Läs mer

Algoritmer och Komplexitet ht 08. Övning 5. Flöden. Reduktioner. Förändrat flöde

Algoritmer och Komplexitet ht 08. Övning 5. Flöden. Reduktioner. Förändrat flöde Algoritmer och Komplexitet ht 08. Övning 5 Flöden. Reduktioner Förändrat flöde a) Beskriv en effektiv algoritm som hittar ett nytt maximalt flöde om kapaciteten längs en viss kant ökar med en enhet. Algoritmens

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Dekomposition och dynamisk programmering

Dekomposition och dynamisk programmering Algoritmer, datastrukturer och komplexitet, hösten 2016 Uppgifter till övning 3 Dekomposition och dynamisk programmering Max och min med dekomposition I vektorn v[1..n] ligger n tal. Konstruera en dekompositionsalgoritm

Läs mer

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom: 6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter ADT Kö Grundprinciper: En kö fungerar som en kö. Man

Läs mer

Datastrukturer D. Föreläsning 2

Datastrukturer D. Föreläsning 2 Datastrukturer D Föreläsning 2 Jämförelse mellan olika sorteringsalgoritmer n Selection sort T(n) Insertion sort T(n) 2 1 1 1 Merge sort T(n) 4 6 3-6 4-5 8 28 7-28 12-17 16 120 15-120 32-49 Analysis of

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för

Läs mer

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue

Läs mer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen Programkonstruktion Moment 8 Om abstrakta datatyper och binära sökträd Tabeller En viktig tillämpning är tabellen att ifrån en nyckel kunna ta fram ett tabellvärde. Ett typiskt exempel är en telefonkatalog:

Läs mer

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att

Läs mer