Rekursion och induktion för algoritmkonstruktion
|
|
- Lina Larsson
- för 4 år sedan
- Visningar:
Transkript
1 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 dock måste vara i någon mening enklare. Man delar alltså upp problemet i ett eller flera delproblem (av samma typ), löser dessa (på samma sätt) och sedan kombinerar sedan lösningarna av delproblemen till en lösning av ursprungsproblemet. Exempel: Beräkning av fakultet Iterativ definition: Iterativ beräkning: n! = n(n 1)(n 2) ! = 1 public static int fac(int n) { int p = 1; for (; n>1; n--) p = p*n; return p; Rekursiv definition: n! = { 1 om n = 0 n(n 1)! om n > 0 Rekursiv beräkning: public static int fac(int n) { if (n > 0) return (n*fac(n-1)); else return 1; Ett eller flera rekursionsterminerande fall måste definieras för att förhindra oändlig rekursion I detta exempel blir den rekursiva metoden knappast enklare eller effektivare än den iterativa men rekursiva resonemang är ett ändå kraftfullt sätt att hitta effektiva algoritmer. Att uttrycka sig rekursivt är ofta naturligt i matematiken. Deriveringsreglerna ( derivatan av en summa är summan av derivatorna ) är ett exempel på detta. 1
2 Inte desto mindre brukar rekursion betraktas som svårt när man börjar med det i programmering. Orsaken till detta är säkert att man i de flesta fall lärt sig programmera med iterationer. Frågor att besvara vid konstruktion av en rekursiv algoritm: 1. Hur kan jag dela upp ursprungsproblemet i mindre problem av samma slag? 2. Hur kombinerar jag lösningarna till delproblemen till en lösning på ursprungsproblemet? 3. Vilka specialfall är lämpliga? Kommer de alltid att nås, oberoende av indata? Detta är mycket besläktat med induktionsbevis: Vi antar att vi kan lösa problemet för ett eller flera mindre problem. Sedan visar man hur man med hjälp av dessa lösningar kan lösa ursprungsproblemet. Precis som i induktionsbevis så måste man ha ett eller flera basfall. Exempel: Skriv ut en sträng med n tecken i omvänd ordning. Hur definiera problemet i termer av sig självt? Induktionsantagande: Antag att vi kan lösa problemet för n 1 tecken. Basfall: Att skriva ut ett tecken i omvänd ordning. Trivialt. Vi kan välja ut de n 1 tecknen på n olika sätt men två av dessa förefaller naturligast: 1. de n 1 första tecknen i strängen eller 2. de n 1 sista tecknen i strängen. Pröva först alternativ 1 d.v.s. vi antar att vi kan skriva ut alla utom det sista tecknet i omvänd ordning. Eftersom det sista tecknet skall vara först måste vi börja med att skriva det. Algoritm skriv strängen i omvänd ordning om längden är 1 eller mindre så skriv strängen annars skriv det sista tecknet skriv alla utom det sista i omvänd ordning Övning 1: Implementera ovanstående algoritm. 2
3 Alternativ algoritm Pröva i stället alternativ 2, d.v.s. vi antar att vi kan skriva ut alla tecken utom det första i omvänd ordning. Eftersom det första skall ut sist så börjar vi med de n 1 sista. skriv strängen i omvänd ordning om längden är 1 eller mindre så skriv strängen annars skriv alla utom det första i omvänd ordning skriv det första tecknet Även detta fungerar! Första tecknet skrivs ju sist efter alla andra tecken. Övning 2: Skriv en rekursiv metod void printb(int x, int b) som skriver ut x i basen b (Förutsätt, för enkelhetens skull att b< 10) Övning 3: Skriv en metod som läser hela tal från standard input och skriver ut talen i omvänd ordning UTAN att använda listor eller arrayer. Inläsningen avbryts när 0 läses. Det finns ofta möjlighet att välja de mindre problemen på olika sätt. I ovanstående exempel hade vi två naturliga val men vilket vi valde spelar egentligen ingen roll. I andra fall så kan vissa val ge bättre (effektivare) algoritmer än andra. Exempel: Beräkning av x n Vi skall beräkna x n, n heltal 0, med upprepade multiplikationer. Första försök Den rekursiva definitionen x n = kan realiseras med följande metod { 1 om n = 0 xx n 1 om n > 0 public static float power(float x, int n) { if (n > 0) return x*power(x,n-1); else return 1; Anropet pow(x,1000) genererar 1000 multiplikationer. 3
4 Andra försök Vi kan utgå från följande rekursiva definition 1 om n = 0 x n = (x n/2 ) 2 om n > 0 och n jämn xx n 1 om n > 0 och n udda public static float power(float x, int n) { if (n == 0) return 1; else if (n % 2 == 0) //n jämn return( sqr(power(x,n/2)); else //n udda return( x*power(x,n-1) ); (Anm: sqr måste definieras) Anropet pow(x,1000) kommer att generera följande sekvens av anrop: power(x,1000) power(x,500) power(x,250) power(x,125) power(x,124) power(x,62) power(x,31) power(x,30) power(x,15) power(x,14) power(x,7) power(x,6) power(x,3) power(x,2) power(x,1) power(x,0) Varje uppväckning av pow utom den sista innehåller en multiplikation (kvadrering eller multiplikation med x) vilket innebär att resultatet beräknas med sammanlagt 15 multiplikationer. Övning 4: Implementera ovanstående algoritm utan att använda rekursion. Exempel: Polynomevaluering Problem: Beräkna värdet av polynomet p n (x) = a 0 + a 1 x + a 2 x a n x n 4
5 Algoritm 1 Induktionsantagande: Antag att vi kan beräkna värdet av p n 1 (x) Basfall: Beräkna p 0 (x) - Trivialt Induktionssteg: Vi beräknar p n (x) som p n (x) = p n 1 (x) + a n x n Induktionssteget kan göras med en addition och n multiplikationer vilket totalt ger n additioner och cirka n 2 multiplikationer. (Vi har ovan sett att det går att beräkna x n med färre multiplikationer men vi skall i stället söka en annan algoritm) Algoritm 2 I första försöket beräknar vi x n från scratch vilket naturligtvis är onödigt eftersom vi i steget innan beräknade x n 1. Genom att lägga till detta i vårt antagande kan vi få en bättre algoritm Induktionsantagande: Antag att vi kan beräkna värdet av p n 1 (x) och x n 1 Basfall: Beräkna p 0 (x) - Trivialt Induktionssteg: Vi beräknar p n (x) som p n (x) = p n 1 (x) + a n xx n 1 Induktionssteget kräver nu en addition och två multiplikationer dvs totalt n additioner och 2n multiplikationer. Algoritm 3 I algoritm 1 och 2 tog vi bort den sista koefficienten när vi skulle göra ett mindre problem. Man kan också ta bort den första koefficienten: Induktionsantagande: Antag att vi kan beräkna värdet av p n 1 (x) där p n 1(x) = a 1 + a 2 x + a 3 x a n x n 1 Basfall: Beräkna p 0 (x) - Trivialt Induktionssteg: Vi beräknar p n (x) som p n (x) = xp n 1(x) + a 0 Induktionssteget kräver nu en addition och endast en multiplikation dvs totalt n additioner och n multiplikationer. Denna algoritm, som brukar kallas Horners schema, är standard för att evaluera polynom. Den implementeras vanligen iterativt dvs 5
6 public static double p( int n, float x ) { double y = a[n]; for ( ; n>0; n-- ) y = y*x + a[n-1]; return y; Exempel: Hanois torn En mängd med n brickor av olika storlek, alla med hål i mitten, ligger travade på en pinne (A) i storleksordning med den största underst. Problemet går ut på att flytta hela traven till en annan pinne (C) under iakttagande av följande regler: 1. Endast en bricka får flyttas per gång. 2. En större bricka får aldrig läggas på en mindre. Till hjälp har man ytterligare en pinne (B) som får användas för mellanlagring. Induktionsantagande: Vi kan lösa problemet med n 1 brickor. Basfall: Flytta en bricka. Trivialt. Induktionssteg: Vi gör på följande sätt 1. Flytta de n 1 översta brickorna till B. 2. Flytta den kvarvarande från A till C. 3. Flytta de n 1 brickorna på B till C. Problemet löses således rekursivt genom att lösa två problem av storlek n 1. Totala antalet brickförflyttningar b(n) ges av följande differensekvation: { 1 om n = 1, b(n) = b(n 1) b(n 1) om n > 1. som har lösningen b(n) = 2 n 1 (Lösningen kan erhållas antingen genom att expandera ekvationen eller genom någon standardteknik för att lösa linjära differensekvationer.) Algoritmen är således mycket tidskrävande om n är stort men det är den bästa möjliga! Det är lätt att inse att lösningen till ett problem av storlek n faktiskt kräver lösning av två problem av storlek n 1 först för att frilägga understa brickan och sedan för att få tillbaka alla brickor på den understa på en ny pinne. 6
7 Övning 5: Implementera en metod Hanoi(char from, char to, char help, int n) som skriver ut hur flyttningen av n brickor från from till to med hjälp av help skall göras. Exempel: Fibonaccitalen Fibonaccitalen F n definieras enligt 0 om n = 0, F n = 1 om n = 1, F n 1 + F n 2 om n > 1. Definitionen ovan kan användas för att skriva en metod som returnerar det n:te Fibonaccitalet: public static int fib(int n) { if ( n==0 ) return 0; else if ( n==1 ) return 1; else return fib(n-1) + fib(n-2); Detta är en korrekt metod men den är hopplöst ineffektiv för stora värden på n. För att inse det kan vi räkna hur många additioner anropet fib(n) utför. För detta antal T (n) gäller: { 0 om n 1, T (n) = 1 + T (n 1) + T (n 2) om n > 1. Observera likheten med Fibonaccitalen! Detta är en linjär differensekvation och den homogena ekvationen (som är lika med Fibonaccitalen!) har karaktäristiska ekvationen r 2 r 1 = 0, som har lösningen r 1,2 = 1 ± 5, 2 dvs. den homogena ekvationen har lösningen F (n) = ar n 1 + br n 2, där a och b bestämmes ur begynnelsevillkoren. 7
8 Eftersom T (n) = 1 är en partikulärlösning, kan den allmänna lösningen skrivas T (n) = ar n 1 + br n 2 1. Genom att använda begynnelsevillkoren kan a och b bestämmas och ger lösningen a =(1 r 2 )/(r 1 r 2 ) b = (1 r 1 )/(r 1 r 2 ) Eftersom r och r < 1 så ser man att, för stora n, gäller T (n) n Antalet additioner växer således exponentiellt. Övning 6: Antag att additionen och det övriga arbetet i ibonacci-metoden tar 1 µs. Hur lång tid tar fib(50) respektive fib(100)? Som framgår av övningen är programmet helt oanvändbart för stora n. Programmet är trädrekursivt det vill säga varje anrop resulterar i två nya anrop. Detta kan potentiellt ge orimliga exekveringstider. Som följande exempel visar så är det dock inte alltid så. I själva verket är många klassiska effektiva algoritmer trädrekursiva (t.ex. sorteringsalgoritmer, snabb Fouriertransform etc.). Exempel: Horisontlinjeproblemet Problem: Konstruera horisontlinjen till n rektangulära byggnader. Varje byggnad representeras av en trippel bestående av x-koordinat för vänster respektive höger vägg samt byggnadens höjd. Induktionsantagande: Antag att vi kan lösa problemet för n 1 byggnader. Induktionssteg: Man stoppar in en ny byggnad i horisontlinjen. Detta kräver O(n) operationer. Sammantaget: Ger en algoritm som kräver storleksordningen cn 2. operationer. Alternativt induktionsantagande: Vi kan konstruera horisontlinjen för n/2 byggnader. Induktionssteg: Om vi har horisontlinjerna för två olika mängder med hus med vardera n/2 byggnader, kan vi bygga den gemensamma horisontlinjen genom en sammanfogning av dessa (som kräver storleksordningen cn operationer) Sammantaget: Om vi delar de n byggnaderna i två lika stora mängder och konstruerar horisontlinjerna för dessa var för sig och sedan sammanfogar dessa så får vi en algoritm som kräver cn log n operationer. 8
9 Exempel: Sortering Problemet att sortera n element i storleksordning kan även det lösas på flera olika sätt. Algoritm 1 Induktionsantagande: Vi kan sortera n 1 element. Basfall: Vi kan sortera 1 element. Induktionssteg: Stoppa in det n-te elementet bland de n 1 redan sorterade elementen så att sorteringen bibehålls Kod: public static void sort(float [] a, int n) { if ( n > 1 ) { sort( a, n-1 ); // sortera de n-1 första float x = a[n-1]; int i = n-2; // flytta undan while ( i>=0 && a[i]>x ) { a[i+1] = a[i]; i--; a[i+1] = x; // lägg in sista Detta är den vanliga enkla instickssorteringen. Algoritm 2 Induktionsantagande: Vi kan sortera n/2 element. Induktionssteg: Dela mängden i två delar med vardera n/2 element, Sortera dessa var för sig och sammanfoga sedan de två sorterade delarna. Sortera n element 1. dela i två lika stora delar 2. sortera delarna var för sig 3. sammanfoga delarna Arbetet att sammanfoga de två sorterade delarna är proportionellt mot antalet element. Låt T (n) beteckna tiden att sortera n element. Då gäller { c om n = 0, T (n) = 2T (n/2) + dn om n > 0. 9
10 Om n är en jämn 2-potens, n = 2 k så gäller T (n) =2T (n/2) + dn = 2(2T (n/4) + dn/2) + dn = =4T (n/4) + dn + dn =... =2kT (n/2 k ) + dnk = =nt (1) + dn log n dvs tiden är O(n log n). Exempel: Växlingsproblemet På hur många sätt kan man växla a kronor i 100, 50, 10, 5 och 1-mynt (sedlar)? (t.ex. 90 kronor i 50+4*10, 9*10, 8* *1 etc.) Formulera en lösning av problemet i termer av sig självt. Viktigt att rekursionsfallet/fallen löser ett i någon mening mindre problem: Ordna myntsorterna i någon ordning. Dela in växlingsförsöken i två grupper: de som inte använder något mynt av första sorten de som använder första sortens mynt Problemets lösning kan nu formuleras: Antalet sätt att växla a kronor vid användande av n olika sorters mynt är 1. antalet sätt att växla a kronor vid användande av alla utom den första sortens mynt (n 1 sorter) plus 2. antalet sätt att växla a d kronor användande alla n sorters mynt (d = 1:a myntsortens valör) Delproblem 1 är mindre än ursprungsproblemet eftersom det använder färre myntslag och delproblem 2 är mindre eftersom det växlar en mindre summa. Antag att myntsorterna representeras i en array change där change[1] = 1; change[2] = 5; change[3] = 10; change[4] = 50; change[5] = 100; Ger grundprogram public static int count( int a, int n ) { return count( a, n-1 ) + count( a-change[n], n ); Vilka specialfall behövs för att undvika oändlig rekursion? 10
11 a kan bli = 0 vilket innebär ett lyckat försök (räkna det) a kan bli < 0 vilket innebär ett misslyckat försök (räkna ej) n kan bli = 0 vilket innebär ett misslyckat försök (räkna ej) Slutlig version int count( int a, int n) { if ( a == 0 ) return 1; else if (a < 0) (n == 0) return 0; else return count(a,n-1) + count(a-change[n],n); Detta program är användbart om inte a och n är alltför stora men precis som i Fibonacci-exemplet så är tillväxten exponentiell. Programmet kan dock förbättras i detta avseende med hjälp av s.k. dynamisk programmering som dock inte beskrives här. Övning 7: Skriv en metod som skriver ut alla möjliga permutationer av en sträng. Vad är metodens komplexitet (dvs hur beror tiden av stränglängden n)? Syntaxanalys med recursive descent Rekursiva metoder är speciellt lämpliga när de data man skall behandla i sig är rekursivt uppbyggda. Ett exempel på detta är vanliga aritmetiska uttryck. Betrakta t.ex. följande uttryck a + (b + c) d + e (f + g h) Det finns ett antal regler för hur detta skall tolkas av typ multiplikation före addition, parenteser först och från vänster till höger vid lika prioritet. Det är inte alldeles enkelt (men naturligtvis väl genomförbart) att realisera dessa regler i ett program som läser och tolkar ett uttryck. Vi kan emellertid definiera uttryck på följande sätt: Ett uttryck är en sekvens av en eller flera termer med plustecken mellan. En term är en sekvens av en eller flera faktorer med gångertecken mellan. En faktor är antingen ett tal eller ett uttryck omgivet av parenteser. (För enkelhetens skull begränsar vi oss till addition och multiplikation) Observera att ovanstående definition av uttryck är indirekt rekursiv. 11
12 Om vi skriver en metod som hanterar vart och ett av dessa begrepp så får vi ett enkelt program som korrekt hanterar generella former av denna begränsade variant av aritmetiska uttryck. public static double uttryck() { double sum = term(); while ( nexttoread() == + ) { readnextchar(); sum += term(); return sum; static double term() { double prod = faktor(); while ( nexttoread() == * ) { readnextchar(); prod *= faktor(); return prod; static double faktor() { if ( nexttoread()!= ( ) // skall vara tal return readnextnumber(); else { readnextchar(); // läs förbi ( double result = uttryck(); readnextchar(); // läs förbi ) return result; Programmet bygger på tre primitiver: char nexttoread() som returnerar nästa tecken utan att ta bort det från input-strömmen, char readnextchar() som läser nästa tecken samt double readnextnumber() som läser nästa tal. (I Java kan dessa primitiver t ex uttryckas med hjälp av klassen StreamTokenizer.) 12
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas, Malin Källén 20 mars 2016 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av
Läs 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 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 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 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 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 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 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 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: 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 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 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 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 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 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 merBEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK
FÖRELÄSNING 2 Viss repetition av Fö1 Rekursivt fallanalys Rekursiva beskrivningar BEGREPP HITTILLS Konstant, Namn, Procedur/Funktion, LAMBDA, Parameter, Argument, Kropp, Villkor/Rekursion, Funktionsanrop,
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 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 merFöreläsning 12. Söndra och härska
Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Uppgifter Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 merTentamen i Programmering
LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen i Programmering EDAA65/EDA501/EDAA20 M MD W BK L 2018 05 30, 8.00 13.00 Preliminärt ger uppgifterna 7 + 14 + 6 + 9 + 4 = 40 poäng.
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 merLösningar till utvalda uppgifter i kapitel 4
Lösningar till utvalda uppgifter i kapitel 4 4.7 Vi visar först att A 2n 3 2 n 2 med ett induktionsbevis. Basfall: n 0 Vi har att 3 2 0 2 A 0, och alltså gäller likheten för n 0. Induktionssteget: Antag
Läs merParsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck
Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation
Läs merTommy Färnqvist, IDA, Linköpings universitet
Föreläsning Metoder för algoritmdesign TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 7 december 015 Tommy Färnqvist, IDA, Linköpings universitet.1
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 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 12. Söndra och härska
Föreläsning 12 Söndra och härska Föreläsning 12 Söndra och härska Maximal delsekvens Skyline Closest pair Växel Söndra och härska (Divide and conquer) Vi stötte på dessa algoritmer när vi tittade på sortering.
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 merProcedurer 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
Läs merProcedurer 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
Läs merFöreläsning 13. Dynamisk programmering
Föreläsning 13 Dynamisk programmering Föreläsning 13 Dynamisk programmering Fibonacci Myntväxling Floyd-Warshall Kappsäck Handelsresandeproblemet Uppgifter Dynamisk programmering Dynamisk programmering
Läs merVåra enkla funktioner eller procedurer
Föreläsning 3 Våra enkla funktioner eller procedurer Programmönster 1. Repetition 2. Högre-ordningens procedurer/programmönster - Procedurer som argument - Procedurer som returnerade värden 3. Scope och
Läs merRekursiva algoritmer sortering sökning mönstermatchning
Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 6-7 Rekursiva strukturer rekursiva definitioner rekursiva funktioner rekursiva bevis: induktion - rekursion strukturell
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 merÖvningshäfte 1: Induktion, rekursion och summor
LMA100 VT2006 ARITMETIK OCH ALGEBRA DEL 2 Övningshäfte 1: Induktion, rekursion och summor Övning A 1. Kan ni fortsätta följden 1,3,5,7,9,11,...? 2. Vilket är det 7:e talet i följden? Vilket är det 184:e?
Läs merRekursion. 1. Inledning. vara en fot bred.
Rekursion. Inledning En trädgårdsmästare skall lägga en gång med cementplattor. Gången skall vara en fot bred. Han har tre slags plattor. En är omönstrad och kvadratisk med sidan en fot, två är rektangulära
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 merÖvning 2. (Länkade) Listor, noder
Per Sedholm DD30 (tilda3) 03-09-03 Övning Listor, pekare, binära träd, rekursion, komplexitet (Länkade) Listor, noder. Ta bort andra noden (a) Skriv en sats som tar bort andra noden ur en länkad lista.
Läs merProgrammeringsmetodik 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
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
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 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 merDD1361 Programmeringsparadigm. Carina Edlund
DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp
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 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 merC++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen
C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt
Läs merSummera godtyckligt antal tal. Programkonstruktion. Moment 4 Om rekursion. Fullständigt resonemang för summeringen. Analys av summeringsproblemet
Summera godtyckligt antal tal Programkonstruktion Moment 4 Om rekursion Pre: n >=, n
Läs merMA2047 Algebra och diskret matematik
MA2047 Algebra och diskret matematik Något om differensekvationer Mikael Hindgren 10 september 2019 Differensekvationer Exempel 1 En talföljd y n} uppfyller yn+1 2y n 0 y 0 3 Bestäm en formel för y n.
Läs merFöreläsning 3: Dekomposition. Dekomposition
Föreläsning 3: Dekomposition Dekomposition Dekomposition är en generell metod för att lösa problem Metoden bygger på att man delar upp ett problem i delproblem av samma typ som ursprungsproblemet Uppdelningen
Läs merFöreläsning 9: Talteori
DD2458, Problemlösning och programmering under press Föreläsning 9: Talteori Datum: 2009-11-11 Skribent(er): Ting-Hey Chau, Gustav Larsson, Åke Rosén Föreläsare: Fredrik Niemelä Den här föreläsningen handlar
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 merRepetition 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
Läs merinte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men
MATEMATISKA INSTITUTIONEN STOCKHOLMS UNIVERSITET Christian Gottlieb Gymnasieskolans matematik med akademiska ögon Induktion Dag 2. Explicita formler och rekursionsformler. Dag mötte vi flera talföljder,
Läs merMS-A409 Grundkurs i diskret matematik Appendix, del I
MS-A409 Grundkurs i diskret matematik Appendix, del I G. Gripenberg Aalto-universitetet 2 oktober 2013 G. Gripenberg (Aalto-universitetet) MS-A409 Grundkurs i diskret matematikappendix, del I 2 oktober
Läs merInstuderingsfrågor, del D
Uppgift 1. Instuderingsfrågor, del D Objektorienterad programmering, Z1 I vilka av nedanstående problem behöver man använda sig av fält för att få en elegant lösning? I vilka problem är det är det onödigt/olämpligt
Läs merMA2047 Algebra och diskret matematik
MA2047 Algebra och diskret matematik Något om kombinatorik Mikael Hindgren 24 september 2018 Vad är kombinatorik? Huvudfråga: På hur många sätt kan en viss operation utföras? Några exempel: Hur många gånger
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 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 merFöreläsning 5: Dynamisk programmering
Föreläsning 5: Dynamisk programmering Vi betraktar en typ av problem vi tidigare sett: Indata: En uppsättning intervall [s i,f i ] med vikt w i. Mål: Att hitta en uppsättning icke överlappande intervall
Läs mera = a a a a a a ± ± ± ±500
4.1 Felanalys Vill man hårddra det hela, kan man påstå att det inte finns några tal i den tillämpade matematiken, bara intervall. Man anger till exempel inte ett uppmätt värde till 134.78 meter utan att
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 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 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 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 merLänkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:
Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att
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 merDatatyper 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
Läs merAlgoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 4 Anton Grensjö grensjo@csc.kth.se 25 september 215 Anton Grensjö ADK Övning 4 25 september 215 1 / 28 Översikt Kursplanering F9: Dynamisk programmering
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 merFöreläsning 5: Kardinalitet. Funktioners tillväxt
Föreläsning 5: Kardinalitet. Funktioners tillväxt A = B om det finns en bijektion från A till B. Om A har samma kardinalitet som en delmängd av naturliga talen, N, så är A uppräknelig. Om A = N så är A
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 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 merObjektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)
Objektorienterad programmering Föreläsning 8 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Objektorienterad programutveckling Algoritmer Algoritmkonstruktionerna Relationer
Läs merDatastrukturer och algoritmer
Datastrukturer och algoritmer Föreläsning 16 2 Innehåll Snabbrepetition Exempeltentamen Kursutvärdering Mina målsättningar Kursens mål: 3 Rolig och viktig kurs Bli en bättre programmerare och inse att
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 mer1, 2, 3, 4, 5, 6,...
Dagens nyhet handlar om talföljder, ändliga och oändliga. Talföljden 1,, 3, 4, 5, 6,... är det första vi, som barn, lär oss om matematik över huvud taget. Så småningom lär vi oss att denna talföljd inte
Läs merLinjärt minne. Sammanhängande minne är ej flexibelt. Effektivt
Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index
Läs merKlassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
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 merTentamen i Grundläggande Programvaruutveckling, TDA548
Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2016-12-20 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 3: 24-37 4: 38-47 5
Läs mer1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående
MATEMATISKA INSTITUTIONEN STOCKHOLMS UNIVERSITET Christian Gottlieb Gymnasieskolans matematik med akademiska ögon Induktion Dag 1 1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta
Läs merMMA132: Laboration 2 Matriser i MATLAB
MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen
Läs merIteration while-satsen
Datatypen double TDA143 I1 Programmerade system Föreläsning 3 (OH-bilder 3) Iteration while-satsen Christer Carlsson I en dator kan man inte lagra hur stora eller hur små tal som helst. De enkla datatyperna,
Läs mer