Programmering för språkteknologer II, HT2014. Rum
|
|
- Jakob Pålsson
- för 7 år sedan
- Visningar:
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 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 merTDDC30. 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 merLö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 merTDDI16 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 merAsymptotisk 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 merProgrammering 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 merProgramkonstruktion 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 merFö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 merFö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 merAlgoritmanalys. 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 merTDDC30. 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 merAlgoritmer 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 merFö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 merMagnus 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 merDatastrukturer 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 merFö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 merDatastrukturer, 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 merTommy 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 merFö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 merFö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 merDatastrukturer. 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 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 merAlgoritmer, 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 merFö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 merFö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 merAlgoritmer, 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 merTentamen 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 merTommy 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 merAlgoritmer, 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 merProgrammering 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 merTDDC30. 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 mersamt 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 merAlgoritmer. 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 merProgrammering 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 merFö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 merObjektorienterad 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 merLö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 merFö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 merTentamen 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 merTDDC30. 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 merTentamen'('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 merFö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 merTDDC30. 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 merFö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 merHitta 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 merProgrammering 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 merLö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 merTentamen 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 merIntroduktion 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 merLä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 merFö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 merDekomposition 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 merFö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 merSortering. 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 merGrundlä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 merTDDC30. 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 merFö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 merFö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 merProgramkonstruktion 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 merProblemlö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 merFö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 merFö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 merDatastrukturer 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 merIntroduktion 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 merAlgoritmanalys. 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 merFö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 merRekursion 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 merDatastrukturer 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 merLö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 merRekursion 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 merVad 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 merTentamen 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 merFö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 merTentamen 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 merTeoretisk 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 merLö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 merProgrammering 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 merFö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 mer6 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 merFö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 merProgramkonstruktion 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 merFö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 merFö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 merMedan 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 merFö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 merFö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 merSö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 merFö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 merTeoretisk 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 merTentamen 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 merFö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 merSeminarium 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 merFredag 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 merDatastrukturer. 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 merTENTAMEN 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 merLö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 merSORTERING 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 merTentamen 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 merBakgrund 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