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. 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 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

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

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

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

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 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 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

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

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

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

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

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

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

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

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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 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

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 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-12-14 Idag Frågor? Är något oklart inför tentan? Sammanfattning Exempel från föreläsning 1 Dåligt val av datastruktur public class Bits {

Läs mer

Tentamen Datastrukturer D DAT 036/INN960

Tentamen Datastrukturer D DAT 036/INN960 Tentamen Datastrukturer D DAT 036/INN960 18 december 2009 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. Betygsgränser, CTH: 3 = 24 p, 4 = 36 p, 5 = 48 p, GU:

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

Ekvivalensrelationer

Ekvivalensrelationer Abstrakt datatyp för disjunkta mängder Vi skall presentera en abstrakt datatyp för att representera disjunkta mängder Kan bl.a. användas för att lösa ekvivalensproblemet avgör om två godtyckliga element

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

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt. 1 Samlingar 1.1 Frekvenstabell En Integer är icke-muterbar (precis som String, Float, Boolean et.c.). Ickemuterbarhet har många fördelar, men en nackdel är att ett helt nytt objekt måste skapas när ett

Läs mer

Träd Hierarkiska strukturer

Träd Hierarkiska strukturer Träd Hierarkiska strukturer a 1 a 2 a 3 a 4 a 2 a 5 a 6 a 7 Hierarki: Korta vägar till många Hur korta? Linjär lista: n 2 Träd: Antal element på avståndet m: g m a 1 a 3 a 8 a 12 m = log g n a 9 a 10 Väglängden

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 7 Anton Grensjö grensjo@csc.kth.se 14 oktober 2015 Anton Grensjö ADK Övning 7 14 oktober 2015 1 / 28 Översikt Kursplanering Ö6: Algoritmkonstruktion F19:

Läs mer

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer för D2 DAT 035 Tentamen 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.) Betygsgränser:

Läs mer

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037) Föreläsning 8 Datastrukturer (DAT037) Fredrik Lindblad 1 22 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

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Övningsuppgifter #11, Programkonstruktion och datastrukturer Övningsuppgifter #11, Programkonstruktion och datastrukturer Lösningsförslag Elias Castegren elias.castegren@it.uu.se Övningar 1. 1 2. 2 3. Ett binomialträd med rang n har 2 n noder. En binomial heap innehåller

Läs mer

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 6 Datastrukturer (DAT037) Föreläsning 6 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-17 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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-10 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra

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

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

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037) Föreläsning 7 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-21 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

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer

Läs mer

Objektorienterad Programkonstruktion

Objektorienterad Programkonstruktion Objektorienterad Programkonstruktion Föreläsning 9 Projektuppgift Collection, Iterator, Composite Christian Smith ccs@kth.se 1 Projektuppgift IM, skickar meddelanden mellan datorer En lite större labbuppgift,

Läs mer

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Föreläsning 1. Abstrakta datatyper, listor och effektivitet Föreläsning 1 Abstrakta datatyper, listor och effektivitet Föreläsning 1 Datastrukturer Abstrakta DataTyper ADT Lista Lista och Java Collections Framework (ArrayList) Lista implementerad med en array Analys

Läs mer

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find TDDI16 Datastrukturer och algoritmer Prioritetsköer, heapar, Union/Find Prioritetsköer En vanligt förekommande situation: Väntelista (jobbhantering på skrivare, simulering av händelser) Om en resurs blir

Läs mer

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd Föreläsning AVL-träd, Multi-Wa -sökträd, B-träd DDD7: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer november 5 omm Färnqvist, IDA, Linköpings universitet. Innehåll Innehåll Binära

Läs mer

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad F5: Debriefing OU2, repetition av listor, träd och hashtabeller Carl Nettelblad 2017-04-24 Frågor Kommer nog inte att täcka 2 timmar Har ni frågor på OU3, något annat vi har tagit hittills på kursen, listor

Läs mer

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö Stack < == > Stack och Kö Y s t M A p 1 Stack, specifikation En lista med element av typen T. Samtliga operationer utförs endast på listans ena ände, top. Stack() post: stacken är tom 2 Kö == > Y s t M

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Föreläsning 5 Algoritmer Experimentell komplexitetsanalys Kapitel 2.1-2.2, Kapitel 12.1-12.4 Algoritmer Algoritm Definition: Algoritm är en noggrann plan, en metod för att stegvis utföra något

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd Programmeringsmetodik DV1 Programkonstruktion 1 Moment 8 Om abstrakta datatyper och binära sökträd PK1&PM1 HT-06 moment 8 Sida 1 Uppdaterad 2005-09-22 Tabeller En viktig tillämpning är tabellen att ifrån

Läs mer

Föreläsning 5: Grafer Del 1

Föreläsning 5: Grafer Del 1 2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Föreläsning 13. Träd

Föreläsning 13. Träd Föreläsning 13 Träd Träd Ett träd är en datastruktur som tillåter oss att modellera sådant som vi inte kan modellera med linjära datastrukturer. Ett datavetenskapligt träd består av noder med pilar emellan.

Läs mer

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1) Binära träd Algoritmer och Datastrukturer Markus Saers markus.saers@lingfil.uu.se Upplägg Binära träd (9) Binära sökträd (0.) Träd Många botaniska termer Träd, rot, löv, gren, Trädets rot kan ha ett antal

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Rekursion. Koffman & Wolfgang kapitel 5

Rekursion. Koffman & Wolfgang kapitel 5 Rekursion Koffman & Wolfgang kapitel 5 1 Rekursivt tänkande Rekursion reducerar ett problem till en eller flera enklare versioner av samma problem. med enklare menas att underproblemen måste vara mindre,

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Datastrukturer och algoritmer Föreläsning 2 Fält Specifikation, Konstruktion och Specifikation, Konstruktion Dynamiska resurser Länk Länkade celler 23 24 Konstruktion av Fält Fysisk datatyp i

Läs mer

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV O, P, N och NP samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV DSV En enkel algoritm Ponera att du spelar poker och har fått korten till höger. Eftersom det bara rör sig om fem

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 8 Anton Grensjö grensjo@csc.kth.se 10 november 2015 Anton Grensjö ADK Övning 8 10 november 2015 1 / 34 Översikt Kursplanering F21: Introduktion till komplexitet

Läs mer

Föreläsning 8. Mängd, Avbildning, Hashtabell

Föreläsning 8. Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd, Avbildning, Hashtabell Föreläsning 8 Mängd (Set) Avbildning (Map) Hashtabeller Hashkoder Öppen adressering Länkning Effektivitet och minneskrav Implementering Läsanvisning och uppgifter

Läs mer

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

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande: Föreläsning 6 Innehåll Rekursion Begreppet rekursion Rekursiv problemlösning Samband mellan rekursion och induktion Söndra-och-härska-algoritmer Dynamisk programmering Undervisningsmoment: föreläsning

Läs mer

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

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

Läs mer

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram

Läs mer

Algoritmer och datastrukturer

Algoritmer och datastrukturer Algoritmer och datastrukturer Binära sökträd Hash Tabeller Sökning Många datastukturer försöker uppnå den effektivaste sökningen I arrayer - linjer sökning, och binärt sökning när arrayen kan vara sörterad

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 Läsanvisningar och

Läs mer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering

Läs mer