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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 Rum

2 Idag - Sökalgoritmer - Algoritmanalys - Sorteringsalgoritmer 2

3 Sökalgoritmer 3

4 Sökalgoritmer Vad är sökning? - Hitta ett värde i en samling, till exempel i en array - Returvärden: om värdet finns: det index värdet finns i om värdet inte finns: -1 - Algoritmer: om samling är osorterad: linjär sökning om samling är sorterad: binär sökning 4

5 Algoritm- och komplexitsteori Algoritm Instruktioner som steg för steg beskriver hur man löser ett givet problem. Pseudokod Beskrivning av en algoritm, påminner om kod som innehåller naturligt språk och/eller matematiska formler. Tidskomplexitet Talar om hur lång tid algoritmen behöver för att lösa problemet Minneskomplexitet Talar om hur mycket minne algoritmen behöver för för att lösa problemet. 5

6 Algoritm- och komplexitsteori Algoritm Instruktioner som steg för steg beskriver hur man löser ett givet problem. Pseudokod Beskrivning av en algoritm, påminner om kod som innehåller naturligt språk och/eller matematiska formler. Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; 6

7 Översätta pseudokod till JAVA Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; int linearsearch(int array[], int target) { 7

8 Översätta pseudokod till JAVA Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; int linearsearch(int array[], int array) { for(int i = 0; i < array.length; i++) { 8

9 Översätta pseudokod till JAVA Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) 9

10 Översätta pseudokod till JAVA Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; 10

11 Översätta pseudokod till JAVA Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 11

12 Översätta pseudokod till JAVA Exempel: linearsearch(array, target) FOR EACH i FROM 0 TO array.length - 1 IF(array[i] = target) THEN RETURN i; RETURN -1; int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 12

13 Linjär sökning Huvudidé: Gå igenom samlingen tills man gjort en träff eller samlingen är slut. Användning: Används på osorterade samlingar. 13

14 Linjär sökning Sök efter siffra 5 i arrayen int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 14

15 Linjär sökning Sök efter siffra 5 i arrayen int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 15

16 Linjär sökning Sök efter siffra 5 i arrayen int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 16

17 Linjär sökning Sök efter siffra 5 i arrayen == 5? int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 17

18 Linjär sökning Sök efter siffra 5 i arrayen == 5? Nej int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 18

19 Linjär sökning Sök efter siffra 5 i arrayen int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 19

20 Linjär sökning Sök efter siffra 5 i arrayen == 5? int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 20

21 Linjär sökning Sök efter siffra 5 i arrayen == 5? Nej int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 21

22 Linjär sökning Sök efter siffra 5 i arrayen == 5? int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 22

23 Linjär sökning Sök efter siffra 5 i arrayen == 5? Nej int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 23

24 Linjär sökning Sök efter siffra 5 i arrayen == 5? int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 24

25 Linjär sökning Sök efter siffra 5 i arrayen == 5? Ja int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; 25

26 Tidskomplexitet int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; - Varje jämförelse (array[i] == target) kostar 1 26

27 Tidskomplexitet int linearsearch(int array[], int target) { for(int i = 0; i < array.length; i++) { if(array[i]== target) return i; return -1; - Varje jämförelse (array[i] == target) kostar 1 - I värsta fall behöver vi jämföra alla celler i array, dvs array.length = n gånger. 27

28 Tidskomplexitet I värsta fall 1 kostnad för en jämförelse (array[i] == target) n arrayens längd (array.length) Tidskomplexitet i värsta fall: T =1 n O(n) Kallas för linjär komplexitet. 28

29 Linjär sökning Tidskomplexitet Fall Tidskomplexitet Kommentar I värsta fall: I genomsnitt: O(n) O(n) Det sökta värdet finns inte i samlingen I bästa fall: O(1) Det sökta värdet finns i den första platsen I arrayen 29

30 Binär sökning 30

31 Binär sökning Exempel: Sök efter talet

32 Binär sökning Exempel: Sök efter talet == 2? 32

33 Binär sökning Exempel: Sök efter talet == 2? Nej 33

34 Binär sökning Exempel: Sök efter talet == 2? Nej 5 > 2? 34

35 Binär sökning Exempel: Sök efter talet == 2? Nej 5 > 2? Ja 35

36 Binär sökning Exempel: Sök efter talet (Array[(0+3+1)/2] =Array[2] = 3) == 2? 36

37 Binär sökning Exempel: Sök efter talet (Array[(0+3+1)/2] =Array[2] = 3) == 2? Nej 37

38 Binär sökning Exempel: Sök efter talet (Array[(0+3+1)/2] =Array[2] = 3) == 2? Nej 3 > 2? 38

39 Binär sökning Exempel: Sök efter talet (Array[(0+3+1)/2] =Array[2] = 3) == 2? Nej 3 > 2? Ja 39

40 Binär sökning Exempel: Sök efter talet (Array[(0+1+1)/2] =Array[1] =2) == 2? 40

41 Binär sökning Exempel: Sök efter talet (Array[(0+1+1)/2] =Arra[1] =2) == 2? Ja Returnera index 1 41

42 Binär sökning 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. 42

43 Binär sökning Skapa pseudokod 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 Pseudokod: int binarysearch(array, target) 43

44 Binär sökning Skapa pseudokod Huvudidé: - Titta på datan i den mittersta cellen. 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 Om den är lika med den data vi letar efter returnera positionen Pseudokod: int binarysearch(array, target) low = 0 high = array.length - 1 mid = (low + high + 1) / 2 44

45 Binär sökning Skapa pseudokod Huvudidé: 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 Om den är lika med den data vi letar efter returnera positionen Pseudokod: int binarysearch(array, target) low = 0 high = array.length - 1 mid = (low + high + 1) / 2 IF array[mid] > target THEN high = mid 1 45

46 Binär sökning Skapa pseudokod Huvudidé: Om den är mindre än den data vi letar efter leta i den högra halvan Om den är lika med den data vi letar efter returnera positionen Pseudokod: int binarysearch(array, target) low = 0 high = array.length - 1 mid = (low + high + 1) / 2 IF array[mid] > target THEN high = mid 1 IF array[mid] < target THEN low = mid 46

47 Binär sökning Skapa pseudokod Huvudidé: Om den är lika med den data vi letar efter returnera positionen Pseudokod: int binarysearch(array, target) low = 0 high = array.length mid = (low + high + 1) / 2 IF array[mid] > target THEN high = mid 1 IF array[mid] < target THEN low = mid IF array[low] = target THEN RETURN low ELSE RETURN -1 47

48 Binär sökning Skapa pseudokod Detta fungerar för ett steg, vi behöver även loopa. Pseudokod: 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 IF array[mid] < target THEN low = mid IF array[low] = target THEN RETURN low ELSE RETURN -1 48

49 Binär sökning Skapa pseudokod Justera IF-satserna Pseudokod: 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 49

50 Binär sökning Översätt till Java Pseudokod: 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 int binarysearch(int array[], int target) 50

51 Binär sökning Översätt till Java Pseudokod: int binarysearch(array, target) low = 0 high = array.length - 1 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 int binarysearch(int array[], int target) int low = 0; int high = array.length - 1; 51

52 Binär sökning Översätt till Java Pseudokod: 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 int binarysearch(int array[], int target) { int low = 0; int high = array.length 1; while (high low > 0){ 52

53 Binär sökning Översätt till Java Pseudokod: 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 int binarysearch(int array[], int target) { int low = 0; int high = array.length 1; while (high low > 0){ int mid = (low + hight + 1)/ 2; 53

54 Binär sökning Översätt till Java Pseudokod: IF array[mid] > target THEN high = mid 1 ELSE low = mid IF array[low] = target THEN RETURN low ELSE RETURN -1 int binarysearch(int array[], int target) { int low = 0; int high = array.length 1; while (high low > 0){ int mid = (low + hight + 1)/ 2; if(array[mid] > target) high = mid 1; else low = mid; 54

55 Binär sökning Översätt till Java Pseudokod: IF array[low] = target THEN RETURN low ELSE RETURN -1 int binarysearch(int array[], int target) { int low = 0; int high = array.length 1; while (high low > 0){ int mid = (low + hight + 1)/ 2; if(array[mid] > target) high = mid 1; else low = mid; if(array[low] = target) return low; else return -1; 55

56 Binär sökning koden i Java int binarysearch(int array[], int target) { int low = 0; int high = array.length 1; while (high low > 0){ int mid = (low + hight + 1)/ 2; if(array[mid] > target) high = mid 1; else low = mid; if(array[low] = target) return low; else return -1; 56

57 Binär sökning Rekursiv variant Pseudokoden innan loopen: int binarysearch(array, target) low = 0 high = array.length mid = (low + high + 1) / 2 IF array[mid] > target THEN high = mid 1 IF array[mid] <= target THEN low = mid IF array[low] = target THEN RETURN low ELSE RETURN -1 57

58 Binär sökning Rekursiv variant Börja med att hitta basfallet, dvs när lösningen är enkel och vi kan därför stanna. Pseudokod: int binarysearch(array, target) low = 0 high = array.length mid = (low + high + 1) / 2 IF array[mid] > target THEN high = mid 1 IF array[mid] <= target THEN low = mid // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 58

59 Binär sökning Rekursiv variant Leta efter rekursionsstegen, dvs vad gör vi om vi inte är i basfallet. Pseudokod: int binarysearch(array, target, low, high) low = 0 high = array.length mid = (low + high + 1) / 2 //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) IF array[mid] <= target THEN low = mid // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 59

60 Binär sökning Rekursiv variant Leta efter rekursionsstegen, dvs vad gör vi om vi inte är i basfallet. Pseudokod: int binarysearch(array, target, low, high) low = 0 high = array.length mid = (low + high + 1) / 2 //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 60

61 Binär sökning Rekursiv variant Städa pseudokoden. Pseudokod: 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 61

62 Binär sökning Rekursiv variant Lägg till if-sats så vi vet när vi ska använda basfall och rekursionssteg. Pseudokod: int binarysearch(array, target, low, high) IF (high low > 0) THEN mid = (low + high +1) / 2 //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG IF array[mid] <= target THEN binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 62

63 Binär sökning Rekursiv variant Förfina if-satserna i pseudokoden. Pseudokod: int binarysearch(array, target, low, high) IF (high low > 0) THEN mid = (low + high +1) / 2 //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG ELSE binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 63

64 Rekursion Metoden anropar anropar sig själv tills man kommit ner till basfallet. Skapas på följande sätt: - Basfall: enkelt problem som kan lösas trivialt och resultatet returneras - Rekursionssteget (kan finnas flera): Metoden anropar sig själv med ett mindre problem. 64

65 Binär sökning Översätt till Java Pseudokod: int binarysearch(array, target, low, high) IF (high low > 0) THEN mid = (low + high +1) / 2 //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG ELSE binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target, int low, int high) 65

66 Binär sökning Översätt till Java Pseudokod: IF (high low > 0) THEN mid = (low + high +1) / 2 //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG ELSE binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target,int low, int high) if (high low > 0) { 66

67 Binär sökning Översätt till Java Pseudokod: mid = (low + high +1) / 2 //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG ELSE binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target,int low, int high) if (high low > 0) { int mid = (low + high + 1)/2; 67

68 Binär sökning Översätt till Java Pseudokod: //REKURSIONSSTEG IF array[mid] > target THEN binarysearch(array, target, low, mid -1) //REKURSIONSSTEG ELSE binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target,int low, int high) if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) 68

69 Binär sökning Översätt till Java Pseudokod: //REKURSIONSSTEG ELSE binarysearch(array, target, mid, high) ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target,int low, int high) { if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) else binsearch(array, target, mid, high) 69

70 Binär sökning Översätt till Java Pseudokod: ELSE // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target,int low, int high) { if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) else binsearch(array, target, mid, high) else { 70

71 Binär sökning Översätt till Java Pseudokod: // BASFALL IF array[low] = target THEN RETURN low ELSE RETURN -1 int binsearch(int array[],int target,int low, int high) { if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) else binsearch(array, target, mid, high) else { if (array[low] == target) return low; else return -1; 71

72 Binär sökning rekursiv version i Java int binsearch(int array[],int target,int low, int high) { if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) else binsearch(array, target, mid, high) else { if (array[low] == target) return low; else return -1; 72

73 Binärsökning Tidskomplexitet int binsearch(int array[],int target,int low, int high) { if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) else binsearch(array, target, mid, high) else { if (array[low] == target) return low; else return -1; - Varje jämförelse kostar 1: - high - low > 0 - array[mid] > target - array[low] == target 73

74 Binärsökning Tidskomplexitet int binsearch(int array, int target, int low, int high) { if (high low > 0) { int mid = (low + high + 1)/2; if (array[mid] > target) binsearch(array, target, low, mid-1) else binsearch(array, target, mid, high) else { if (array[low] == target) return low; else return -1; Hur många jämförelser gör algoritmen? 74

75 Binärsökning Tidskomplexitet Hur många jämförelser gör algoritmen? Datamängden halveras i varje iteration:

76 Binärsökning Tidskomplexitet Hur många jämförelser gör algoritmen? Datamängden halveras i varje iteration: = =2 2 2= =2 0 76

77 Binärsökning Tidskomplexitet Hur många jämförelser gör algoritmen? Datamängden halveras i varje iteration: = = = =2 0 Talet 2 kommer från att samlingen halveras 77

78 Binärsökning Tidskomplexitet Hur många jämförelser gör algoritmen? Datamängden halveras i varje iteration: = = = =2 0 Antalet halveringar 78

79 Binärsökning Tidskomplexitet Hur många jämförelser gör algoritmen? I vårt exempel behövde vi göra 3 halveringar och varje jämförelse gjordes max 3 gånger. I det allmänna fallet gör vi m jämförelser och vi kan därför skriva: 2 m =n Tidskomplexiteten blir: T =O(2 m ) Men kan vi mäta tidskomplexiteten på antalet element i samlingen istället? 79

80 Binärsökning Tidskomplexitet Hur många jämförelser gör algoritmen? I vårt exempel behövde vi göra 3 halveringar och varje jämförelse gjordes max 3 gånger. I det allmänna fallet gör vi m jämförelser och vi kan därför skriva: 2 m =n Tidskomplexiteten blir: T =O(2 m ) Men kan vi mäta tidskomplexiteten på antalet element i samlingen istället? Ja, det kan vi. 80

81 Binärsökning Tidskomplexitet Så här kan vi räkna: 2 m =n log(2 m )=log(n) m log(2)=log(n) m= log(n) log(2) m=log 2 (n) 81

82 Binärsökning Tidskomplexitet Tidskomplexiteten blir nu så här: T =O(m)=O(log 2 (n)) O (log n) Tidskomplexiteten kallas för logaritmisk komplexitet. 82

83 Binärsökning Tidskomplexitet I värsta fall: O(log n) I genomsnitt: O(log n) I bästa fall: O(1) 83

84 Jämförelse mellan linjär och binär sökning Linjär Binär Kan användas Alltid Endast på sorterade samlingar För länkad lista Ja Nej Tid(Värsta) n log(n) implementering Mycket lätt Lite svårare 84

85 Sökning Andra alternativ - Både linjär och binär sökning fungerar bra för arrayer - Sökningen kan underlättas genom att använda andra datastrukturer: Binära sökträd - Ett alternativ till array Hashtabeller: --- Det går snabbt att slå upp vilket värdet som är kopplad till respektive nyckel 85

86 Algoritmer vs datastrukturer Algoritm: - Instruktioner som steg för steg beskriver hur man löser ett givet problem. Datastruktur: - Ordnad data så att datorn kan bearbeta datan på ett effektivt sätt Exempel: Länkad lista, Träd, Hashtabell, Array Datastrukturen påverkar vilken algoritm som är lämplig att använda. 86

87 Algoritmanalys Korrekthet Ger algoritmen alltid ett korrekt resultat Lösning Får vi någon lösning eller fastnar algoritmen någonstans, till exempel i en loop? Algoritmkomplexitet Tidskomplexitet: Talar om hur lång tid en algoritm behöver för att lösa problemet Minneskomplexitet: Talar om hur mycket minne algoritmen behöver för att lösa problemet 87

88 Tidskomplexitet - Hur kan man avgöra vilken algoritm är snabbast på att lösa ett givet problem? 88

89 Tidskomplexitet - Hur kan man avgöra vilken algoritm är snabbast på att lösa ett givet problem? - Mäta den tid det tar för en dator att exekvera algoritmen? 89

90 Tidskomplexitet - Hur kan man avgöra vilken algoritm är snabbast på att lösa ett givet problem? - Mäta den tid det tar för en dator att exekvera algoritmen? Problem: Man blir beroende av samma hårdvara om man vill jämföra olika algoritmer 90

91 Tidskomplexitet - Hur kan man avgöra vilken algoritm är snabbast på att lösa ett givet problem? - Mäta den tid det tar för en dator att exekvera algoritmen? Problem: Man blir beroende av samma hårdvara om man vill jämföra olika algoritmer - Lösning: Använd asymptotisk analys istället. Då blir analysen långsiktig 91

92 Asymptotisk analys - Matematisk analys över hur lång tid en algoritm behöver när storleken på indatan växer. Exempel på storlekar: Sträng : antal tecken Array : antal celler Allmänna fallet: antal byte - Tre olika fall: I värsta fall : Den längsta tiden som behövs I genomsnitt fall: Den tid som behövs i genomsnitt I bästa fall : Den minsta tiden som behövs 92

93 Asymptotisk analys - Grundkrav: Algoritm behöver för indata av godtycklig storlek(n) 93

94 Asymptotisk analys - Grundkrav: Algoritm behöver för indata av godtycklig storlek(n) - Analys ska vara maskinoberoende -- Hastigheten ökar med en konstant om maskin är kraftfull 94

95 Asymptotisk analys - Grundkrav: Algoritm behöver för indata av godtycklig storlek(n) - Analys ska vara maskinoberoende -- Hastigheten ökar med en konstant om maskin är kraftfull - Exekveringstiden beräknas som en funktion av indatans storlek T(n) 95

96 Asymptotisk analys - Grundkrav: Algoritm behöver för indata av godtycklig storlek(n) - Analys ska vara maskinoberoende -- Hastigheten ökar med en konstant om maskin är kraftfull - Exekveringstiden beräknas som en funktion av indatans storlek T(n) - Konstanta faktorer ignoreras 96

97 Asymptotisk analys - Grundkrav: Algoritm behöver för indata av godtycklig storlek(n) - Analys ska vara maskinoberoende -- Hastigheten ökar med en konstant om maskin är kraftfull - Exekveringstiden beräknas som en funktion av indatans storlek T(n) - Konstanta faktorer ignoreras - Man fokuserar på dominerande faktorer 97

98 Asymptotisk analys En algoritm komplexitet analyseras med hjälp av matematik i följande steg givet algoritmens pseudokod: 0. Räkna primitiva operationer och låt varje operation kosta 1: aritmetiska operationer (+,-,*,/) jämförelser (==,!=,<=,...) referera till en variabel/objekt indexera i en array tilldelning anropa en metod returnera från en metod 1. Ställ upp ett uttryck T(n) för antalet primitiva operationer som behövs relativt storleken på indatan (n) i bästa, värsta eller i genomsnitt. 2. Förenkla uttrycket T(n) 3. Hitta en funktion som begränsar T(n) uppifrån. 98

99 Asymptotisk analys Exempel 0. Räkna primitiva operationer och låt varje operation kosta 1: sumarray(array) sum = 0 FOR EACH i FROM 0 TO array.length - 1 sum = sum + array[i] RETURN sum; 1 (1+1) n (1+1+1) n 1 99

100 Asymptotisk analys - Exempel 1. Ställ upp ett uttryck T(n) för antalet primitiva operationer som behövs relativt storleken på indatan (n) i bästa, värsta eller i genomsnitt. 2. Förenkla uttrycket T(n) sumarray(array) sum = 0 FOR EACH i FROM 0 TO array.length - 1 sum = sum + array[i] RETURN sum; 1 1+(1+1) n (1+1+1) n 1 T (n)=5 n+3 100

101 Asymptotisk analys Ordo (big-o) - Övre gräns (upper bound) för hur tiden för en algoritm växer Definition: T (n) g (n) Givet funktionerna och säger vi att T (n) O(g (n)) T (n) c g (n) n n 0 n 0, c Där och är positiva konstanter 101

102 Asymptotisk analys Ordo (big-o) - Övre gräns (upper bound) för hur tiden för en algoritm växer Definition: T (n) g (n) Givet funktionerna och säger vi att T (n) O(g (n)) T (n) c g (n) n n 0 n 0, c Där och är positiva konstanter Notera: O(g (n)) är en mängd av funktioner som har den egenskap definitionen beskriver. 102

103 Asymptotisk analys - Exempel 3. Hitta en funktion som begränsar T(n) uppifrån. T (n)=5 n+3 Det är uppenbart att det finns flera funktioner som begränsar T(n) men vi ska hitta den minsta. Antag; g(n)=n 5 n+3 cn (c 5) n 3 n 3 c 5 103

104 Asymptotisk analys - Exempel 3. Hitta en funktion som begränsar T(n) uppifrån. T (n)=5 n+3 Det är uppenbart att det finns flera funktioner som begränsar T(n) men vi ska hitta den minsta. Antag; g(n)=n 5 n+3 cn (c 5) n 3 n 3 c 5 Låt c=6 och n 0 =3 5n+3 6n för n 3 T (n) O (n) 104

105 Tidskomplexitet Linjär sökning - Tidskomplexiteten för de olika fallen: I värsta fallet: O (n) I bästa fallet: O (1) Om det tar konstant tid så används 1 I genomsnitt: Antag att i genomsnitt tar algoritmen T ( n 2 )=T (n 1 2 ) Då 1 2 är en konstant vi kan bortse ifrån och resultet blir därför: O (n) 105

106 Tidskomplexitet Binär sökning - Tidskomplexiteten för de olika fallen: I värsta fallet: O (log n) I bästa fallet: O (1) Om det tar konstant tid så används 1 I genomsnitt: O (log n) 106

107 Tidskomplexitet Beräkning Vid beräkning av komplexitet bortser man ifrån termer av lägre ordning och konstanter: Exempel: T (5+n) O(n) T (5+10n) O(n) T ( n) O(n) 107

108 Tidskomplexitet Beräkning Vid beräkning av komplexitet bortser man ifrån termer av lägre ordning och konstanter: Exempel: T (5+n) O(n) T (5+10n) O(n) T ( n) O(n) T (n 2 +n) O(n 2 ) T (15n n) O(n2 ) T (n+log n) O (n) T (25 nlog n+800) O(n log n) 108

109 Tidskomplexitet - Ordoklasser Ordo O(1) O(log n) O(n) O(n log n) O(n 2 ) O(n 3 ) O(n x ) O(c n ) O(n!) Benämning konstant logaritmisk linjär kvadratisk kubisk polynomisk (för x > 1) Exponentiell (för c > 1) faktoriell 109

110 Tidskomplexitet asymtotisk storlek spelar roll 110

111 Tidskomplexitet asymtotisk storlek spelar roll trots konstanter 111

112 Ordo( O), Theta(Θ) och Omega (Ω) O - övre gräns(upper bound) Θ - T (n) Θ (n) T O(n) och T (n) Ω (n) Ω - undre gräns(lower bound) 112

113 Asymptotisk analys - diskussion - Bra verktyg för att jämföra algoritmer - stor indata En algoritm med högre komplexitet är alltid långsammare - liten indata En algoritm med högre komplexitet kan vara Snabbare Exempel: Om vi söker i en kort array så kan linjär sökning vara snabbare eftersom vi inte behöver beräkna medelvärden 113

114 Asymptotisk analys - diskussion - Bra verktyg för att jämföra algoritmer - stor indata En algoritm med högre komplexitet är alltid långsammare - liten indata En algoritm med högre komplexitet kan vara Snabbare Exempel: Om vi söker i en kort array så kan linjär sökning vara snabbare eftersom vi inte behöver beräkna medelvärden Vi kan använda samma resonemang när vi diskuterar minneskomplexitet 114

115 Asymptotisk analys Vad ska ni kunna? - Utföra grundläggande resonemang angående tidskomplexiteten för en algoritm/program för den övre gränsen i olika fall (Ordo) Detta gäller speciellt med avseende på följande som tas upp i kursen: - sök- och sorteringsalgoritmer - vanliga operationer för datastrukturer - Givet enkel kod så ska ni kunna resonera er fram till dess Tidskomplexitet (Se exemplet med att summera innehållet I en array) 115

116 Sorteringsalgoritmer 116

117 Sorteringsalgoritmer Vad är sortering? - Objekten i en samling placeras i en viss ordning - Vi kommer framförallt att arbeta med arrayer - De viktigaste operationerna som används vid sortering är: jämföra två värden: compare(), ==, <, >, etc swap(i,j) Byt plats på objekten vid indexarna i och j 117

118 Sorteringsalgoritmer Algoritmer - Enkla algoritmer som är mindre effektiva Urvalssortering (Selection sort) Bubbelsortering (Bubble sort) Instickssortering (Insertion sort) - Avancerade algoritmer som är mer effektiva Merge sort Quick sort Shell sort 118

119 Urvalssortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 119

120 Urvalssortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 1. Leta efter det minsta element I den osorterade delen sorterad del osorterad del 120

121 Urvalssortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 1. Leta efter det minsta element i den osorterade delen sorterad del osorterad del 2. Placera det sist i den sorterade delen sorterad del osorterad del 121

122 Urvalssortering Algoritm 3. Upprepa steg 1 och 2 tills hela arrayen är sorterad sorterad del osorterad del sorterad del osorterad del sorterad del osorterad del sorterad del osorterad del 122

123 Urvalssortering Kod void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ int minindex = i; for(int j = i+1; i < array.length; j++){ if(array[i] < array[minindex]) { minindex = j; swap(array,i,j); void swap(int[] array, int x, int y){ int temp = array[x]; array[x] = array[y]; array[y] = temp; 123

124 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ int minindex = i; for(int j = i+1; i < array.length; j++){ if(array[i] < array[minindex]) { minindex = j; swap(array,i,j); 124

125 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ //n-1 int minindex = i; for(int j = i+1; i < array.length; j++){ if(array[i] < array[minindex]) { minindex = j; swap(array,i,j); 125

126 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ //n-1 int minindex = i; for(int j = i+1; i < array.length; j++){ // n-1+n if(array[i] < array[minindex]) { minindex = j; swap(array,i,j); 126

127 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ //n-1 int minindex = i; for(int j = i+1; i < array.length; j++){ // n-1+n if(array[i] < array[minindex]) { // konstant minindex = j; swap(array,i,j); 127

128 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ //n-1 int minindex = i; for(int j = i+1; i < array.length; j++){ // n-1+n if(array[i] < array[minindex]) { // konstant minindex = j; // konstant swap(array,i,j); 128

129 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ //n-1 int minindex = i; for(int j = i+1; i < array.length; j++){ // n-1+n if(array[i] < array[minindex]) { // konstant minindex = j; // konstant swap(array,i,j); // konstant 129

130 Urvalssortering Tidskomplexitet void selectionsort(int[] array) { for(int i = 0; i < array.length-1; i++){ //n-1 int minindex = i; for(int j = i+1; i < array.length; j++){ // n-1+n if(array[i] < array[minindex]) { // konstant minindex = j; // konstant swap(array,i,j); // konstant (n 1)+2+1 (n 1) 2 +n 1 = {Triangeltal = = 2 n 2 2n+1+n 1 2 = n 2 n 2 O(n 2 ) Komplexiteten kallas för kvadratisk komplexitet. 130

131 Instickssortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 131

132 Instickssortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 1. Det första värdet i den osorterade delen flyttas till rätt plats i den sorterade delen. sorterad del osorterad del 2. Upprepa tills hela arrayen är sorterad sorterad del osorterad del 132

133 Instickssortering Algoritm 2. Upprepa tills hela arrayen är sorterad sorterad del osorterad del sorterad del osorterad del sorterad del osorterad del 133

134 Bubbelsortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 134

135 Bubbelsortering Algoritm 0. Dela upp arrayen i en sorterad del (tom från början) och en osorterad del (hela arrayen från början) sorterad del osorterad del 1. Utför följande för varje par av värden från höger till vänster: Byt plats om värdet till vänster är större än värdet till höger

136 Bubbelsortering Algoritm 1. Utför följande för varje par av värden från höger till vänster: Byt plats om värdet till vänster är större än värdet till höger

137 Bubbelsortering Algoritm 1. Utför följande för varje par av värden från höger till vänster: Byt plats om värdet till vänster är större än värdet till höger 2. Det minsta värdet bubblas upp till den sorterade arrayen och kan flyttas över till den Upprepa tills arrayen är sorterad 137

138 Bubbelsortering Algoritm 3. Upprepa tills arrayen är sorterad

139 Bubbelsortering Algoritm 3. Upprepa tills arrayen är sorterad

140 Instickssortering och Bubbelsortering Komplexitet: O(n 2 ) Använd samma strategi som för urvalssortering 140

141 Sorteringsalgoritmer - Egenskaper - Minneskomplexitet: Hur mycket minne behöver den? De sorteringsalgoritmer vi tittat på hittills behöver: Arrayen behöver: Extraminne för swap: O(n) O(1) 141

142 Sorteringsalgoritmer - Egenskaper - Stabilitet: Bevaras den relativa ordningen på element av samma nycklar? Exempel: Antag att vi vill sortera följande tuplar enligt de vänstra siffrorna: (4,2); (1,6); (1,5); (2,8) Om resultatet blir (1,6); (1,5); (2,8); (4,2) så är algoritmen stabil Om resultatet blir (1,5); (1,6); (2,8); (4,2) så är algoritmen instabil Det sorteringsalgoritmer vi tittat på hittills är stabila. 142

143 Sorteringsalgoritmer - Egenskaper - Tidskomplexitet: Hur lång tid behöver algoritmen? Det algoritmer vi tittat på har tidskomplexiteten O(n 2 ) 143

144 Avancerade sorteringsalgoritmer - Egenskaper O(nlog n) - Tidskomplexitet: som också är den gränsen för hur snabbt man kan sortera - Stabililitet: Olika - Minneskomplexitet: Kan vara högre 144

145 Avancerade sorteringsalgoritmer 145

146 Avancerade sorteringsalgoritmer Namn Tidskomplexitet Stabil? Minnesåtgång Merge sort Ja Kan behöva mer O(n log n) minne Quick sort I medelfallet: O(n log n) Ja Kan behöva mer minne I värsta fallet: O(n 2 ) Shell sort Svåranalyserad Nej Inget extra minne I värsta fallet: O(n 3/2 ) 146

147 Ordnade klasser Om en klass implementerar gränssnittet ComparableTo<T> får klassen en naturlig ordning. Klassen behöver implementera metoden int compareto(t t) som ska returnera följande: - 0 om t och objektet är lika - >0 om t är större än objektet - <0 om t är mindre än objektet 147

148 Lab 2, del 1 Sortering av heltal i ett grafi skt labskal Implementera två sorteringslagoritmer själva: Kandidat: insertion och shell sort Master : insertion och merge sort Jämför olika sorteringsalgoritmer under olika förutsättningar Koppla till teorin 148

149 Lab 2, del 1 Labskalet begränsat för att kunna synkronisera algoritmerna - Tillhandahåller följande metoder: cmp(i,j) jämför värdena på plats i och j i arrayen (jfr compareto) swap(i,j) byter plats på värdena på plats j och i elementcount() hur många element fi nns det i arrayen (jfr length/size()) 149

150 Mer om sorteringsalgoritmer - Vi har bara gått igenom kod för en sorteringsalgoritm idag - Ni ska kunna följande: Beskriva alla de algoritmer som vi gått igenom Kunna visa hur de fungerar genom ett exempel för en array Kunna skriva (pseudo)kod för dem I labben får ni skriva egen kod för två algoritmer Labben innehåller även given kod för andra algoritmer - studera den Läs i kursböckerna om sorteringsalgoritmer Även (engelska) Wikipedia har bra material om sortering 150

151 I veckan Onsdag: - Deadline för lab 1! - Onsdag: -- Generiska algoritmer och klasser (behövs för lab 2, del 2) -- Länkade listor mm (behövs för lab 3) -- Mer om komplexitet - Lab: -- Jobba själv innan onsdag -- Sätt igång med del1 i lab2 Läs på om sökning, sortering, komplexitet Komplexitet: grundläggande Eck 8.5, mer avancerat Shaffer

Sökning och sortering

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

Läs mer

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

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

Läs mer

Lösningsförslag till exempeltenta 1

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

Läs mer

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

Asymptotisk komplexitetsanalys

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

Läs mer

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm Programmering för språkteknologer II OH-serie: Sökning och sortering Mats Dahllöf Sökning och sortering Sökning: lokalisera objekt i samlingar. Finns ett visst värde? I så fall: var? Sortering: placera

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

Föreläsning 5 Innehåll

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

Läs mer

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

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

Läs mer

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

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

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

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING Föreläsning 11 12 ALGORITMER: SÖKNING, REGISTRERING, SORTERING Seminarier: Fredagsklubben för dig som tycker att programmering är svårt (0 eller möjligen 1 poäng på delmålskontrollen) inte avsedda för

Läs mer

Magnus Nielsen, IDA, Linköpings universitet

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

Läs mer

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

Föreläsning 11 Datastrukturer (DAT037)

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

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

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

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

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

Läs mer

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

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

Läs mer

Datastrukturer. föreläsning 2

Datastrukturer. föreläsning 2 Datastrukturer föreläsning 2 1 De som vill ha en labkamrat möts här framme i pausen Övningsgrupper: efternamn som börjar på A-J: EC, Arnar Birgisson K-Ö: ED, Staffan Björnesjö 2 Förra gången Vi jämförde

Läs mer

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

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

Läs mer

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

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

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

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

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

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

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning... Föreläsning 15 Rekursion TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 2 november 2015 Tommy Färnqvist, IDA, Linköpings universitet 15.1 Innehåll

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

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

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: Omega, Theta Selectionsort, Shellsort,

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. Två gränssnitt

Algoritmer. Två gränssnitt Objektorienterad programmering E Algoritmer Sökning Linjär sökning Binär sökning Tidsuppskattningar Sortering Insättningssortering Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk;

Läs mer

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

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Idag - Hashtabeller - Flerdimensionella arrayer (2D) 2 Repetition -

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

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2 Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Läs mer

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

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

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

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

Läs mer

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

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

Läs mer

Föreläsning 11 Innehåll

Föreläsning 11 Innehåll Föreläsning 11 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Heapsort behandlades i samband med prioritetsköer. Undervisningsmoment:

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

Föreläsning 5. Rekursion

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

Läs mer

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

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-11:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

Lösning av några vanliga rekurrensekvationer

Lösning av några vanliga rekurrensekvationer 1 (8) Lösning av några vanliga rekurrensekvationer Rekursiv beräkning av X n En rekursiv funktion som beräknar x n genom upprepad multiplikation, baserat på potenslagarna X 0 = 1 X n+1 = X X n float pow(float

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

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

Läs mer

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

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

Föreläsning 13 Datastrukturer (DAT037)

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

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

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

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

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

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

Föreläsning 12 Innehåll Föreläsning 12 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Datavetenskap (LTH) Föreläsning 12 HT 2017 1 / 38 Sortering Varför

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

Problemlösning och algoritmer

Problemlösning och algoritmer Problemlösning och algoritmer Human Centered Systems Inst. för datavetenskap Linköpings universitet Översikt Stegvis förfining Pseudokod Flödesdiagram Dekomposition KISS regeln Procedurell dekomposition

Läs mer

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Läsanvisningar och uppgifter Algoritm En algoritm är ett begränsat

Läs mer

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-16 Idag Mängder, avbildningar. Hashtabeller. Sortering. Pseudokod Blandning av programmeringsspråk, matematisk notation och naturligt

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

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Introduktion till programmering SMD180. Föreläsning 9: Tupler Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

Rekursion och induktion för algoritmkonstruktion

Rekursion och induktion för algoritmkonstruktion Informationsteknologi Tom Smedsaas 22 januari 2006 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av problem som

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

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

Rekursion och induktion för algoritmkonstruktion

Rekursion och induktion för algoritmkonstruktion Informationsteknologi Tom Smedsaas, Malin Källén 20 mars 2016 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av

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

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

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

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag) Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag) 21 december 2007 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

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

Läs mer

Lösningsförslag till tentamen 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

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

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget

Läs mer

Föreläsning 13. Rekursion

Föreläsning 13. Rekursion Föreläsning 13 Rekursion Rekursion En rekursiv metod är en metod som anropar sig själv. Rekursion används som alternativ till iteration. Det finns programspråk som stödjer - enbart iteration (FORTRAN)

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 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna Föreläsning Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Implementering med lista ar Implementering av prioritetskö med heap Sortering

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

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

Föreläsning 4 Datastrukturer (DAT037)

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

Läs mer

Medan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder.

Medan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder. (10 september 2018 T02 1 ) Medan ni väntar 1. Binär sökning i sorterad array med n element kräver log 2 n försök. Hur många försök krävs i en array med 10 3, 10 6 respektive 10 9 element? 2. Skriv metoden

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

Föreläsning 12 Innehåll

Föreläsning 12 Innehåll Föreläsning 12 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Datavetenskap (LTH) Föreläsning 12 VT 2018 1 / 40 Sortering Varför

Läs mer

Sökning och sortering. Linda Mannila

Sökning och sortering. Linda Mannila Sökning och sortering Linda Mannila 27.11.2007 Denna föreläsning Sökningsalgoritmer Sorteringsalgoritmer Modulen time Sökning Vanlig uppgift i datorsammanhang Exempel: Hitta en viss person i ett register

Läs mer

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering Föreläsning 11 Innehåll Sortering O(n 2 )-algoritmer: urvalsering insättningsering O(n log n)-algoritmer: Merge Quick Heap behandlades i samband med prioritetsköer. Undervisningsmoment: föreläsning 11,

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2013-06-05 1 (6) Teoretisk del 1. (3p) "Snabba frågor" Alla svar motiveras väl. a) Vad skiljer en statisk metod från en icke-statisk? (0.5p) Svar:En statisk metod är associerad till

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

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

Fredag 10 juni 2016 kl 8 12

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

Läs mer

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

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00 TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 170117 kl. 14:00-19:00 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna eller i bilagarna. *** OBS *** Betygsgräns:

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Läs mer

SORTERING OCH SÖKNING

SORTERING OCH SÖKNING Algoritmer och Datastrukturer Kary FRÄMLING Kap. 9, Sid 1 C-språket 2/Kary Främling v2000 och Göran Pulkkis v2003 SORTERING OCH SÖKNING Sortering är ett av de bästa exemplen på problem där valet av lösningsalgoritm

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

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