Rekursion. Koffman & Wolfgang kapitel 5
|
|
- Ingvar Karlsson
- för 8 år sedan
- Visningar:
Transkript
1 Rekursion Koffman & Wolfgang kapitel 5 1
2 Rekursivt tänkande Rekursion reducerar ett problem till en eller flera enklare versioner av samma problem. med enklare menas att underproblemen måste vara mindre, enligt något sätt att räkna t.ex. genom storleken på indata kallas också divide-and-conquer 2
3 Stegen i en rekursiv algoritm Det måste finnas ett eller flera fall som kan lösas direkt: basfall, för små värden på n För alla större n-värden måste problemet kunna reduceras till en eller flera delproblem: rekursionsfall delproblemen är mindre versioner av samma problem alla delproblem måste vara mindre än huvudproblemet (mindre n-värden) det måste gå att kombinera delproblemens lösningar till en lösning av huvudproblemet 3
4 Enkla rekursiva definitioner De enklaste rekursionerna är lite meningslösa: public static int length(linkedlist<e> list) { if (list == null) return 0; else return 1 + length(list.next); för de kan lika gärna definieras med en loop: public static int length(linkedlist<e> list) { int len = 0; while (list!= null) { len++; list = list.next; return len; 4
5 En till enkel rekursiv definition Fakulteten är definierad som: n! = n (n-1)!, om n>0 0! = 1 Den rekursiva definitionen är snarlik: public static int factorial(int n) { if (n == 0) return 1; else return n * factorial(n 1); men den iterativa versionen är inte så komplicerad den heller: public static int factorial(int n) { int fac = 1; for (int i = 1; i <= n; i++) fac *= i; return fac; 5
6 Att bevisa korrekthet Korrekthet för rekursiva algoritmer bevisas med induktion: visa att alla basfall täcks av implementationen, och löses korrekt visa att varje rekursivt anrop minskar n visa att om varje delproblem (n < n) är löst korrekt, så blir också huvudproblemet (n) korrekt löst 6
7 7 Att spåra (trace) rekursion
8 Oändlig rekursion Om du anropar factorial med ett negativt värde, så kommer rekursionen inte att terminera: till slut kommer du få ett StackOverflowError factorial saknar alltså ett basfall Var alltid noga med att täcka alla möjliga basfall, även de felaktiga: t.ex. negativa värden om argumentet är felaktigt så kan du kasta ett IllegalArgumentException 8
9 Största gemensamma delaren Greatest common divisor (gcd) gcd(m, n) är det största heltal som delar både m och n gcd(20, 15) = 5 gcd(36, 24) = 12 gcd(38, 18) = 2 gcd(17, 97) = 1 dvs, 17 och 97 är relativt prima 9
10 Euklides algoritm för gcd För att beräkna gcd(m, n), där m n gcd(m, 0) = m gcd(m, n) = gcd(n, m % n) Om m < n, så vänder vi bara på argumenten. 10
11 Euklides algoritm (forts.) Rekursiv version: public static long gcd(long m, long n) { if (n == 0) return m; else return gcd(n, m % n); eller iterativ: public static long gcd(long m, long n) { while (n!= 0) { long temp = m % n; m = n; n = temp; return m; 11
12 Euklides algoritm (forts.) Rekursiv version: public static long gcd(long m, long n) { if (n == 0) return m; else return gcd(n, m % n); eller iterativ: public static long gcd(long m, long n) { while (n!= 0) { long temp = m % n; m = n; n = temp; return m; OBS! detta förutsätter att m n det är en invariant, som vi måste visa alltid är sann vilket den är eftersom n (m % n) 11
13 Rekursion vs iteration Rekursion och iteration är lika kraftfulla: det går alltid att översätta en rekursiv lösning till en iterativ enklare rekursioner översätts till iterativa loopar mer komplexa rekursioner kräver en eller flera stackar det går alltid att översätta en iterativ lösning till en rekursiv loopar översätts till svansrekursiva funktioner Vilket som är bäst är en fråga om tycke och smak 12
14 Fibonacciserien Definition: fib0 = 0 fib1 = 1 fibn = fibn-1 + fibn-2 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 13
15 En dum implementation public static long fibonacci(long n) { if (n <= 1) return n; else return fibonacci(n 1) + fibonacci(n 2); 14
16 En dum implementation public static long fibonacci(long n) { if (n <= 1) return n; else return fibonacci(n 1) + fibonacci(n 2); 14
17 En dum implementation public static long fibonacci(long n) { if (n <= 1) return n; else return fibonacci(n 1) + fibonacci(n 2); 14 dubbelarbete!
18 En dum implementation public static long fibonacci(long n) { if (n <= 1) return n; else return fibonacci(n 1) + fibonacci(n 2); 14 dubbelarbete!
19 En dum implementation public static long fibonacci(long n) { if (n <= 1) return n; else return fibonacci(n 1) + fibonacci(n 2); 14 dubbelarbete!
20 En bättre implementation public static long fibonacci(long n) { return fibo(1, 0, n); fibk fibk-1 static long fibo(long current, long previous, int n) { if (n == 1) return current; else return fibo(current + previuos, current, n 1); fibk+1 = fibk + fibk-1 fibk 15
21 En iterativ implementation public static long fibonacci(long n) { long previous = 0; long current = 1; for (var i = 2; i <= n; i++) { long temp = previous; previous = current; current += temp; return current; 16
22 Binärsökning i ett sorterat fält Antag att vi ska leta efter ett objekt i ett sorterat fält: då kan vi jämföra vårt objekt med mittelementet om de inte är lika så fortsätter vi leta, antingen i elementen till vänster eller till höger om mittelementet istället för att fortsätta leta bland n 1 element, så letar vi bland n/2 element 17
23 Binärsökning (forts.) Rekursiv algoritm för att söka efter ett objekt i ett fält: om fältet är tomt: returnera 1 annars, om målobjektet är lika med mittelementet: returnera mittelements position annars, om målobjektet är mindre än mittelementet: sök rekursivt bland elementen som ligger före mittelementet annars är målobjektet större än mittelementet: sök rekursivt bland elementen som ligger efter mittelementet 18
24 Comparable-gränssnittet Comparable-gränssnittet deklarerar metoden compareto() Metodanropet obj1.compareto(obj2) ska returnera ett heltal med följande värden: negativt om obj1 < obj2 noll om obj1 == obj2 positivt om obj1 > obj2 19
25 20 Binärsökning i ett fält
26 Binärsökning, exempel Caryn Debbie Dustin Elliot Jacquie Jonathon Rich
27 Binärsökning, exempel target = Dustin Caryn Debbie Dustin Elliot Jacquie Jonathon Rich
28 Binärsökning, exempel target = Dustin Första anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich
29 Binärsökning, exempel target = Dustin Första anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first middle last 21
30 Binärsökning, exempel target = Dustin Första anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first middle last 21
31 Binärsökning, exempel target = Dustin Andra anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first middle last 21
32 Binärsökning, exempel target = Dustin Andra anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first middle last 21
33 Binärsökning, exempel target = Dustin Andra anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first middle last 21
34 Binärsökning, exempel target = Dustin Tredje anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich first middle last 21
35 Binärsökning, exempel target = Dustin Tredje anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich last middle first 21
36 Binärsökning, exempel target = Dustin Tredje anropet Caryn Debbie Dustin Elliot Jacquie Jonathon Rich last middle first 21
37 Binärsökning, iterativt Binärsökning är fortfarande enkelt att implementera iterativt. Iterativ algoritm binarysearch(e[] A, E target): first = 0, last = A.length 1 repetera ända tills first > last: middle = (first + last) / 2 om A[middle] == target: return middle om A[middle] < target: last = middle 1 om A[middle] > target: first = middle + 1 return 1 22
38 Förvillkor och invariant Binärsökning har ett viktigt förvillkor: fältet måste vara sorterat, annars blir resultatet odefinierat sådana förvillkor måste skrivas i dokumentationen för en metod/funktion Under förutsättning att fältet är sorterat så kan vi formulera en invariant för binärsökningen: first middle last, och A[first] target A[last] Att formulera bra invarianter och förvillkor är nödvändigt för att kunna bevisa att algoritmer är korrekta 23
39 Binärsökning, effektivitet Vid varje rekursivt anrop (iterativ loop) eliminerar vi halva fältet O(log n) Ett fält med 16 element kommer alltså att söka igenom delfält med storlekarna 16, 8, 4, 2 och 1 fem jämförelser i värsta fall: 16 = = log Ett dubbelt så stort fält kräver endast 6 jämförelser i värsta fall: 32 = = log Ett fält med element kräver endast 16 jämförelser! 16 = log
40 Arrays.binarySearch Javas API-klass Arrays innehåller en binärsökning i fält: java.util.arrays.binarysearch(e[], E) anropas med sorterade fält om elementen inte är jämförbara, eller om fältet inte är sorterat, så är resultatet odefinierat dvs, det kastar inte ett Exception! om det finns flera kopior av samma objekt, så vet vi inte vilken som kommer att hittas 25
41 Avancerad rekursion Hittills har vi tittat på enkla rekursioner med precis lika enkla (eller enklare) iterativa alternativ de rekursiva anropen motsvarar loopar Mer komplexa rekursiva algoritmer är inte lika enkla att översätta iterativt de behöver en stack (eller någon annan datastruktur) för att lagra de rekursiva anropen (eller flera stackar, eller en stack av stackar ) 26
42 En stack istället för rekursion Medelkomplex rekursion kräver en explicit stack för att kunna översättas iterativt: push() motsvaras av ett rekursivt anrop pop() motsvaras av att returnera rekursionen använder sig av Javas egen call stack, medan den iterativa varianten måste använda en egen stack Vilket sätt som är enklast är en fråga om tycke och smak: iteration med en explicit stack en implicit stack genom rekursiva anrop Det finns rekursiva algoritmer där det inte räcker med en enda stack, utan det istället behövs en trädstruktur 27
43 Balanserade parenteser, iterativt private static final String PARENS = "()[]{"; public static void parseparensiterative(string str) throws ParseException { Stack<Integer> parenstack = new Stack<Integer>(); for (int i = 0; i < str.length(); i++) { char c = str.charat(i); int paren = PARENS.indexOf(c); if (paren >= 0) { if (paren % 2 == 0) { parenstack.push(paren); else { if (parenstack.empty()) throw new ParseException("Too many close parentheses", i); int openparen = parenstack.pop(); if (paren!= openparen + 1) throw new ParseException("Unbalanced parentheses", i); if (!parenstack.empty()) throw new ParseException("Too many open parentheses", str.length()); 28
44 Balanserade parenteser, rekursivt public static void parseparensrecursive(string str) throws ParseException { parseparensrecursive(str, 0, -1); 29 private static int parseparensrecursive(string str, int i, int openparen) throws ParseException { Stack<Integer> parenstack = new Stack<Integer>(); for (int i = 0; i < str.length(); i++) { char c = str.charat(i); int paren = PARENS.indexOf(c); if (paren >= 0) { if (paren % 2 == 0) { i = parseparensrecursive(str, i+1, paren); else { if (!parenstack.empty()) if (openparen < 0) throw new ParseException("Too many close parentheses", i); int openparen = parenstack.pop(); if (paren!= openparen + 1) throw new ParseException("Unbalanced parentheses", i); return i; if (!parenstack.empty()) if (openparen >= 0) throw new ParseException("Too many open parentheses", i); return i;
45 Tornen i Hanoi Du ska flytta alla brickor till en annan pinne: endast en bricka i taget (den översta) får flyttas en större bricka får inte placeras på en mindre 30
46 Algoritm för tornen i Hanoi Lösning till 3-bricksproblemet: att flytta de tre brickorna från pinne L till pinne R. (1) flytta de två översta brickorna från pinne L till pinne M (2) flytta den understa brickan från pinne L till pinne R (3) flytta de två översta brickorna från pinne M till pinne R 31
47 Algoritm för tornen i Hanoi Dellösning till 3-bricksproblemet: att flytta de två brickorna från pinne M till pinne R. (1) flytta den översta brickan från pinne M till pinne L (2) flytta den understa brickan från pinne M till pinne R (3) flytta den översta brickan från pinne L till pinne R 32
48 Algoritm för tornen i Hanoi Lösning till 4-bricksproblemet: att flytta de fyra brickorna från pinne L till pinne R. (1) flytta de tre översta brickorna från pinne L till pinne M (2) flytta den understa brickan från pinne L till pinne R (3) flytta de tre översta brickorna från pinne M till pinne R 33
49 Tornen i Hanoi, rekursivt Rekursiv algoritm för n-bricksproblement, att flytta n brickor från pinne A till pinne B, med mellanpinne C. Om n = 1: (1) flytta bricka nr 1 (den minsta brickan) från A till B Annars: (2) flytta de n 1 översta brickorna från A till C (3) flytta bricka n från A till B (4) flytta de n 1 översta brickorna från C till A 34
50 Backtracking Backtracking är ett sätt att leta efter en lösning genom systematiskt pröva alla möjligheter T.ex. när du letar efter en väg genom en labyrint: när du stöter på en vägkorsning så prövar du först det ena alternativet om det misslyckas prövar du nästa alternativ fortsätt så för varje vägkorsning i labyrinten 35
51 Hitta en stig genom en labyrint Problembeskrivning: labyrinten är en matris med färgade celler startpunkten är övre vänstra hörnet (0, 0) utgången är nedre högra hörnet (n 1, m 1) alla öppna celler har färgen ÖPPEN alla väggar har färgen VÄGG Lösningsskiss: vi prövar rekursivt alla grannar celler som vi har besökt får färgen BESÖKT om cellen är en vägg eller redan besökt så misslyckas vi och backtrackar genom att pröva en tidigare granne om vi hittar en stig så ger vi den färgen STIG 36
52 Rekursiv algoritm för att hitta genom en labyrint Rekursiv algoritm hittastig(cell) om cell är utanför labyrinten, eller har färgen VÄGG eller BESÖKT: return false om cell är labyrintens utgång: ge cell färgen STIG return true ge cell färgen BESÖKT för varje granne till cell: om hittastig(granne): ge cell färgen STIG return true return false 37
53 Rekursiv algoritm för att hitta genom en labyrint Rekursiv algoritm hittastig(cell) om cell är utanför labyrinten, eller har färgen VÄGG eller BESÖKT: return false om cell är labyrintens utgång: ge cell färgen STIG return true ge cell färgen BESÖKT för varje granne till cell: om hittastig(granne): ge cell färgen STIG return true return false rekursivt anrop 37
54 Rekursiv algoritm för att hitta genom en labyrint Rekursiv algoritm hittastig(cell) om cell är utanför labyrinten, eller har färgen VÄGG eller BESÖKT: return false om cell är labyrintens utgång: ge cell färgen STIG return true ge cell färgen BESÖKT för varje granne till cell: om hittastig(granne): ge cell färgen STIG return true return false backtracking rekursivt anrop 37
55 n-queens puzzle Problembeskrivning: att ställa ut n schackdamer på ett n n-bräde, så att ingen dam hotar någon annan dam Lösningsförslag: för att fylla rad k: placera drottningen på någon kolumn försök fylla rad k+1 (rekursivt) om det misslyckas, placera ut drottningen på en ny kolumn (backtracking) 38
56 damproblemet i Java private int[] queens; public int[] solvequeens(int N) { queens = new int[n]; solvequeensrow(0, N); return queens; private boolean solvequeensrow(int n, int N) { if (n == N) { return true; else { for (int i = 0; i < N; i++) { queens[n] = i; if (isconsistent(queens, n)) if (solvequeensrow(n+1, N)) return true; return false; 39 kod lånad från:
57 damproblemet i Java private int[] queens; public int[] solvequeens(int N) { queens = new int[n]; solvequeensrow(0, N); return queens; private boolean solvequeensrow(int n, int N) { if (n == N) { return true; else { for (int i = 0; i < N; i++) { queens[n] = i; if (isconsistent(queens, n)) if (solvequeensrow(n+1, N)) return true; return false; rekursivt anrop 39 kod lånad från:
58 damproblemet i Java private int[] queens; public int[] solvequeens(int N) { queens = new int[n]; solvequeensrow(0, N); return queens; private boolean solvequeensrow(int n, int N) { if (n == N) { return true; else { for (int i = 0; i < N; i++) { queens[n] = i; if (isconsistent(queens, n)) if (solvequeensrow(n+1, N)) return true; return false; backtracking rekursivt anrop 39 kod lånad från:
59 damproblemet i Java (forts.) public boolean isconsistent(int[] queens, int n) { for (int i = 0; i < n; i++) { if (queens[i] == queens[n]) return false; if (queens[i] queens[n] == n i) return false; if (queens[i] queens[n] == i n) return false; return true; public void printqueens(int[] q) { int N = queens.length; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (queens[i] == j) System.out.print("Q "); else System.out.print(" "); System.out.println(); System.out.println(); 40
60 damproblemet i Java (forts.) public boolean isconsistent(int[] queens, int n) { for (int i = 0; i < n; i++) { if (queens[i] == queens[n]) return false; if (queens[i] queens[n] == n i) return false; if (queens[i] queens[n] == i n) return false; return true; public void printqueens(int[] q) { int N = queens.length; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (queens[i] == j) System.out.print("Q "); else System.out.print(" "); System.out.println(); System.out.println(); samma kolumn 40
61 damproblemet i Java (forts.) public boolean isconsistent(int[] queens, int n) { for (int i = 0; i < n; i++) { if (queens[i] == queens[n]) return false; if (queens[i] queens[n] == n i) return false; if (queens[i] queens[n] == i n) return false; return true; public void printqueens(int[] q) { int N = queens.length; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (queens[i] == j) System.out.print("Q "); else System.out.print(" "); System.out.println(); System.out.println(); samma kolumn ena diagonalen 40
62 damproblemet i Java (forts.) public boolean isconsistent(int[] queens, int n) { for (int i = 0; i < n; i++) { if (queens[i] == queens[n]) return false; if (queens[i] queens[n] == n i) return false; if (queens[i] queens[n] == i n) return false; return true; public void printqueens(int[] q) { int N = queens.length; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (queens[i] == j) System.out.print("Q "); else System.out.print(" "); System.out.println(); System.out.println(); andra diagonalen samma kolumn ena diagonalen 40
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
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
Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.
Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera
SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall
Rekursiva funktioner Föreläsning 10 (Weiss kap. 7) Induktion och rekursion Rekursiva funktioner och processer Weiss 7.1-3 (7.4, 7.5.3 utgår) Fibonaccital (7.3.4) Exempel: Balansering av mobil (kod se lab
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
Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.
Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera
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
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)
Föreläsning 11: Rekursion
TDA 545: Objektorienterad programmering Föreläsning 11: Rekursion Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Läsanvisning: kap 19, men bara t.o.m. sida 812 rekursion fakulteten exponentiering
Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T
Algoritmer och datastrukturer H I 1 0 2 9 HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T Föreläsning 1 Inledande om algoritmer Rekursion Stacken vid rekursion Rekursion iteration Möjliga vägar
Föreläsning 8 Innehåll
Föreläsning 8 Innehåll Orientering om samarbete om Eclipse-projekt med git Orientering om konstruktion av användargränssnitt i Android Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering
Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,
Exempel: Kappsäcksproblemet Backtracking Dynamisk programmering Föreläsning (Weiss kap..-) Kan man ur en grupp föremål F,,F N med vikterna V,,V N välja ut en delgrupp som väger exakt M kilo? Exempel: föremål
Föreläsning 6. Rekursion och backtracking
Föreläsning 6 Rekursion och backtracking Föreläsning 6 Bredden först med hjälp av kö Lista rekursivt Tornet i Hanoi Backtracking Hissen i lustiga huset Huset har n antal våningar (bottenvåningen som räknas
F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander
F11 - Rekursion ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Rekursion Rekursion är en programmeringsteknik En metod anropar sig själv public String reverse (String s) { if (s.length()
Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4
Träd, binära träd och sökträd Koffman & Wolfgang kapitel 6, avsnitt 1 4 1 Träd Träd är ickelinjära och hierarkiska: i motsats till listor och fält en trädnod kan ha flera efterföljare ( barn ) men bara
Föreläsning 1, vecka 7: Rekursion
TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 7: Rekursion Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Nytt: Extra labbtillfälle för Grupp B (för att grupp Bs labbtider har på senaste
Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar
Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10
Objektorienterad programmering E Föreläsning 10 Rekursion Länkade datastrukturer Back to Basics Exekvera programmet för hand! public class Param { public static int f(int x) { return x+1; public static
Föreläsning 6. Rekursion och backtracking
Föreläsning 6 Rekursion och backtracking Föreläsning 6 Bredden först med hjälp av kö Lista rekursivt Tornet i Hanoi Backtracking Läsanvisningar och uppgifter Hissen i lustiga huset Huset har n antal våningar
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
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Föreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
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
Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer
Föreläsning 4 Metodanrop switch-slingor Rekursiva metoder Repetition av de första föreläsningarna Inför seminariet Nästa föreläsning Metodanrop - primitiva typer Vid metodanrop kopieras värdet av en variabel
Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254
Rekursion Rekursion är en grundläggande programmeringsteknik M h a rekursion kan vissa problem lösas på ett mycket elegant sätt Avsnitt 11 i kursboken: Att tänka rekursivt Att programmera rekursivt i Java
TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P
UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr
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
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
if (n==null) { return null; } else { return new Node(n.data, copy(n.next));
Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas 22 september 2015 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
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
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
Föreläsning 9 Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2
Föreläsning 8: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och
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
Föreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
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;
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ö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.
Datastrukturer. föreläsning 3. Stacks 1
Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer
Lösningsförslag: Instuderingsfrågor, del D
Uppgift 1. Objektorienterad programmering, Z1 Lösningsförslag: Instuderingsfrågor, del D a) Inget fält behövs. Man kan läsa in ett tal i taget och addera dessa till summan. b) Här behövs ett fält. c) Här
Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en
Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande
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
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
Typkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
TENTAMEN: Algoritmer och datastrukturer. Läs detta!
1 (6) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi
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ö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
Tentamen ID1004 Objektorienterad programmering May 29, 2012
Omtentamen för ID1004 Objektorienterad programmering HT11, 29 maj 2012, 09-13 Denna tentamen examinerar 3 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av 12 frågor. Varje fråga
Tentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Programmering för språkteknologer II, HT2014. Rum
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer
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
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 =
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar
String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning
Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig
Arrayer (fält)
Arrayer (fält) 1 Vad kommer vi att ta upp om arrayer? Deklarera och initiera arrayen Lägga till i arrayen Ta ut på indexposition Ta reda på arrayens längd Sortera arrayen Söka igenom arrayen Loopa igenom
DAI2 (TIDAL) + I2 (TKIEK)
TNTMN KURSNMN PROGRM: KURSTKNING XMINTOR lgoritmer och datastrukturer I2 (TIL) + I2 (TKIK) 2017/2018, lp 4 LT75 Uno Holmer TI ÖR TNTMN redagen den 1/8 2018, 08.0-12.0 HJÄLPML NSVRIG LÄRR atastrukturer
Generiska konstruktioner. Kursbokens kapitel 13
Generiska konstruktioner Kursbokens kapitel 13 1 Vad är en generisk konstruktion? Generisk står för; allmän eller generell En generisk konstruktion kan användas för olika typer av data Med hjälp av templates
Tentamen OOP 2015-03-14
Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning
Föreläsning 2, vecka 8: Repetition
TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 8: Repetition Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Metoder och terminologi Referensvärden och arrays Interface och ritning
Den som bara har en hammare tror att alla problem är spikar
Introduktion Föreläsning (Weiss kap. -4) Många begrepp blir det Introduktion till kursen Exempel: Datastrukturen mängd Generiska Den som bara har en hammare tror att alla problem är spikar Vilken
Repetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.
Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen
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
Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)
Objektorienterad programmering Föreläsning 9 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Fält Grunderna Fält med komponenter av struct-typ Fält med referenser Standardklassen
DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU
DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,
Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python
Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python
Föreläsning 12: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 12: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Problemlösning, dvs hur man ska tänka för att hitta lösning int mängd/set
Föreläsning 3-4 Innehåll
Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå
Repetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
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
TENTAMEN OOP
TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel
Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av
Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet
Procedurer och villkor Rekursiva procedurer (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between
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
Procedurer och villkor
Procedurer och villkor (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between 3 2 5) #f DA2001
1 Comparator & Comparable
1 Comparator & Comparable 1.1 Implementation av Comparable Att implementera Comparable innebär att man gör objekt av sin klass jämförbara med andra och att det därmed antas existera en naturlig ordning
TDDC74 Lab 02 Listor, sammansatta strukturer
TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare
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ö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).
I ett program hantera man ofta samlingar av objekt av samma typ.
Fält I ett program hantera man ofta samlingar av objekt av samma typ. Sådana samlingar vill man vanligtvis kunna gruppera ihop till en sammanhängande struktur. För detta ändamål tillhandahåller Java språkkonstruktioner
Tentamen TEN1 HI1029 2014-05-22
Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Att skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2
AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga
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
Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002
Pedher Johansson Institutionen för datavetenskap LÖSNINGSFÖRSLAG Lösningsförslag Tentamen Programmeringsmetodik, KV: Java och OOP 17 januari 2002 Uppgift 1 (20 p) Teoriuppgifter Resultat och uppgifter
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
Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass
Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klassen Mio ffl Särfall ffl Interface Kungl. Tekn. Högskolan
Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad
Programmeringsmetodik DV1 Programkonstruktion 1 Moment 4 Om rekursion PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad 2006-10-17 Summera godtyckligt antal tal (* sumupto n Type: int->int Pre: n >= 0, n
Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp
Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser
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
Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.
Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.