Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:
|
|
- Carl-Johan Gunnarsson
- för 7 år sedan
- Visningar:
Transkript
1 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 6, övningsuppgifter 7, lab 3 Avsnitt i läroboken: I gamla upplagan: PFK (Föreläsning 6) HT / 48 Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursiv problemlösning: Dela upp problemet i en eller flera enklare versioner av det ursprungliga problemet. Rekursiva metoder är metoder som anropar sig själva (för mindre värden på storleksparameter). Många datastrukturer går att definiera rekursivt. Ex: listor, träd PFK (Föreläsning 6) HT / 48 Rekursiv problemlösning Rekursiv problemlösning Mönster för rekursiv algoritm Kan liknas vid önsketänkande: Om jag har lösningen till en (eller flera) mindre instans(er) så kan jag konstruera en lösning för den aktuella instansen genom att... Ex: Summera de n första talen i en vektor. Rekursivt tänkande: Om summan av de n-1 första talen är känd, så får vi lösningen genom att summera denna summa och det sista talet. För att det ska fungera krävs basfall där lösningen ges explicit. Basfallen är (oftast) små instanser, t ex 0. I exemplet ovan är ett naturligt basfall n=0. Då är summan 0. Rekursiv lösning för problem med storlek n: Om problemet går att lösa för aktuellt n-värde: Lös det annars Lös problemet (rekursivt) för en eller flera mindre värden på n Kombinera dessa lösningar till en lösning på problemet för n PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
2 Rekursiv beräkning av n! Exekvering och metodanrop Definition 0! =1 (basfall) n! =n (n 1)!, n heltal > 0 (rekursiva steget) För alla metodanrop (rekursiva såväl som icke-rekursiva) gäller: Ett anrop av en metod innebär att exekveringen fortsätter med den första satsen i den anropade metoden. När den anropade metoden är klar återupptas exekveringen i den metod där anropet gjordes. public static long factorial(int n) { if (n == 0) { return 1; else { return n * factorial(n - 1); public void p() { q(); public void q() { r(); public void r() { PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Exekvering av rekursiva metoder Exempel Exekvering och metodanrop 6 factorial(3) n = 3 return 3 * factorial(2) Vid exekvering av ett metodanrop skapar runtimesystemet en aktiveringspost. 2 factorial(2) n = 2 return 2 * factorial(1) 1 factorial(1) n = 1 return 1 * factorial(0) 1 factorial(0) n = 0 return 1 I aktiveringsposten finns uppgifter om återhoppsadress (där anropet gjordes) parametrarnas värden lokala variabler och deras värden Aktiveringsposterna placeras i en stack. Den metod som exekverar har sin post överst på stacken. Aktiveringsposten tas bort när metoden exekverat klart. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
3 Exekvering av rekursiva metoder Rekursiva metoder anropar sig själva. Det kommer att på stacken finnas aktiveringsposter för alla oavslutade upplagor av metoden. Stackens utseende under exekvering av ett anrop av factorial(3): Endast parmeterns värde visas för varje upplaga. n = 3 Efter anrop factorial(3) n = 2 n = 3 Efter anrop factorial(2) n = 1 n = 2 n = 3 Efter anrop factorial(1) n = 0 n = 1 n = 2 n = 3 Efter anrop factorial(0) n = 1 n = 2 n = 3 Efter return 1 n = 2 n = 3 n = 3 Efter return 1*factorial(0) Efter return 2*factorial(1) Efter return 3*factorial(2) Rekursiv metod En rekursiv metod måste ha: En eller flera parametrar som bestämmer problemets storlek Ett eller flera basfall som löses direkt. Ett eller flera rekursiva anrop. De rekursiva anropen måste leda till att ett basfall så småningom nås. public static int factorial(int n) { if (n == 0) { return 1; basfall else { return n * factorial(n - 1); rekursivt anrop parameter PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Övning Exempel: Skriv ut ett tal baklänges Algoritm Skriv en rekursiv metod som beräknar x n. n är ett positivt heltal. Definition x 0 = 1 x n = x x n 1, n heltal > 0 Problem: Givet ett heltal n 0. Skriv ut siffrorna i omvänd ordning. Exempel: Talet 257 ska ge utskriften 752 Basfall: Talet har bara en siffra. Skriv ut denna enda siffra. Rekursiva steget: Skriv först ur sista siffran. Skriv därefter ut de övriga siffrorna i omvänd ordning. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
4 Exempel: Skriv ut ett tal baklänges Rekursiv metod Exempel: Skriv ut ett tal baklänges Negativa tal public static void reverse(int n) { if (n < 10) { System.out.print(n); else { System.out.print(n % 10); reverse(n / 10); Metoden klarar inte och ska inte klara negativa tal Det bör kontrolleras. Vi inför därför en metod som först kontrollerar parametern och därefter anropar den rekursiva metoden: public static void printreverse(int n) { if (n < 0) { throw new IllegalArgumentException("Argument < 0"); reverse(n); System.out.println(); Den rekursiva metoden bör nu göras privat. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Rekursion och listor Rekursiva datastrukturer Rekursion och listor Klassen SingleLinkedList från tidigare föreläsning Begreppet lista med n element kan definieras rekursivt: om n == 0 är listan tom (basfall) annars består den av ett första element följt av en lista med n 1 element public class SingleLinkedList<E> { private ListNode<E> first; private static class ListNode<E> { E element; ListNode<E> next; första elementet lista med n-1 element first next element next element next element null PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
5 Diskutera Rekursion och listor Rekursion och listor Exempel Antag att vi vill skriva ut innehållet i listan i omvänd ordning med rekursiv teknik. Börja med att tänka ut basfall. enklare delproblem (rekursiva steget). Skissa sedan på algoritmen i pseudokod. Problem: Skriv ut innehållet i listan i omvänd ordning. public void printreverse() { printreverse(first); private void printreverse(listnode<e> node) { if (node!= null) { printreverse(node.next); System.out.println(node.element); PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Rekursion och listor Observationer Basfallet i printreverse syns inte. Basfallet är den tomma listan (node == null) dåingentinggörs. Metoden har tidskomplexitet O(n) det görs n metodanrop och i varje upplaga görs ett arbete som tar konstant tid. En icke-rekursiv variant är besvärligare att uttrycka. Ett alternativ är att söka efter sista, näst sista o.s.v. Det blir krångligare kod och högre tidskomplexitet. Ett annat alternativ är att använda en stack. Lika effektivt som den rekursiva lösningen, men något krångligare att uttrycka. I printreverse vi utnyttjat att vi har tillgång till den interna datastrukturen. Om man använder någon av Collection-klasserna i Java får man lösa det på något annat sätt. Man kan t.ex. skicka med en iterator som parameter till den rekursiva metoden. PFK (Föreläsning 6) HT / 48 Hanois torn pinne 1 pinne 2 pinne 3 n skivor finns i avtagande storlek på en pinne (start, t ex 1). Flytta dem så att de kommer i samma inbördes ordning på en av de andra pinnarna (dest, t ex 3). Även den tredje pinnen (temp, t ex 2) får utnyttjas för mellanlagring. PFK (Föreläsning 6) HT / 48
6 Hanois torn regler Bara en skiva i taget får flyttas. En skiva som tas från en pinne måste genast läggas på en av de andra pinnarna. Det får aldrig inträffa under flyttningarnas gång att en större skiva hamnar ovanför en mindre (på samma pinne). Hanois torn rekursiv lösning Basfall: Endast en skiva att flytta (n = 1). Flytta skivan från start till dest. Rekursiva steget: 1 Flytta först de n 1 översta skivorna från start till temp. 2 Flytta därefter den största skivan från start till dest. 3 Till sist flyttas de n 1 skivorna från temp till dest från start till temp 3. från temp till dest 2. från start till dest PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Hanois torn rekursiv metod Binärsökning Algoritm public void move(int n, int start, int dest, int temp) { if (n == 1) { System.out.println("Move from " + start + " to " + dest); else { move(n - 1, start, temp, dest); System.out.println("Move from " + start + " to " + dest); move(n - 1, temp, dest, start); Om en vektor är sorterad i växande ordning och vi söker ett element x, finns en effektiv algoritm: Basfall: 0 element. Sökt element finns ej. Rekursiva steget: 1 Jämför x med mittelementet i vektorn. Om likhet, avbryt. 2 Om x är mindre än mittelementet, fortsätt sökningen i vänster halva av vektorn. 3 Om x är större än mittelementet, fortsätt sökningen i höger halva av vektorn. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
7 Binärsökning - parametrar I den rekursiva lösningen måste varje upplaga av metoden känna till vilken del av vektorn den arbetar med. Det kommer därför att behövas parametrar för första index och sista index i den rekursiva metoden. Användare ska dock inte behöva anropa med två index. Det räcker att de anger vad som söks och vilken vektor det ska sökas i. Den publika metoden som användare får tillgång till: /** Returns the index of x if found in the array a, otherwise -1. The array must be sorted.*/ public static int binarysearch(int[] a, int x) { return binarysearch(a, x, 0, a.length - 1); Den rekursiva hjälpmetodens rubrik: private static int binarysearch(int[] a, int x, int first, int last); PFK (Föreläsning 6) HT / 48 Binärsökning Generiska metoder Den publika metoden som användare får tillgång till: /** Returns the index of x if found in the array a, otherwise -1. The array must be sorted.*/ public static <E extends Comparable<E>> int binarysearch(e[] a, E x) { return binarysearch(a, x, 0, a.length - 1); Den rekursiva hjälpmetodens rubrik: private static <E extends Comparable<E>> int binarysearch(e[] a, E x, int first, int last); Implementering följer, men först en liten utvikning om generiska metoder. Binärsökning - generisk metod Vi vill ha en generell metod, d.v.s. en metod som kan söka efter ett element i en vektor av godtycklig typ (och inte bara heltal). Lösning: Låt metoden vara generisk, dvs deklarera en typparameter (E) i metodrubriken. public static <E> int binarysearch(e[] a, E x) Vi måste dock kräva att elementen är av en typ för vilka jämförelse är definierad eftersom vektorn ska vara sorterad. Lösning: Kräv att den klass som ersätter E implementerar interfacet Comparable. public static <E extends Comparable<E>> int PFK (Föreläsning 6) HT / 48 Generiska metoder Man kan deklarera generiska metoder, genom att parametrisera metoden med en eller flera typparametrar. Exempel: public class Utilities { /* Fyller alla platser i a med elementet x */ public static <T> void fill(t[] a, T x) { for (int i = 0; i < a.length; i++) { a[i] = x; Typparameter (en eller flera) anges inom < och > före metodens returtyp. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
8 Generiska metoder Den generiska metoden binarysearch Generiska metoder kan anropas utan att man explicit anger vad typen T är: Integer[] nbrs = new Integer[10]; Utilities.fill(nbrs, -1); String[] a = new String[5]; Utilities.fill(a, "abc"); För det första anropet fastställer kompilatorn typen T till Integer och idetandratillstring. public static <E extends Comparable<E>> int binarysearch(e[] a, E x) { return binarysearch(a, x, 0, a.length - 1); Har en typparameter E med inskränkning: E måste vid anrop vara en klass som implementerar interfacet Comparable<E> Har returtyp int: Returtypen skrivs efter typparametrarna Har två parametrar som använder E i sin deklaration: E[] a och E x PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Binärsökning Privat metod Binärsökning Effektivitet private static <E extends Comparable<E>> int binarysearch(e[] a, E x, int first, int last) { if (first > last) { return -1; else { int mid = first + ((last - first) / 2); int compresult = x.compareto(a[mid]); if (compresult == 0) { return mid; else if (compresult < 0) { return binarysearch(a, x, first, mid - 1); else { return binarysearch(a, x, mid + 1, last); Linjärsökning är O(n) i värsta fall. Binärsökningen är mycket effektivare. I värsta fall finns inte x i vektorn. Vi börjar med vektorstorlek n, därefter n/2, n/4,n/2 k,,1, 0. Det krävs 2 log(n) halveringar i värsta fall. I varje upplaga krävs konstant arbete. Hela algoritmen blir därför O(logn) i värsta fall. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
9 Samband mellan rekursion och induktion Exempel Visa att n = n(n + 1)/2 förallan 1 Matematisk induktion används ofta för att bevisa samband som gäller för positiva heltal n. Bevisen görs i två steg: 1 Visa att sambandet gäller för ett eller flera små värden på n. 2 Visa att om man gör antagandet att sambandet håller för alla heltal n upp till ett visst värde k, så gäller det även för närmast större värde k+1. 1 n = 1. Vänsterledet = 1. Högerledet = 1 2/2 = 1. Stämmer. 2 Vi antar nu att n = n(n + 1)/2 för1apple n apple k (*) Visa att k + k + 1 =(k + 1)(k + 2)/2. Vänsterledet = ( k)+k + 1 = [enligt (*)] = k(k + 1)/2 + k + 1 =(k 2 + 3k + 2)/2 Högerledet = (k + 1)(k + 2)/2 =(k 2 + 3k + 2)/2 = Vänsterledet. PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Induktion för att visa att en rekursiv algoritm är korrekt public static long factorial(int n) { if (n == 0) { return 1; else { return n * factorial(n - 1); 1 När n=0 blir resultatet 1 vilket är korrekt enligt def av n! 2 Antag att algoritmen ger korrekt resultat för 0 apple n apple k. (*) Anrop factorial(k+1) ger (eftersom k + 1 > 0) resultatet (k + 1) factorial(k+1-1) =(k + 1) factorial(k). Enligt induktionsantagandet (*) ger anropet factorial(k) korrekt resultat, dvs k!. Vi får därför resultatet (k + 1) k! =(k + 1)! V.S.B. Söndra och härska Divide and conquer teknik för att konstruera rekursiva algoritmer. Avser rekursiva algoritmer som gör minst två rekursiva anrop i varje upplaga. Problemet delas upp i två eller flera mindre som löses rekursivt (söndra). Lösningarna kombineras till en lösning till det ursprungliga problemet (härska) PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
10 Söndra och härska Fibonaccitalen Sortering av element i en vektor: Dela vektorn i två lika stora halvor Sortera (rekursivt) första halvan a[0... n/2] Sortera (rekursivt) andra halvan a[n/ n-1] Slå samman de båda sorterade delvektorerna så att hela vektorn a[0... n-1] blir sorterad Det är i härska-steget som själva algoritmkonstruktionen ligger. Söndra-stegen är bara rekursiva anrop. Sorteringsmetoden, Mergesort, blir mycket snabb när steg 3 utförs på ett effektivt sätt. Vi återkommer till denna metod senare i kursen. Leonardo Pisano Fibonacci Born: 1170 in (probably) Pisa (now in Italy) Died: 1250 in (possibly) Pisa (now in Italy) Acertainmanputapairofrabbitsinaplacesurroundedon all sides by a wall. How many pairs of rabbits can be produced from that pair in a year if it is supposed that every month each pair begets a new pair which from the second month on becomes productive? PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Fibonaccitalen söndra och härska Definition F n = F n 1 + F n 2 för n 2 F 0 = 0 F 1 = 1 public static long fib(int n) { if (n <= 1) { return n; else { return fib(n - 1) + fib(n - 2); Diskutera Fibonaccitalen public static long fib(int n) { if (n <= 1) { return n; else { return fib(n - 1) + fib(n - 2); Är detta en bra metod? Hur många anrop av metoden fib krävs för att beräkna andra fibonaccitalet? Tredje? Fjärde? PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
11 Fibonaccitalen effektivitet Samma Fibonaccital kommer att beräknas många gånger. Ineffektivt! Det blir exponentiell tidskomplexitet, dvs O(2 n ) för att beräkna fib(n). Studera t ex ett anrop fib(4): fib(3) fib(4) fib(2) Dynamisk programmering Dynamisk programmering innebär att man i en tabell håller reda på vilka instanser av problemet man redan löst. När man behöver lösningen till en viss instans kontrollerar man först i tabellen om den redan beräknats. I så fall hämtas lösningen där, d.v.s. man gör inget rekursivt anrop. Om lösningen inte finns i tabellen gör man ett rekursivt anrop och sätter sedan in den beräknade lösningen i tabellen. fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48 Dynamisk programmering - Fibonaccitalen public long fib(int n) { long[] table = new long[n+1]; // skapa en tabell for (int i = 0; i <= n; i++) { table[i] = -1; // negativt värde <=> ej beräknat return recfib(table, n); private long recfib(long[] table, int n) { if (table[n] < 0 ) { if (n <= 1) { table[n] = n; else { table[n] = recfib(table, n-1) + recfib(table, n-2); return table[n]; Dynamisk programmering - Fibonaccitalen Dynamisk programmering för Fibonaccitalen har linjär tidskomplexitet. Varje tal beräknas en gång. fib(4) fib(3) fib(2) fib(1) fib(0) PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
12 Fibonaccitalen iterativ lösning Effektiviteten vid beräkning av Fibonaccitalen med hjälp av dynamisk programmering är av samma storleksordning som iden iterativa algoritmen, d.v.s. linjär: public long fib(int n) { if (n <= 1) { return n; else { int nbr1 = 0; int nbr2 = 1; int res = 0; for (int i = 2; i <= n; i++) { res = nbr1 + nbr2; nbr1 = nbr2; nbr2 = res; return res; PFK (Föreläsning 6) HT / 48 När ska rekursion användas? Vissa av de exempel vi sett kan lika enkelt lösas icke-rekursivt. Ex. beräkning av n! Ibland leder rekursion till väldigt ineffektiva algoritmer. Ex. fibonaccitalen Rekursion bör användas då Det är svårt att uttrycka lösningen icke-rekursivt. Gäller t.ex. algoritmer som manipulerar datastrukturer som träd och grafer. Det finns icke-rekursiv lösning, men den rekursiva är effektivare. Ex: sortering Det finns icke-rekursiv lösning och en lika effektiv rekursiv lösning som är enklare (att förstå, implementera... ). Ex: binärsökning, behandla elementen i en lista i omvänd ordning PFK (Föreläsning 6) HT / 48 Rekursion Datorlaboration 3 Fraktaler Rita fraktala figurer med hjälp av rekursion. Exempel på vad du ska kunna Förklara begreppet rekursion. Förklara hur rekursion fungerar. Formulera rekursiva algoritmer och implementera rekursiva metoder. Förklara begreppet söndra-och-härska i samband med rekursion. Använda dynamisk programmering för att eliminera onödiga rekursiva anrop. Kochs triangel byggs upp av tre linjer, där varje linje (längd, riktning) ersätts med fyra nya linjer: Berg byggs upp av en triangel (tre punkter) som ersätts av fyra nya trianglar: b b a c a c PFK (Föreläsning 6) HT / 48 PFK (Föreläsning 6) HT / 48
Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:
Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp
Läs merFö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
Läs merFö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
Läs merFö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
Läs merSCB :-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
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 merpublic 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)
Läs merRekursion. Koffman & Wolfgang kapitel 5
Rekursion Koffman & Wolfgang kapitel 5 1 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,
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 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 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 merObjektorienterad 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
Läs merBegreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll
Mera om generik Begreppet subtyp/supertyp i Java Innehåll Wildcards Vektorer och generik Supertyper för en viss klass C är alla klasser från vilka C ärver och alla interface som klassen implementerar.
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 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 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
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 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å
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 merRekursion 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
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 merAlgoritmer 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
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 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 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
Läs merSortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering
Föreläsning 12 Innehåll Sortering Sortering O(n 2 )-algoritmer: urvalsering insättningsering O(n log n)-algoritmer: Merge Quick Varför era? För att göra sökning effektivare. För att förenkla vissa algoritmer.
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 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 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 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 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 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 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 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 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 merDAT043 - föreläsning 8
DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns
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 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 merFöreläsning 4 Innehåll
Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och
Läs merExempel: 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
Läs merRekursion. 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
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 merDatastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd
Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:
Läs 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 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 merDugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
Läs merAbstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.
-Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och
Läs merADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar
Föreläsning 1 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Heapar Implementering av prioritetskö med heap Sortering med hjälp av heap
Läs 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 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 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 merFöreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition
Föreläsning Innehåll Diskutera 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 Jämföra objekt interfacet Comparable Interfacet
Läs merFÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION
FÖRELÄSNING 2, TDDC74, VT2018 Begrepp och definitioner (delvis från föreläsning 1) Fallanalys som problemlösningsmetod Rekursivt fallanalys Rekursiva beskrivningar och processer de kan skapa Rekursiva
Läs merMetodanrop - 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
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 merGrundläggande datalogi - Övning 3
Grundläggande datalogi - Övning 3 Björn Terelius November 14, 2008 Utskrift av stackar Tornen i Hanoi Principerna för rekursion: Hitta ett enkelt basfall (som har en känd lösning). Reducera varje annat
Läs merSö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 merTentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Läs merIntroduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner
Läs merProgrammering för språkteknologer II, HT2014. Rum
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer
Läs merADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition
Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue
Läs merFöreläsning 10 Innehåll
Föreläsning 10 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 Jämföra objekt interfacet Comparable Interfacet
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 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 merFöreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd
Föreläsning Innehåll Diskutera 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 Jämföra objekt interfacet Comparable Interfacet
Läs merKlassen 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äs merTentamen Datastrukturer (DAT037)
Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca
Läs merF9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander
F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt
Läs merFö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
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 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 merTentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2012-08-24, 8:30 12:30. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 9:30 och ca
Läs merProgrammeringsteknik - fördjupningskurs
Programmeringsteknik - fördjupningskurs David Karlsson 11 april 2012 1 Innehåll 1 Objektorientering 4 2 Kommentering av koden 6 3 Typer av fel 6 3.1 Exception..........................................
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 merif (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
Läs merLite 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
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 merIntroduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med
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 merTENTAMEN 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
Läs merF11 - 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()
Läs merFöreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering
2D1458, Problemlösning och programmering under press Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering Datum: 2007-09-04 Skribent(er): Anders Malm-Nilsson och Niklas Nummelin Föreläsare:
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 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 merObjektorienterad programmering
Objektorienterad programmering Föreläsning 22 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webacademy.se Agenda Rekursion Samlingar Listor Mängder Avbildningstabeller 1 Rekursion För att förstå rekursion
Läs merFö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
Läs merDagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?
Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Läs merTentamen Datastrukturer, DAT037 (DAT036)
Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.
Läs merÖvningshäfte 2: Induktion och rekursion
GÖTEBORGS UNIVERSITET MATEMATIK 1, MMG200, HT2017 INLEDANDE ALGEBRA Övningshäfte 2: Induktion och rekursion Övning D Syftet är att öva förmågan att utgående från enkla samband, aritmetiska och geometriska,
Läs merString [] 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
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 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 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 merAnmä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
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 9-10 Innehåll
Föreläsning 9-10 Innehåll Inläsning från textfil, utskrift från textfil Vektorer med objekt Matriser Datavetenskap (LTH) Föreläsning 9-10 HT 2018 1 / 41 Klassen Scanner Läsa från System.in Vi har tidigare
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 merAtt deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)
Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet
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 merDatastrukturer. föreläsning 3. Stacks 1
Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer
Läs mer