Lösningsförslag till exempeltenta 1

Relevanta dokument
Lösningsförslag till exempeltenta 2

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

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

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

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

Föreläsning 9 Innehåll

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

Tentamen i Algoritmer & Datastrukturer i Java

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Föreläsning Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Föreläsning 10 Datastrukturer (DAT037)

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Algoritmer och datastrukturer 2012, fo rela sning 8

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

13 Prioritetsköer, heapar

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Länkade strukturer, parametriserade typer och undantag

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Föreläsning 14. Filhantering

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Dugga Datastrukturer (DAT036)

Sökning och sortering

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

Tentamen. Lösningsförslag

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen, Algoritmer och datastrukturer

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

TDDD78 Viktiga begrepp, del 2

Algoritmer och datastrukturer

Lösningar Datastrukturer TDA

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

Tentamen i Algoritmer & Datastrukturer i Java

Grafik, grafiska användargränssnitt och rörliga bilder

Datastrukturer. föreläsning 3. Stacks 1

Trädstrukturer och grafer

Seminarium 13 Innehåll

TENTAMEN OOP

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Tentamen Datastrukturer (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

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

public boolean containskey(string key) { return search(key, head)!= null; }

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

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

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 14 Innehåll

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Lösningsförslag till tentamen

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

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

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

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å

Självbalanserande AVL-träd Weiss, avsnitt 4.4

Innehåll. Sökning och hashtabeller. En bilsamling att söka i. En bil-klass att söka efter. Hur hittar vi alla bilar som uppfyller ett annat villkor

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

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

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Lösningsförslag till tentamen

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Föreläsning 10 Innehåll

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

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 9 Innehåll

Exempeltenta GruDat 2002/2003

Del A (obligatorisk för alla)

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Laboration 13, Arrayer och objekt

Del A (obligatorisk för alla)

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

Transkript:

Lösningsförslag till exempeltenta 1 1

1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2

Uppgift 1 - Lösning Huvudidé: - Titta på datan i den mittersta cellen. Om den är lika med den data vi letar efter returnera positionen Om den är större än den data vi letar efter leta i den vänstra halvan Om den är mindre än den data vi letar efter leta i den högra halvan Användning: Används på sorterade samlingar. Tidskomplexitet: O(log n) 3

Uppgift 1 - Lösning Pseudokod rekursiv variant: int binarysearch(array, target, low, high) //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG IF array[mid] <= target THEN binarysearch(array, target, mid, high) // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 4

Uppgift 1 - Lösning Pseudokod iterativ variant: int binarysearch(array, target) low = 0 high = array.length WHILE(high low > 0) mid = (low + high + 1) / 2 IF array[mid] > target THEN high = mid 1 ELSE low = mid IF array[low] = target THEN RETURN low ELSE RETURN -1 5

Uppgift 1 Lösning Exempel: Sök efter talet 15 1 2 15 20 50 60 70 80 90 6

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 15 == 50? 7

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 15 == 50? Nej 8

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 15 == 50? Nej 50 > 15? 9

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 15 == 50? Nej 50 > 15? Ja 10

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 (array[(0+3) / 2)] = array[1]) == 15? 11

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 (array[(0+3) / 2)] = array[1]) == 15? Nej (array[(0+3) / 2)] = array[1]) > 15? 12

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 (array[(0+3) / 2)] = array[1]) == 15? Nej (array[(0+3) / 2)] = array[1]) > 15? Nej 13

Uppgift 1 Lösning Exempel: Sök efter talet 15 15 1 2 15 20 50 60 70 80 90 (array[(2+3) / 2)] = array[2]) == 15? Ja returnera index 2 14

2. Skriv koden för en klass som implementerar följande gränssnitt(interface2) och innehåller minst två egna metoder. public interface Interface2 { public String getdescription(); 15

Uppgift 2 lösningsförslag public class Uppgift2 implements interface2 { private String name = ""; private String address = ""; // constructor public Uppgift2(String n, String a) { name = n; address = a; 16

Uppgift 2 lösningsförslag public class Uppgift2 implements interface2 { private String name = ""; private String address = ""; //setter public void setname(string n) { name = n; /setter public void setadress(string a) { address = a; 17

Uppgift 2 lösningsförslag public class Uppgift2 implements interface2 { private String name = ""; private String address = ""; //getter public String getname() { return name; /getter public void getadress() { return address; 18

Uppgift 2 lösningsförslag public class Uppgift2 implements interface2 { private String name = ""; private String address = ""; // method from the interface public String getdescription() { return "name: " + name + "address: " + address; 19

Uppgift 2 lösningsförslag public class Uppgift2 implements interface2 { private String name = ""; private String address = ""; //method public String addname(string n) { Name += " " + n; //method public String addcity(string city) { address += " " + city; 20

3. Förklara begreppet arv och ge ett kodexempel. Lösning: Arv innebär att man skapar nya klasser, subklasser, från Existerande klasser, superklasser, och utökar dem med nya metoder och instansvariabler. 21

3. Förklara begreppet arv och ge ett kodexempel. Lösning: public class MySuperClass { // instance variable int size = 1; // constructor public MySuperClass(int s) { size = s; 22

3. Förklara begreppet arv och ge ett kodexempel. Lösning: public class MySuperClass { // instance variable int size = 1; //setter public int setsize(int s) { Size = s; //getter public int getsize() { return size; 23

3. Förklara begreppet arv och ge ett kodexempel. Lösning: public class MySuperClass { // instance variable int size = 1; //method public void printsize() { System.out.println(size); 24

3. Förklara begreppet arv och ge ett kodexempel. Lösning: public class SubClass1 extends MySuperClass { // default constructor public SubClass1() { //method public int increasesize(int i) { size += i; 25

4. Vad kommer följande program att skriva ut? Förklara exempel 5 och 10 i detalj. public class TestRegularExpression { private static void tryreg(string ex, String regexp, String text) { if (text.matches(regexp)) { System.out.println(ex + " matchar."); else { System.out.println(ex + " matchar INTE."); 26

Uppgift 4 public static void main(string[] args) { tryreg("exempel 1", "a?b.*", "bb"); tryreg("exempel 2", "(ac)+", "acac"); tryreg("exempel 3", "ab*", "abbbbbbbb"); tryreg("exempel 4", "ab*", "abab"); tryreg("exempel 5", "a?b*", "abab"); tryreg("exempel 6", "a?b*", "bbbbbbb"); tryreg("exempel 7", "a+b*", "abbbbbbb"); tryreg("exempel 8", "((aa) (bb)).*c.*", "aaaacc"); tryreg("exempel 9", "((aa) (bb)).*c.*", "bbaacc"); tryreg("exempel 10", "((aa) (bb)).*c.*", "baacc"); 27

Uppgift 4 Lösning tryreg("exempel 1", "a?b.*", "bb"); Utskrift: Exempel 1 matchar. Förklaring: a? - option, a antingen finns eller inte b - b måste finnas.* - vad som helst får finnas 28

Uppgift 4 Lösning tryreg("exempel 2", "(ac)+", "acac"); Utskrift: Exempel 2 matchar. Förklaring: (ac)+ - ac måste finnas minst en gång 29

Uppgift 4 Lösning tryreg("exempel 3", "ab*", "abbbbbbbb"); Utskrift: Exempel 3 matchar. Förklaring: a - strängen måste börja på a b* - måste finnas finnas 0 eller flera b 30

Uppgift 4 Lösning tryreg("exempel 3", "ab*", "abbbbbbbb"); tryreg("exempel 4", "ab*", "abab"); Utskrift: Exempel 3 matchar. Exempel 4 matchar INTE. Förklaring: a - strängen måste börja på a b* - måste finnas finnas 0 eller flera b 31

Uppgift 4 Lösning tryreg("exempel 5", "a?b*", "abab"); tryreg("exempel 6", "a?b*", "bbbbbbb"); Utskrift: Exempel 5 matchar INTE. Exempel 6 matchar. Förklaring: a? - option, strängen måste antingen börja på a eller inte b* - resten av strängen måste bestå av 0 eller flera b abab innehåller a mellan b:na och därför matchar inte Strängen det reguljära uttrycket a?b* 32

Uppgift 4 Lösning tryreg("exempel 7", "a+b*", "abbbbbbb"); Utskrift: Exempel 7 matchar. Förklaring: a+ - strängen måste börja med ett eller a b* - resten av strängen måste bestå av 0 eller flera b 33

Uppgift 4 Lösning tryreg("exempel 8", "((aa) (bb)).*c.*", "aaaacc"); tryreg("exempel 9", "((aa) (bb)).*c.*", "bbaacc"); tryreg("exempel 10", "((aa) (bb)).*c.*", "baacc"); Utskrift: Exempel 8 matchar. Exempel 9 matchar. Exempel 10 matchar INTE. Förklaring: (aa bb) - strängen måste börja med aa eller bb.* - strängen fortsätter med vad som helst c - strängen fortsätter med ett c.* - strängen avslutas med vad som helst Strängen baacc börjar inte på aa eller bb så därför matchar strängen inte det reguljära uttrycket "((aa) (bb)).*c.*" 34

5a. Vilka strängar med längd mindre 4 matchar detta reguljä uttryck: ab?c*. 5b. Vilka strängar med längd mindre 4 matchar detta reguljära uttryck: a*+b 5c. Vilka strängar med längd mindre 4 matchar detta reguljä uttryck: (a*bc c*d?e)+ 35

5a. Vilka strängar med längd mindre 4 matchar detta reguljära uttryck: ab?c*. Lösning: Längd 1: a Längd 2: ab, ac Längd 3: abc, acc 36

5b. Vilka strängar med längd mindre 4 matchar detta reguljära uttryck: a*+b Lösning: Längd 1: b Längd 2: ab Längd 3: aab 37

5c. Vilka strängar med längd mindre 4 matchar detta reguljära uttryck: (a*bc c*d?e)+ Lösning: Längd 1: e Längd 2: bc, de, ee, ec, ed Längd 3: abc, bce, cde, cce, dee, eee, ebc, ece, ede 38

6. Skapa en klass för enkellänkade listor av Strängar (String) utan att använda Javas standardklasser för listor. I klassen ska det finnas en klass för noderna som länkas samman i listan. Motivera varför du skapar den som du gör! 39

Uppgift 6 - Lösning En enkellänkad listad består av noder. Varje nod Innehåller en sträng och en pekare till nästa nod. data next 3 data next 2 40

Uppgift 6 - Lösning En enkellänkad listad består av noder. Varje nod Innehåller en sträng och en pekare till nästa nod. private class Node { String data; Node next; Node(int v, Node n) { data=v; next=n; data next data next 3 2 41

Uppgift 6 - Lösning public class MyLinkedList{ // privat klass Node som håller reda på // noderna i listan. De klasserna som // använder MyLinkedList behöver inte veta // hur MyLinkedList är uppbyggd. private class Node { String data; Node next; public Node(String d, Node n) { data = d; next = n; // En instansvariabel som håller reda på // i vilken nod listan börjar i. Node start; 42

Uppgift 6 - Lösning public class MyLinkedList{ // Metod som placerar alla nya strängar // sist i listan. Behövs för att man // ska kunna lägga till i en lista. public void add(string s){ if(start == null) { start = new Node(s, start); else { Node currentnode = start; while (currentnode.next!= null) { currentnode = currentnode.next; currentnode.next = new Node(s, null); 43

Uppgift 6 - Lösning public class MyLinkedList{ // Metod som returnerar var strängen s är // någonstans i listan // Bra om man vill veta om en sträng s // finns i listan innan man lägger till den public int search(string s){ // kod i lab 1 // Metod som tar bort alla förekomster // av strängen s i listan // Bra om man ångrar att s finns i listan // och vill ta bort den (s är överflödig) public void delete(string s){ // kod i lab 1 44

7. Skriv koden för en klass som implementerar gränssnittet(interface7). Metoden decorder undersöker om en heltalen(int) i en array är ordnad från större tal till mindre tal och returnerar sant om så är fallet och falskt annars. public interface Interface7 { public boolean decorder(int[] array); 45

Uppgift 7 Lösning public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; 46

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 47

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 48

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i 49

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i i + 1 50

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i 51

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i i + 1 52

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i 53

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i i + 1 54

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 i 55

Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 4 3 1 56

Uppgift 7 Lösning -Testkörning 2 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 5 3 1 57

Uppgift 7 Lösning -Testkörning 2 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 5 3 1 58

Uppgift 7 Lösning -Testkörning 2 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 5 3 1 i 59

Uppgift 7 Lösning -Testkörning 2 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 5 3 1 i i + 1 60

Uppgift 7 Lösning -Testkörning 2 public class Uppgift7 implements Inteface7 { public boolean decorder(int[] array) { if(array.length == 0 array.length == 1) return true; for(int i = 0; i < array.length-1; i++) if(array[i + 1] > array[i]) return false; return true; array: 4 5 3 1 i i + 1 61

8. Förklara hur ett binärt sökträd fungerar. Ge ett exempel vad man kan använda dem till. 62

Binärt sökträd - Exempel key 1 2 3 4 5 6 7 8 9 63

Binärt sökträd - Exempel key 1 2 3 4 5 6 7 8 9 key == 5? Färdigt key < 5? Sök i det vänstra barnet key > 5? Sök i det högra barnet 64

Binärt sökträd - Exempel key 5 1 2 3 4 6 7 8 9 key == 5? Färdigt key < 5? Sök i det vänstra barnet key > 5? Sök i det högra barnet 65

Binärt sökträd - Exempel key 5 1 2 3 4 6 7 8 9 key == 3? Färdigt key < 3? Sök i det vänstra barnet key > 3? Sök i det högra barnet 66

Binärt sökträd - Exempel key 5 3 6 7 8 9 1 2 4 key == 3? Färdigt key < 3? Sök i det vänstra barnet key > 3? Sök i det högra barnet 67

Binärt sökträd - Exempel key 5 3 6 7 8 9 2 4 1 key == 2? Färdigt Key < 2? Sök i det vänstra barnet Key > 2? Sök i det högra barnet 68

Binärt sökträd - Exempel key 5 3 6 7 8 9 2 4 1 key == 8? Färdigt key < 8? Sök i det vänstra barnet key > 8? Sök i det högra barnet 69

Binärt sökträd - Exempel key 5 3 8 2 4 6 7 9 1 key == 8? Färdigt key < 8? Sök i det vänstra barnet key > 8? Sök i det högra barnet 70

Binärt sökträd - Exempel key 5 3 8 2 4 7 9 1 6 key == 7? Färdigt key < 7? Sök i det vänstra barnet key > 7?Sök i det högra barnet 71

Binärt sökträd - Exempel 5 3 8 2 4 7 9 1 6 72

Binärt sökträd - ADT - Ett binärt sökträd består av noder med följande innehåll: - nyckel (key) - data - pekare till det vänstra barnet - pekare till det högra barnet Vänster barn key data Höger barn 73

Binärt sökträd - ADT 5 3 8 2 4 7 9 1 6 74

Träd - teor 5 3 8 2 4 7 9 1 6 ROT Den som finns högst upp i trädet Interna noder Noder som har en förälder och minst ett barn LÖV(TERMINAL) Noderna längst ner i trädet 75

Tree - Theory 5 3 8 2 4 7 9 1 6 ROT Den som finns högst upp i trädet Interna noder Noder som har en förälder och minst ett barn LÖV(TERMINAL) Noderna längst ner i trädet 76

Tree - Theory 5 3 8 2 4 7 9 1 6 ROT Den som finns högst upp i trädet Interna noder Noder som har en förälder och minst ett barn LÖV(TERMINAL) Noderna längst ner i trädet 77

Binärt sökträd - Teori Hur många jämförelser behöver vi använda innan vi hittat den rätta nyckeln(key)? Svar: I värsta fall behöver vi vandra i trädet till vi kommit ner till ett löv. 78

Binärt sökträd - Teori Hur många jämförelser behöver vi använda innan vi hittat den rätta nyckeln(key)? Svar: I värsta fall behöver vi vandra i trädet till vi kommit ner till ett löv. Notera: - Om trädet är obalanserat behöver vi O(n) jämförelser - Om trädet är balanserat behöver vi O(log (n)) jämförelser 79

Obalanserat träd - Exempel 1 2 3 4 5 6 7 8 9 Antal noder: 9 Höjd: 9 Söktid: O(n) 80

Balanserat träd - Exempel 5 3 8 2 4 7 9 1 6 Antal noder: 9 Höjd: 4 Söktid: O(log(n)) 81

Binära sökträd Användning Nycklarna i ett binärt sökträd lagras i en sorterad ordning och om trädet är balanserat, så kan vi förbättra söktiden till O(log (n)) 82