Vad har vi pratat om i kursen?

Save this PDF as:
 WORD  PNG  TXT  JPG

Storlek: px
Starta visningen från sidan:

Download "Vad har vi pratat om i kursen?"

Transkript

1 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

2 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

3 Minne När man startar ett program läggs det i datorns minne Data ligger åtskilt från programkoden i minnet Programkoden är konstant genom hela exekveringen Data kommer däremot att ändra sig under körning: När beräkningar utförs läggs resultatet i någon del av dataminnet Vartefter körningen fortgår kommer nya dataplatser att behövas vissa dataplatser är färdiganvända och behövs inte mer

4 Minne: referenser Kopiering: Anropsdata kopieras till parametrarna Referenser: Anropsdata kopieras inte. Istället blir parametrarna pekare (referenser) till anropsdata. Fördelar med referenser: CPU-krävande kopiering undviks Viktigt då data är stort Den anropade funktionen kan ändra på anroparens data Detta gör att man t.ex. kan returnera flera värden Nackdel med referenser: Programmeraren måste förstå skillnaden till kopiering

5 Rekursion När en funktion exekverar ligger dess variabler alltid överst på stacken Om en funktion anropar sig själv kommer en ny uppsättning variabler att läggas till på stacken Funktioner som anropar sig själva kallas rekursiva Rekursiva definitioner karaktäriseras av: Det måste finnas (minst) ett basfall Det måste finnas (minst) ett rekursivt fall Man särskiljer fallen genom något villkor Det rekursiva fallet måste ändra förutsättningarna för villkoret Basfallet innehåller inte rekursion Det rekursiva fallet innehåller rekursion

6 Rekursion Anrop: Fakultet(4) main Return 24 Rekursiv funktion: Fakultet(n) If n = 1 then Return 1 Return n*fakultet(n-1) Fakultet(4) Fakultet(3) Fakultet(2) Fakultet Fakultet Return 6 Return 2 Fakultet Return 1 Fakultet(1) Fakultet

7 ADT - Abstrakt DataTyp En definition av datats karaktär och De operationer som är möjliga på datat

8 ADT - Syfte Kortfattat: Att hålla isär Interface Implementation Användning Syftet är att underlätta konstruktion, återanvändning, testning, felsökning, läsbarhet. Genom att på detta sätt kapsla in implementationsdetaljer kan man undvika onödiga bindningar. Underlättar modifiering och vidareutveckling.

9 ADT ADT:n består av Ett interface och En implementation Genom att hålla isär dessa kan man vid behov ändra i implementationen. Så länge interfacet är detsamma så kommer de delar av programmet som använder ADT:n inte att påverkas.

10 ADT ADT:ns interface utgörs av allt som behövs för att kunna använda den, vanligen Ett namn på ADT:n Operationerna (med namn, indata och returdata). ADT:ns implementation är helt enkelt realiseringen av ADT:n En konkret beskrivning av hur data ska lagras och vilka typer de olika delarna har etc. Algoritmerna som behövs för respektive operation

11 Exempel: ADT:n RAT rationellt tal Rationella tal är detsamma som bråktal, t.ex. 7 3 eller 8 2 Talen över och under bråkstrecket är alltid hela tal.

12 ADT:n RAT rationellt tal De operationer som kan vara rimliga är t.ex de 4 räknesätten: Interfacet Funktion för att multiplicera två rationella tal. Returnerar produkten av dem: RAT muliply(rat r1, RAT r2) Funktion för att addera två rationella tal. Returnerar summan av dem: RAT add(rat r1, RAT r2)... etc.

13 ADT:n RAT rationellt tal Implementation, datalagring Eftersom rationella tal består av två heltal, täljare och nämnare så behövs bara ett par av heltal för att lagra det: <i 1, i 2 >

14 ADT:n RAT rationellt tal Implementation, multiplikation Algoritmen för att multiplicera två rationella tal är ganska rättfram: Vi vet att t.ex = 35 6 Dvs vi beräknar produkten av <i 1, i 2 > och <i 3, i 4 > som <i 1 * i 3, i 2 * i 4 >

15 ADT:er I litteraturen exemplifieras ADT:er ofta med t.ex. stack, kö, lista, träd. Men ADT konceptet är inte begränsat till sådana generella tillämpningar Man kan i princip betrakta vilken domän som helst som en ADT. T.ex. Ett schackbräde i ett schackspel Fiendeskepp i ett rymdfight-spel Person i ett personregister etc.

16 ADT:er För varje operation (dvs funktion eller metod) i en ADT anges Pre-condition: vilka krav på datat finns innan anropet. Post-condition: vad gäller för datat efter anropet. Vad som gäller för ett eventuellt returvärde. Ibland behöver man också beskriva med en lite längre text vad som utförs men aldrig hur det görs. Varför?

17 ADT - Allmänt Börja med att bestämma interfacet. Namn på ADT:n? Vilket data ska ADT:n ha? Vilka operationer vill vi kunna utföra på datat? Inparametrar? Returvärden? Preconditions? Postconditions? När vi vet detta börjar vi fundera på implementationen. Hur ska vi lagra datat? Hur ser algoritmerna ut för operationerna? Och hur implementerar vi detta?

18 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

19 Två typer av listor Länkad lista (eller bara lista ) Array ofta kallad vector eller fält Länkad lista är att föredra om insättning eller borttagning av element ofta behövs annat än i slutet Array är att föredra då direktaccess av godtyckliga element behövs ofta (med indexering) Om ingetdera gäller så är troligen array bäst Om båda gäller: gör ett klokt beslut!

20 Länkade listor, exempel En enkellänkad lista med 3 element: En nod Stoppmarkering i den sista nodens nextpekare head Det blå är elementet (själva datat) Pekare från en nod till nästa

21 Operationer på en länkad lista Lägga till en nod Först, sist, före, efter, på position... Ta bort en nod Först, sist, före, efter, på position Leta efter en nod i listan Skriva ut hela listan Räkna antalet noder i listan Slå ihop två listor etc...

22 Insättning i icke-tom lista Skapa en nod och sätt in datat (som tidigare) Skaffa en iterator Sätt den att peka på första noden Nu når vi till nästa nod via pilarna, ta den istället Upprepa tills det inte finns någon mer nod Nu kan vi sätt den hittills sista noden att peka på den nya noden

23 Insättning För att utföra insättningen itererade vi igenom alla elementen Detta är ineffektivt massor av bortkastad procesorkraft vid stora datamängder Vi kan lösas samma problem mer effektivt genom att implementera vår lista lite smartare! Hur? - Se till att listan har koll på både det första och sista elementet!

24 Remove Att ta bort ett element från någon plats Hur få tag på en iterator in till rätt nod? RemoveElement( ); Vi behöver pekare till denna nod...hur?

25 Mitt och ditt Vid användningen kan (och vill) man inte peta på listans implementation bara själva dataelementen som man lägger in i listan. Användning av ADT ADT interface ADT implementation

26 Mitt och ditt I listimplementationen kan (och vill) man hantera alla detaljer som har med själva listan att göra men inte användarens saker. Användning av ADT ADT interface ADT implementation

27 Olika typer av länkade listor Enkel länkad lista Dubbel länkad lista Pekare till första noden Pekare till både första och sista noden

28 Dubbel länkad lista Som en enkel länkad lista fast åt båda hållen. Ett data Två länkar (framåt och bakåt) Fördelar och nackdelar? Lika enkelt att iterera åt båda hållen Enklare att jobba med listan Mycket effektivare vid borttagning av nod Fler operationer för att tilldela data till en ny nod vid insättning

29 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

30 ADT:n Stack Stack är ett sätt att hantera data på enligt ett visst mönster Tänk på en stack som en hög tallrikar: Du kan bara plocka bort översta, och bara lägga dit en tallrik överst

31 ADT:en Stack Lägga data överst på stacken kallas Push Plocka bort datat överst på stacken kallas Pop Titta på översta datat kallas Peek Man kan fråga hur många element det finns på en stack med StackSize Kan en stack bli full? Teoretiskt, nej, men det beror på implementationen. En stack kallas ibland för en LIFO kö (Last In First Out)

32 Kan implementeras som en array 30 top Kan implementeras som en länkad lista 30 top //head Lägg till och ta bort vid top

33 ADT:n kö En kö består liksom en lista av en ordnad sekvens av element. Skillnaden är att i en kö stoppar man in elementen i ena änden och plockar ut dem i andra änden. Vanliga exempel är förstås sådana köer som man ibland måste stå och vänta i såsom bagageincheckning bankärenden butikskassa Etc. Finns olika typer av köer. Vi har tittat på FIFO köer. FIFO står för First In First Out, dvs en sådan vanlig kö som du har bekantat dig med på t.ex. Arlanda Detta köelement sätts in sist Detta köelement sattes in först

34 ADT:n kö Precis som en stack (och för den delen en lista) kan en kö realiseras genom en array. Fix längd => Array Dynamisk => Länkad lista Varför? Eftersom all access sker i ändarna (man behöver aldrig accessa ett visst index) så är man garanterad att länkade listan har fördel. Ibland vet man helt säkert att en kö inte kan bli längre än ett visst antal element. Detta kan sannolikt sammanträffa med begränsade resurser (t.ex. små inbyggda system) Array är då att föredra

35 Implementerad som array Start Front End Rear Lägg till vid Start Implementerad som länkad lista Ta bort vid End Start Front Head End Rear Foot

36 Cirkulär kö (arrayimplementation) En cirkulär kö är en kö av fix längd där start och front pekarna snurrar Beteendet uppnås med hjälp av modulus-operatorn. Start Front End Rear

37 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

38 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 och mängden data kan vara stor används stora ordo, O(x) för att ge en grov bild av komplexiteten. Komplexiteten för en algoritm är det antal distinkta steg den kan behöva för att slutföra en beräkning. Komplexitet uttrycks som en funktion av datamängden n. O-notation beskriver prestanda och komplexitet Kan beskriva exekveringstid eller minne n är mängden data som algoritmen behandlar O-notation beskriver värsta möjliga scenario

39 De mest använda komplexitetsklasserna NAMN O-NOTATION Konstant O(1) Logaritmisk O(log n) Linjär O(n) n log n O(n log n) Kvadratisk O(n 2 ) Kubisk O(n 3 ) Exponentiell O(2 n ) Exponentiell O(10 n )

40 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 linljär eller O(n), där n är antalet element. Om körtiden för en algoritm påverkas kvadratiskt (två nästlade loopar) av antalet element säger man att den är kvadratisk eller O(n 2 ), 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. Då datamängden hela tiden halveras (t.ex. sökning i binärt sökträd) är komplexiteten Logaritmisk eller O(n log n), där n är antalet element. etc.

41 Enkla regler 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() det blir Nästlade loopar multipliceras Sekventiella loopar adderas Man måste titta i alla funktioner som anropas. Om två loopar är nästlade på samma nivå i loophiearkin så är det den av looparna som kan iterera flest gånger som man räknar med. Bara den största (mest dominanta) termen behålls, resten skippas.

42 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

43 Träd Rot Förgrening Löv

44 Datastrukturen Träd Träd är icke-linjära datastrukturer som ofta används för att beskriva hierarkier Fönster på skärmen Widgets i fönstren Släktträd Etc. Ett träd är en samling element som sparas i noder, vilka är sammankopplade i en trädstruktur. Toppen på trädet kallas rot och varje träd (delträd) har en ensam rot.

45 Binära träd En speciell kategori av träd Varje förgrening går till högst två noder Lite enklare då det är en specialisering Vi fokuserade på binära träd i kursen

46 ADT:n Binärt träd Vår binära trädnod håller: - data - pekare till två nya noder data pekare pekare

47 Några begrepp Rutorna kallas noder (nodes), de innehåller något slags data som är av intresse för användningen Direkt under en nod finns högst två noder, barn (child, kid). Specifikt: Left child, right child. Alla noder utom en (rotnoden) har exakt en nod över sig, dess förälder (parent) rot (root) har inte någon annan nod över sig Anfäder (ancestors) till en nod: alla noder som kan nås genom att följa linjerna uppåt Ättlingar (descendants) till en nod: alla noder som kan nås genom att följa linjerna nedåt En nod som saknar barn är ett löv (leaf) Skog (forest): en mängd av träd Trädhöjd eller träddjup

48 Delträd E Delträd under rot noden Delträd under noden E

49 Definition Följande rekursiva definition gäller för binärt träd: Ingen nod är ett binärt träd (ett tomt binärt träd) En nod med två barnträd, ett vänster barnträd och ett höger barnträd, är ett binärt träd

50 ADT:ns operationer Sätta in en ny nod till vänster/höger Skapa nytt träd av två delträd (bind ihop dem med en ny nod) Ta bort vänster/höger barnträd Tala om vilket antal noder trädet har Tala om höjden (djupet) på trädet Svara på om en nod är löv resp. rot Returnera data Returnera vänster/höger barnnod Ta bort godtycklig nod (mer om detta senare) Traversera trädet

51 InsertSorted Att lägga till i ett binärt träd görs oftast sorterat. Om den nya nodens data är mindre än rotens data gå åt vänster Om den nya nodens data är större än rotens data gå åt höger Gör detta för varje delträd! Om trädet är sorterat kan vi använda den informationen även när vi ska söka efter data i trädet.

52 Traversering De metoder som brukar användas kallas Preorder: behandla data före besök av barnträden Inorder: behandla data mellan besöken av barnträden Postorder: behandla data efter att barnträden besökts

53 Remove Ta bort godtycklig nod från det sorterade binära trädet. Tre fall Ta bort löv Ta bort nod med ett höger ELLER vänsterbarn Ta bort en nod med ett höger OCH ett vänsterbarn Trädet ska fortfarande vara sorterat efter borttagningen

54 Ta bort löv Leta reda på noden som ska tas bort Se till att nå dess förälder på något sätt Sätt förälderns pekare till null Vi måste här veta vilken av förälderns pekare som ska sättas till null Lövet är borttaget

55 Ta bort nod med ett barn Nu är det fyra saker vi måste testa Nodens barn kan vara ett vänsterbarn Nodens barn kan vara ett högerbarn Noden som ska tas bort kan vara ett vänsterbarn Noden som ska tas bort kan vara ett högerbarn

56 Ta bort nod med ett barn Om noden har ett vänsterbarn Om noden är ett vänsterbarn Förälderns vänsterpekare ska peka på nodens vänsterbarn Annars (om noden är ett högerbarn) Förälderns högerpekare ska peka på nodens vänsterbarn Annars (om noden har ett högerbarn) Om noden är ett vänsterbarn Förälderns vänsterpekare ska peka på nodens högerbarn Annars (om noden är ett högerbarn) Förälderns högerpekare ska peka på nodens högerbarn

57 Ta bort nod med två barn Hitta det minsta värdet i höger delträd eller Det största värdet i vänster delträd Kopiera detta värde till den nod som ska tas bort Ta bort den nod som kopierades (antingen ett löv eller en nod med ett barn här kanske man kan göra ett rekursivt anrop?)

58 Att traversera från roten till en godtycklig nod i ett fullt träd är väsentligt effektivare än att ta sig till en godtycklig nod i en lista. N lg N Traversera i lista = O(n) Traversera i sorterat binärt träd = O(lg n) Värsta fallet för en lista är sista noden. Värsta fallet för ett binärt träd är ett löv i trädet.

59 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Balanserade sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

60 Linjär sökning Linjär sökning eller sekventiell sökning innebär att man tittar på alla element i ordning tills dess att man har hittat det eftersökta datat eller tills arrayen är slut. Det spelar ingen roll om arrayen är sorterad eller inte. Enkel insättning (sist)

61 Binärsökning Om arrayen är sorterad kan en klokare algoritm användas. Binärsökning går till så att: Först kollar vi elementet I mitten. Om det har en efterfrågade nyckel så är vi klara. Om inte Om den efterfrågade nyckeln är mindre än mitten elementet så utför vi binärsökning på vänster delarray. Annars utför vi binärsökning på höger delarray. Exampel: SEARCH(4) Steg 1 Steg 2: binärsökning i högra halvan Steg 3: binärsökning i vänstra halva (av högra halvan)

62 Ambition: Kombinera fördelarna med Hashtabeller Direktadressering: Operationer med O(1) tidskomplexitet Sorterad array: Platsbehovet O(N) där N är antalet element Hashtabeller går ut på att istället för att använda nyckeln som ett index direkt, utföra någon form av beräkning med nyckeln som input och ett index som output. Hash-indexet, eller hash-nyckeln, måste ligga i det intervall av index som finns i tabellens array. Funktionen som skapar en hash-nyckel från en nyckel kallas hash-funktion, h: U { 0, 1,, M-1} där M är antalet element, och U är mängden av alla möjliga nycklar. Vanligen väljer man M > U (om U är känt). I allmänhet är det inte möjligt att hitta garanterat unika hash-nycklar ofta vet man inte heller exakt vilka nycklar som kommer att uppträda, bara att de är för stora för direktadressering. Tricket med hashtabeller är att man accepterar att hash-nycklar kan krocka och har någon hantering av detta, så att problem inte uppstår

63 Hashtabeller För att garantera att hash-nyckeln hamnar inom arrayens tillåtna index, användas key modulus M, där key är elementets nyckel och M är antalet platser. Indexen kommer då alltid att bli 0...(M-1) Med nycklarna från tidigare exempel { 0, 2, 120, 121, , } och en arrastorlek på 10, skulle vi få hashnycklarna { 0, 2, 0, 1, 2, 3} Den enklaste formen av hashfunktion utför bara modulusoperationen Som vi ser här blir det krock mellan nycklarna 0 och 120 respektive 2 och Det finns flera varianter av beräkningar som hashfunktionen kan göra på en nyckel innan modulusoperationen appliceras, med syfte att minska risken för krock den kan normalt sett aldrig elimineras helt

64 Hashtabeller Några metoder för att lösa krockproblemet Öppen adressering Lista ("chaining")

65 Hashtabeller Öppen adressering linjär koll efter ledig Om ett index är upptaget letar vi framåt tills vi hittar ett ledigt Exempel: 12 mod 13 = 12 1 mod 13 = 1 54 mod 13 = 2 40 mod 13 = NIL NIL NIL 6 NIL 7 NIL 8 NIL 9 NIL 10 NIL 11 NIL 12 12

66 Hashtabeller "Chained" Hashtabellen utgör en array av länkade listor: 0 Exempel: 12 mod 13 = 12 1 mod 13 = mod 13 = mod 13 =

67 Hashtabeller Fördelen med chained är Nackdel Tabellen kan aldrig bli full En krock leder inte till att sannolikheten för krock ökar för andra hashnycklar Det går åt lite mer minne (betydelselöst)

68 Hashtabeller För att minska risken för krock (oavsett vald metod för att lösa krockar): Välj en bra storlek på tabellen: storlek som är ett primtal storlek om minst ca 1.3 gånger antalet element problem: man vet inte alltid antalet element på förhand att ändra storleken då det redan finns element på plats leder till att man inte längre hittar rätt element (pga mod): tabellen måste byggas om Välj bra hashfunktion Alla bitar involveras i beräkningen

69 Balanserade sökträd Definition: Binärt sökträd (BST) är en datastruktur i form av ett binärt träd med följande egenskaper: varje nod (elementets nyckel) has a value; en total ordning (linär ordning) är definierad på dessa värden > Det vänstra subträdet till en nod innehåller bara värden mindre än eller lika denna nods värde Det högra subträdet av noden innehåller bara värden större än denna nods värde

70 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 Föreläsning 6 & 7 ADT:n Binärt träd Föreläsning 8 Sökning Föreläsning 9 Sortering Föreläsning 10 Sekventiell sökning Binärsökning Hashtabeller Binära sökträd Bubblesort Insertionsort Selectionsort Mergesort Quicksort Grafer

71 Klassificering Man kan särskilja tre huvudmetoder för att sortera data (illustrerad med en tänkt kortlek): Byten, "swapping" Lägg korthögen på bordet. Dra två intilliggande kort och lägg tillbaks dem på samma plats men i inbördes rätt ordning. Fortsätt tills hela högen är sorterad. Urvalssortering "selection sort" Lägg korthögen på bordet. Leta upp det minsta kortet och behåll det i handen. Leta upp det kort som nu är det minsta och sätt det under det du senast tog. Fortsätt tills högen är tom. Insättningssortering "insertion sort" Lägg korthögen på bordet. Ta det översta kortet från högen och behåll det i handen. Ta det kort som nu är överst och sätt det på sin rätta plats bland de kort som du har i handen. Fortsätt tills högen är tom.

72 Bubbelsortering Algoritmen Vi börjar med att angripa problemet med bubbelsortering. Det uppfattas ofta som enkelt att inse att algoritmen verkligen sorterar elementen. Dessutom är den också förhållandevis enkel att programmera. Den är dock mest av akademiskt intresse, då den inte är så effektiv (den används sannolikt aldrig annat än som introduktionsexempel på denna typ av kurser). Grunden i algoritmen är att jämföra två element som ligger intill varandra och byta plats på dem om den inbördes ordningen är fel. Sen gäller det bara att upprepa detta tillräckligt många gånger för alla element för att man ska vara övertygad om att hela mängden av element är sorterad.

73 Bubbelsortering Förbättringar man kan göra Man kan minska antalet element som jämförs med ett varje varv. Man kan avsluta algoritmen om inget byta gjorts på ett helt varv Man kan jobba från två håll

74 Insättningssortering Vi tänker oss att arrayen består av 2 delar, V (som alltid är sorterad) och H (som alltid är osorterad). Från början innehåller V ett element (det första ett element är per definition färdigsorterat utan att man behöver göra något). Resten av elementen finns i H. I varje runda krymper H med ett element och V utökas med ett element. Det är alltid det första elementet som tas från H, och detta sätts in på rätt plats i V.

75 Selektionssortering Denna algoritm beter sig i någon mening omvänt mot Insättningssorteringen. Betrakta återigen arrayen som två delar V och H (vänster och höger) V är initialt tom, alla element ligger i H Leta upp det minsta elementet i H. Byt detta med det första i H Flytta fram gränsen mellan V och H. Upprepa tills H har bara ett element

76 Härska genom att söndra Mergesort och quicksort skiljer sig från bubblesort, insertionsort och selectionsort I stället för det inkrementella angreppssättet... t.ex.: InsertionSort: när den partiella arrayen, A[0..j-1] är sorterad så tar man itu med elementet A[j]... så använder de "härska genom att söndra"-paradigmen "Söndra" (dela ner) problemet i ett antal delproblem "Härska" (ta kontrollen över) delproblemen rekursivt så länge de är "stora" direkt om de är tillräckligt små Kombinera alla lösningar till delproblemen för att få en lösning till hela problemet

77 Mergesort Merge (="blanda") avser i detta fall att sätta samman två eller fler redan sorterade sekvenser, på ett sådant sätt att även den nya är sorterad. Exempel: (10, 23, 36, 42) (4, 6, 54, 64) (4, 6, 10, 23, 36, 42, 54, 64) Det är trivialt att sekvenser av längden 1 är sorterade. Sådana kan lätt kombineras ihop för att bilda sekveser som är 2 långa, som kan kombineras ihop till sekvenser av längd 4, etc. Mergesort följer "härska genom att söndra"-paradigmen ("divide and conquer"): Divide: Dela upp en Array A av längden N i två delarrayer A1 och A 2 var och en av längden N/2 Conquer: Sortera delarrayerna rekursivt genom att applicera Mergesort (med basvillkor som baserar sig på att en delarray av längden 1 är sorterad per definition) Combine: "Merga" de sorterade delarrayerna till en sorterad array

78 Quicksort Quicksort baserar sig på byten (liksom bubbelsortering) kombinerat med "divide and conquer" (likt mergesort). En sekvens, S, sorteras enligt Divide: Välj ett element x (kallat pivot) och partitionera S till X - L element mindre än x - E element lika med x - G element större än x X Conquer: Sortera L och G genom rekursion L E G X Combine: Behövs inte, eftersom L, E och G redan ligger i samma array.

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

Träd. Rot. Förgrening. Löv

Träd. Rot. Förgrening. Löv Träd Träd Rot Förgrening Löv Exempel: Organisationsschema Rot Överkucku Förgrening Underhuggare Underhuggare Administativ chef Kanslichef Knegare Knegare Knegare Byråchef Löv Intendent Avd. chef Intendent

Läs mer

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

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

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

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

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

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Sortering Selectionsort, Bubblesort,

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö Datastrukturer och algoritmer Föreläsning 4 Test, Stack och Kö 1 Innehåll Test Datatyperna Stack och kö Specifikation och Gränssnitt Konstruktion Tillämpning 2 Testa VIKTIGT! Test går att göra under många

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

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

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

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig

Läs mer

Programkonstruktion och. Datastrukturer

Programkonstruktion och. Datastrukturer Programkonstruktion och Datastrukturer Repetitionskurs, sommaren 2011 Datastrukturer (Listor, Träd, Sökträd och AVL-träd) Elias Castegren elias.castegren.7381@student.uu.se Datastrukturer Vad är en datastruktur?

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

TDDC Terminologi Uppdaterad Fö #1

TDDC Terminologi Uppdaterad Fö #1 Det här dokumentet ska inte ses som en uttömmande förklaring av varje term, utan snarare som en snabb påminnelse om vad varje enskild term betydde. För en mer noggrann beskrivning, se kursmaterialet eller

Läs mer

Föreläsning 9. Sortering

Föreläsning 9. Sortering Föreläsning 9 Sortering Föreläsning 9 Sortering Sortering och Java API Urvalssortering Instickssortering Söndra och härska Shellsort Mergesort Heapsort Quicksort Bucketsort Radixsort Läsanvisningar och

Läs mer

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn Träd allmänt Träd allmänt Ett generellt träd är Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn där t1,..., tn i sin tur är träd och kallas subträd, vars rotnoder kallas

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:

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

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

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

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar Föreläsning 1 Innehåll ADT Prioritetskö Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util ar Implementering av prioritetskö med heap Sortering med hjälp

Läs mer

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon. Datastrukturer och algoritmer Föreläsning 7 Tabell, hashtabell Relation & lexikon Innehåll Tabell Tabell Hashtabell Relation, lexikon Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden

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

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

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

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

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

Föreläsning 5. 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

Föreläsning 5. 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 Föreläsning 5 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 Terminologi - träd Ett träd i datalogi består av en rotnod

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum och tid för tentamen: 2017-01-11, 14:00 18:00. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 15:00 och ca 17:00. Godkända

Läs mer

Seminarium 13 Innehåll

Seminarium 13 Innehåll Seminarium 13 Innehåll Prioritetsköer och heapar Prioritetsköer ADTn Klassen PriorityQueue i java.util Implementering med lista Heapar ADTn För implementering av prioritetskö För sortering Efter seminariet

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

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037) Föreläsning 5 Datastrukturer (DAT037) Nils Anders Danielsson, Fredrik Lindblad 2016-11-14 Förra gången: Cirkulära arrayer Prioritetskö Binära heapar Leftistheapar merge Det verkar inte gå att slå ihop

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

Datastrukturer. Föreläsning 5. Maps 1

Datastrukturer. Föreläsning 5. Maps 1 Datastrukturer Föreläsning 5 Maps 1 Traversering av träd Maps 2 Preordningstraversering Traversera = genomlöpa alla noderna i ett träd Varje nod besöks innan sina delträd Preordning = djupet först Exempel:

Läs mer

Tentamen, Algoritmer och datastrukturer

Tentamen, Algoritmer och datastrukturer UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och

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

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

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar Föreläsning 1 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Heapar Implementering av prioritetskö med heap Sortering med hjälp av heap

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

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-27 Idag Balanserade sökträd Splayträd Skipplistor AVL-träd AVL-träd Sökträd Invariant (för varje nod): Vänster och höger delträd har samma

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2013-03-27 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal

Läs mer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

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

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

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 25 26 Fält Modell Schackbräde Organisation n-dimensionellt

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

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

Programkonstruktion och. Datastrukturer

Programkonstruktion och. Datastrukturer Programkonstruktion och Datastrukturer Repetitionskurs, sommaren 2011 Datastrukturer (hash-tabeller och heapar) Elias Castegren elias.castegren.7381@student.uu.se Arrayer igen En array är en linjär datastruktur

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

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

Ö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

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

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960) Tentamen Datastrukturer (DAT036/DAT037/DIT960) Datum och tid för tentamen: 2016-04-07, 14:00 18:00. Författare: Nils Anders Danielsson. (Tack till Per Hallgren och Nick Smallbone för feedback.) Ansvarig:

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

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

Datastrukturer. föreläsning 6. Maps 1

Datastrukturer. föreläsning 6. Maps 1 Datastrukturer föreläsning 6 Maps 1 Avbildningar och lexika Maps 2 Vad är ett lexikon? Namn Telefonnummer Peter 031-405937 Peter 0736-341482 Paul 031-405937 Paul 0737-305459 Hannah 031-405937 Hannah 0730-732100

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

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

Föreläsning 11. ADT:er och datastrukturer

Föreläsning 11. ADT:er och datastrukturer Föreläsning 11 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Datastrukturer och algoritmer Föreläsning 16 2 Innehåll Snabbrepetition Exempeltentamen Kursutvärdering Mina målsättningar Kursens mål: 3 Rolig och viktig kurs Bli en bättre programmerare och inse att

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

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

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen

Läs mer

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden Sortering Brute-force Sortering Ordna element enligt relation mellan nyckelvärden Flera olika algoritmer med olika fördelar Brute-force Gå igenom alla permutationer och hitta den där elementen ligger i

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

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

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Föreläsning 1 Snabbrepetition Exempeltentamen ursvärdering Mina målsättningar Innehållsöversikt Rolig och viktig kurs Bli en bättre programmerare och inse att man blivit det änna till kända lösningar

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

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

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011 DD1320 Tillämpad datalogi Lösning (skiss) till tenta 20 okt 2011 1 KMP P I P P I N i 1 2 3 4 5 6 Next[i] 0 1 0 2 1 3 2 Huffmankodning: Algoritmen 1. Sortera tecknen som ska kodas i stigande förekomstordning.

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 5 ADT Map/Dictionary, hashtabeller TDDI16: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 16 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 5.1 Innehåll Innehåll

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Lägre gräns för sortering Count sort,

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning

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

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

Linjär sökning. Föreläsning 12. Binär sökning. Exempel: Binära sökträd. Binärt sökträd

Linjär sökning. Föreläsning 12. Binär sökning. Exempel: Binära sökträd. Binärt sökträd Föreläsning 2 Sökning, Sökträd och Sortering Linjär sökning Starta från början och sök tills elementet hittat eller sekvensen slut. Komplexitet Elementet finns: I medel gå igenom halva listan, O(n) Elementet

Läs mer

Datastrukturer. föreläsning 9. Maps 1

Datastrukturer. föreläsning 9. Maps 1 Datastrukturer föreläsning 9 Maps 1 Minsta uppspännande träd Maps 2 Minsta uppspännande träd Uppspännande träd till graf fritt delträd innehåller alla noderna Minsta uppspännande träd (MST) är det uppspännande

Läs mer

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell Innehåll Föreläsning Mängd, lexikon och hashtabell Mängd Lexikon Hashtabell Mängd Specifikation Modell: En påse, men den är inte riktigt bra eftersom man tex kan ha mängder med gemensamma element. Organisation:

Läs mer

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två Binära träd Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två gånger, talar man om binära träd. Sådana

Läs mer

Hashtabeller. TDA416, lp3 2016

Hashtabeller. TDA416, lp3 2016 Hashtabeller TDA416, lp3 2016 Mängder och avbildningar (Sets and Maps) I den abstrakta datatypen avbildning/uppslagstabell (Map) lagras nyckelvärde-par. Grundläggande operationerna är insättning, borttagning

Läs mer

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande

Läs mer