Rekursion och induktion för algoritmkonstruktion
|
|
- Viktor Abrahamsson
- för 8 år sedan
- Visningar:
Transkript
1 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 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 kombinerar sedan lösningarna av delproblemen till en lösning av ursprungsproblemet. Vi skall demonstrera hur det går till genom ett antal exempel. Avsnitt märkta med asterisk (*) kan överhoppas. Exempel 1: Beräkning av fakultet Iterativ definition: n! = n(n 1)(n 2) ! = 1 Iterativ beräkning: public static int fac(int n) { int p = 1; for (; n>1; n--) p = p*n; return p; Rekursiv definition: Rekursiv beräkning: n! = { 1 om n = 0 n(n 1)! om n > 0 public static int fac(int n) { if (n == 0) return 1; else return n*fac(n-1); Förutom i det så kallade basfallet (dvs när n = 0) så anropar metoden fac alltså sig själv med ett argument som är 1 mindre den egna parametern. Antag att vi anropar med fac(3). Java kommer då behöva beräkna 3*fac(2). Då behöver man först beräkna fac(2). Detta görs genom uttrycket 2*fac(1) som, först, måste beräkna 1*fac(0). Vid anropet fac(0) hamnar vi på ett basfall och returnerar 1 vilket gör att uttrycket 1*1 kan beräknas osv. Det hela kan illustreras på vidstående sätt. fac(3): 3*fac(2) 2*fac(1) 1*fac(0) 1*1 2*1 3*2 6 1
2 Det finns alltså, som mest, fyra stycken fac-uppväckningar igång samtidigt var och en med sitt eget värde på n. Observera att det allid måste finnas minst ett basfall och en beräkning alltid måste bottna i ett basfall. Om man anropar metoden ovan med ett negativt argument kommer man inte att basfallet (i alla fall inte på något vettigt sätt) Exempel 2: Beräkning av x n - första version Vi skall beräkna x n, n heltal 0, med upprepade multiplikationer. Iterativ definition: Iterativ beräkning: x n = x x x x... x public static double power(double x, int n) { double p = 1.; for (int i = 1; i<=n; i++) { p = p*x; return p; Rekursiv definition: x n = { 1 om n = 0 xx n 1 om n > 0 Övning 1: Implementera ovanstående rekursiva algoritm i en metod public static double power(double x, int n) Övning 2: Skriv en rekursiv metod (dvs utan iteration) public static int multiply(int m, int n) som beräknar produkten m*n utan att använda multiplikation. Produkten skall alltså beräknas med additioner. Du kan förutsätta att m och n är icke-negativa. Övning 3: Skriv en rekursiv metod (dvs utan iteration) public static int divide(int t, int n) som beräknar hur många gånger n går i t (dvs en heltalsdivision) utan att använda division 2
3 eller multiplikation. Du kan förutsätta att t och n är större än 0. Övning 4: Skriv en rekursiv metod public static double harmonic(int n) som beräknar den harmoniska summan h(n) = 1 + 1/2 + 1/ /n Övning 5: Skriv en rekursiv metod public static int largest(int[] a, int i) som returnerar det största värdet av elementen a[0], a[1],... a[i]. I ovanstående exempel blir de rekursiva metoderna varken enklare eller effektivare än den iterativa men rekursiva resonemang är ett ändå kraftfullt sätt att lösa problem och 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. 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 rekursionsterminerande fall är lämpliga? Kommer man alltid till ett sådant 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 minst ett basfall. Exempel 3: 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 de n 1 första tecknen i strängen. Basfall: Att skriva ut ett tecken i omvänd ordning. Trivialt. Eftersom det sista tecknet skall vara först måste vi börja med att skriva det. 3
4 Algoritm i pseudokod: Java-kod: 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 public static void reverse(string s) { if (s.length()<=1) { System.out.println(s); else { System.out.print(s.charAt(s.length()-1)); reverse(s.substring(0, s.length()-1)); Övning 6: Skriv en metod public static String reverse(string s) som returnerar en sträng där tecknen kommer i omvänd ordning mot tecknen i s. Använd antagandet att vi kan lösa problemet för ut de n 1 sista tecknen i strängen. 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. Nästa exempel visar hur man kan hitta en bättre (effektivare) algoritm genom att välja andra delproblem. Exempel 4: Beräkning av x n - bättre version Den förra versionen av power som byggde på definitionen x n = x x n 1 är ineffektiv. T ex så kommer anropet power(x,1000) generera 1000 multiplikationer. Den definitionen är dock inte den enda möjliga. Vi skulle också kunna använda: 1 om n = 0 x n = (x n/2 ) 2 om n > 0 och n jämn x(x n/2 ) 2 om n > 0 och n udda Den är rekursiv precis som den förra men i stället för att återföra lösningen av ett problem av storlekn n på ett problem av storleken n 1 så använder vi oss av problem av storleken n/2 dvs ett betydligt mindre problem. Javakod: public static double power(double x, int n) { if (n == 0) return 1.; else { double p = power(x, n/2); if (n % 2 == 0) //n jämn return p*p; else //n udda return x*p*p; Anropet power(x,1000) kommer att generera följande sekvens av anrop: 4
5 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 power utom den sista innehåller en multiplikation (kvadrering eller multiplikation med x) vilket innebär att resultatet beräknas med sammanlagt 15 multiplikationer. Övning 7: Modifiera programmet så att det även hanterar negativa exponenter. Tänk rekursivt! Övning 8*: Implementera ovanstående algoritm utan rekursion! Exempel 5: Trava brickor En mängd med n brickor av olika storlek ligger travade på en plats (A) i storleksordning med den största underst. Problemet går ut på att flytta hela traven till en annan plats (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 plats (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 5
6 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. Övning 9: Implementera en metod bricklek(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. En förflyttning från A till B följd av en förflyttning från C till pinne B ska skrivas ut såhär: A -> B C -> B Observera radbrytningarna! Exempel 6: 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 long 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. Påstående: Tiden t(n) det tar att exekvera denna metod växer exponentiellt med n. Mer exakt så är t(n) c n där c beror på dator, programmeringsspråk,... Bevis* 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, 6
7 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. 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 och därmed också tiden t(n) QED Övning 10: Tag reda på hur lång tid anropen fib(50) respektive fib(100) tar (skulle ta) på din dator. Som framgår av övningen är programmet inte så bra 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 7: Sortering 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. Javakod: 7
8 public static void sort(double [] a, int n) { if ( n > 1 ) { sort( a, n-1 ); // sortera de n-1 första double 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. Tiden att sortera n tal med denna algoritm beror på hur talen är permuterade. Det är dock enkelt att visa att tiden i såväl genomsnitt som i värsta fall är Θ(n 2 ) medan den är Θ(n) i bästa fall. (Uttrycket tiden är Θ(f(n)) kan, löst uttryckt, tolkas om att tiden är proportionell mot f(n) dvs cf(n).) Övning 11: Inse detta! 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. Analys 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. 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 =... =2 k t(n/2 k ) + dnk = =nt(1) + dn log n 8
9 dvs tiden är Θ(n log n). Denna sortering brukar kallas mergesort (samsortering på svenska) och är som nedanstående övning visar väsentligt bättre än instickssorteringen i föregående exempel. Övning 12: Antag att algoritm 1 och 2 tar lika lång tid för 1000 tal säg 1 sekund. Hur lång tid tar det för respektive algoritm att sortera 10 6 tal respektive 10 9 tal? Vi ger just nu ingen kod för denna sorteringsmetod. Det beror på att den är lite knölig att implementera och inte heller blir så bra för just arrayer. Vi återkommer till den senare för andra datastrukturer. Exempel 8: 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 med värden {1, 5, 10, 50, 100 på index 1, 2, 3, 4, 5. 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? 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) 9
10 Slutlig version: public static 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 Fibonacciexemplet 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 13: Testkör programmet ovan. Låt programmet läsa in belopp som skall växlas. Övning 14*: Modifiera programmet så att det även skriver ut de växlingar som görs. Övning 15: Skriv en metod static String reverseint(int x) som returnerar talet x i decimalform men med siffrorna i omvänd ordning dvs så att reverseint(12345) returnerar "54321" Övning 16: Skriv en rekursiv metod static String longtostring(long x, int b) som returnerar en sträng med de siffror som representerar talet x i basen b. Lös först problemet under förutsättning att b 10. Skriv sedan en metod som fungerar för b 16. Övning 17: Skriv en metod public static String reversenumbers(scanner scan) som läser en följd av hela tal från Scanner-objektet scan och returnerar en sträng med talen talen i omvänd ordning det vill säga med det sist inlästa talet först. Metoden skall inte använda någon array, lista eller sträng och skall bara deklarera en enda variabel. Inläsningen av tal skall avbrytas när det inte längre går att läsa ett heltal. I retursträngen skall varje tal föregås av exakt ett blanktecken. Exempel: Anropet reversenumbers(new Scanner(" ")) skall returnera strängen " " Skriv sedan en metod public static void reversenumbers() som läser tal från standard input och skriver ut talen i omvänd ordning. Talen skrivs på en enda rad med radbyte efter sista talet. 10
11 Övning 18: En stack är en mekanism som lagrar ett antal element. Till stacken hör operationerna lagra nytt element respektive ta bort ett lagrat element. Operationerna kallas traditionellt push och pop. Stackens väsentliga egenskap är att uttagsordningen är omvänd mot inläggningsordningen dvs pop tar ut det som senast lagrades med push. Av detta skäl kallas stacken även LIFO för Last In First Out. (Av motsvarande skäl kallas en kö för FIFO för First In First Out.) Stackmekanismen används bl a för att implementera rekursion. Denna övning går ut på att implementera en stack som lagrar heltal. Stacken ska dock ha en speciell begränsning: det är förbjudet att lägga ett större tal på ett mindre. Se specifikation av stacken! Observera att stacken inte får ha några andra metoder än de här angivna! Tips: En arraylista är en lämplig struktur för att implementera en stack. Se till att tiden för metoderna push och pop är oberoende av stackens storlek! Ladda ner filen StackPlay.java och implementera metoderna move och getnumberofmoves enligt dokumentationen i koden. Exempel på utskrift från main-metoden: Start state From: [3, 2, 1] To: [] Help: [] Number of moves: 0 End state From: [] To: [3, 2, 1] Help: [] Number of moves: 7 Tag genom mätning och teoretiska beräkningar reda på hur lång tid programmet tar med 10, 20, 30, 50 och 100 tal. Svar i sekunder, minuter, timmar,... 11
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
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
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 =
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
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
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
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa
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
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
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
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)
Rekursion. 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,
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
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
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
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
Programkonstruktion och Datastrukturer
Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna
FÖ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
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
Föreläsning 5 Innehåll
Föreläsning 5 Innehåll Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Datavetenskap (LTH) Föreläsning 5 VT 2019 1 / 39 Val av algoritm och datastruktur
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
Magnus Nielsen, IDA, Linköpings universitet
Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1
Lö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
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
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
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
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 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
Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Instuderingsfrå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
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
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 8 Sortering och urval TDDC70/91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 1 oktober 2013 Tommy Färnqvist, IDA, Linköpings universitet 8.1 Innehåll Innehåll 1 Sortering
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
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:
Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6
Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner
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
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
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 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
Tentamen 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.
Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek
Föreläsning 5 Innehåll Val av algoritm och datastruktur Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Det räcker inte med att en algoritm är korrekt
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre
Att 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
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
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
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
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift
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å
Några svar till TDDC70/91 Datastrukturer och algoritmer
Några svar till TDDC70/91 Datastrukturer och algoritmer 2011--18 Följande är lösningsskisser och svar till uppgifterna på tentan. Lösningarna som ges här ska bara ses som vägledning och är oftast inte
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
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
BEGREPP 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,
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 I 2016-03-17 Skrivtid: 1400 1900 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
Tentamen i Introduktion till programmering
Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:
Objektorienterad 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
Föreläsning 1 Datastrukturer (DAT037)
Föreläsning 1 Datastrukturer (DAT037) Fredrik Lindblad 1 30 oktober 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Tentamen 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
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning
Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (
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
Föreläsning 11 Datastrukturer (DAT037)
Föreläsning 11 Datastrukturer (DAT037) Fredrik Lindblad 1 4 december 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2016-05-30 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
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
Ö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,
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2014-03-14 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
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
Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet
Föreläsning 5 Innehåll Algoritmer och effektivitet Algoritmer och effektivitet Att bedöma, mäta och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Undervisningsmoment: föreläsning 5, övningsuppgifter
Dekomposition och dynamisk programmering
Algoritmer, datastrukturer och komplexitet, hösten 2016 Uppgifter till övning 3 Dekomposition och dynamisk programmering Max och min med dekomposition I vektorn v[1..n] ligger n tal. Konstruera en dekompositionsalgoritm
DD1361 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
Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER
Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER Logiska uttryck datatypen boolean Logiska uttryck kan ha två möjliga värden, true eller false. Variabler av typen boolean kan tilldelas
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
Ö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?
Fö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ägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan
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
Datastrukturer D. Föreläsning 2
Datastrukturer D Föreläsning 2 Jämförelse mellan olika sorteringsalgoritmer n Selection sort T(n) Insertion sort T(n) 2 1 1 1 Merge sort T(n) 4 6 3-6 4-5 8 28 7-28 12-17 16 120 15-120 32-49 Analysis of
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 I 2017-10-23 Skrivtid: 0800 1300 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
Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ
orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]
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
JAVAUTVECKLING LEKTION 4
JAVAUTVECKLING LEKTION 4 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Iterationer (loopar) Algoritmer Mer om felsökning 1 WHILE-SATSEN String s = JOptionPane.showInputDialog("Talet
Uppgift 1 (grundläggande konstruktioner)
Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en
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
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 I 2017-03-16 Skrivtid: 0800 1300 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
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
Del A (obligatorisk för alla)
Del A (obligatorisk för alla) A1. Koden följer garanterat namnkonventionerna. Ringa in rätta svar och lämna in tillsammans med dina övriga svar! a) Hur många objekt skapas av följande kod? World w = new
C++ 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
PROGRAMMERING-Java Omtentamina
PROGRAMMERING-Java Omtentamina Nicolina Månsson 2007-08 13 Tentamensinstruktioner Poängsättning Hela tentamen omfattar 41 poäng. Poäng för varje uppgift står angivet inom parentes före varje uppgift. -
Objektorienterad 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
Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING
Föreläsning 11 12 ALGORITMER: SÖKNING, REGISTRERING, SORTERING Seminarier: Fredagsklubben för dig som tycker att programmering är svårt (0 eller möjligen 1 poäng på delmålskontrollen) inte avsedda för
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
Tommy 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
Fö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
Funktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
Rekursiva 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
Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1
Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens
Användarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)
Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)
Summera 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
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;