F8: Resterna. Substitutionschiffer. Permutationer. ASCII och char. Substitutionschiffer (Lab 3) Permutationer Rekursion

Relevanta dokument
Matlab-repetition. p 1 (25) Staffan Romberger, CSC, KTH,

F8: Resterna. Substitutionschiffer (Lab 3) Permutationer Rekursion Formelbehandling Simulering Iteration, frekvens-dubbling och kaos Radplanering

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. Tabell på skärmen, test

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen

Komplexa tal. F4 (5): Datastrukturer (kap. 6 7)

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor

MMA132: Laboration 2 Matriser i MATLAB

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

F4: Datastrukturer (kap. 6 7) Komplexa tal Ö3: 5.2, 5.7, 5.14, 5.20

Tentamen i Introduktion till programmering

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

TDDC74 Lab 02 Listor, sammansatta strukturer

Grundkurs Programmering

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

PROGRAMMERING-Java Omtentamina

1, 2, 3, 4, 5, 6,...

Laboration: Whitebox- och blackboxtesting

Sökning och sortering

Rekursion och induktion för algoritmkonstruktion

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Tentamen: Programutveckling ht 2015

Standardfilerna Input och Output

Tillämpad Programmering (ID1218) :00-13:00

Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

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

Beräkningsverktyg HT07

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Grundläggande Datalogi

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Programmeringsteknik med C och Matlab

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

LULEÅ TEKNISKA UNIVERSITET

Rekursion och induktion för algoritmkonstruktion

Datastrukturer och Algoritmer D0041D

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Dagens föreläsning Programmering i Lisp Fö 5

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.

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

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

2. (a) Skissa grafen till funktionen f(x) = e x 2 x. Ange eventuella extremvärden, inflektionspunkter

Tentamen i Grundläggande Programvaruutveckling, TDA548

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

Objektorienterad programmering

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Användarhandledning Version 1.2

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Föreläsning 9 Exempel

Sätt att skriva ut binärträd

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 5. Rekursion

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Grundläggande datalogi - Övning 1

TDDC74 Programmering, abstraktion och modellering. Tentamen

HI1024 Programmering, grundkurs TEN

Tentamen i. TDDA 69 Data och programstrukturer

Föreläsning 10. Pekare (Pointers)

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

12. Relationer och funktioner

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

MMA132: Laboration 1 Introduktion till MATLAB

Programmering II (ID1019)

Exempelsamling Assemblerprogrammering

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Föreläsning 8 Datastrukturer (DAT037)

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

Introduktion till programmering SMD180. Föreläsning 9: Tupler

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

12. Relationer och funktioner

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Programmering II (ID1019) :00-17:00

2 februari 2016 Sida 1 / 23

Tentamen i. TDDC67 Funktionell programmering och Lisp

Länkade strukturer. (del 2)

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Deklarationer/definitioner/specifikationer

Förra gången: Primitiva data

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Transkript:

F8: Resterna Substitutionschiffer (Lab 3) Permutationer Rekursion Formelbehandling Skrivning och läsning med formatstyrning forts. Substitutionschiffer Caesar-rullning Ex. Alfabete: 1234; text: 2 3 1 1 2; Substitution: Ett stegs cykliskt skift 1->2 2->3 3->4 4->1 % subst-chiffer alfab = [1 2 3 4]; indx = [2 3 4 1]; % en permutation av 1..n txt = [2 3 1 1 2] txt2 = alfab(indx(txt)) % hur översätta tillbaka? p 1 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 2 (23) Staffan Romberger, CSC, KTH, 2009-11-25 ASCII och char Alla tecken : % alla ASCII tecken indx = 1:256; char(indx) pause txt = ' hej hej ö #Å' txt2 = char(indx(double(txt))) pause indx = rand_perm(256); % slump-permutation txt3 = char(indx(double(txt))) pause iindx(indx)=1:256; % invers-permutationen txt4 = char(iindx(double(txt3))) Permutationer Hur generera en slumpmässig permutation av n objekt talen 1,2,,n 1. Dragning utan återläggning : Tag objekt slumpmässigt tills inga är kvar: rand_perm2 2. Kortblandning : Byt obj 1 mot slumpmässigt annat, sedan 2 mot annat, etc. Upprepa n gånger: rand_perm function indx = rand_perm2(n) % by selection w/o return tmp = 1:n; L = n; % number of items indx = tmp; for k = 1:n k1 = floor(l*rand)+1; % random selection indx(k)= tmp(k1); % save the item tmp(k1)= []; % remove it from list (*) L = L-1; % length decreases by 1 p 3 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 4 (23) Staffan Romberger, CSC, KTH, 2009-11-25

function indx = rand_perm(n) % indx is a random permutation of 1...n % algorithm: do n times % swap two elements indx = 1:n; for k = 1:n k1 = floor(n*rand)+1; % swap indx(k1), indx(k) tmp = indx(k1); indx(k1)= indx(k); indx(k)= tmp; Denna är mycket snabbare än rand_perm2. Det beror på den dynamiska minnesallokeringen som krävs vid borttagningen av element (rad (*)). Tidtagning och användning av profil-verktyget bekräftar denna hypotes. Det senare visar att 70% av tiden i rand_perm2 ägnas åt borttagningen! Permutationer och rekursion Hur generera en lista över alla permutationer av talen 1..n? Det är ganska enkelt att göra en rekursiv algoritm. * Givet en lista över permutationer av n-1 objekt, så får man listan för n genom att ersätta var och en av dem med de n olika man får genom att sätta det nya objektet i position 1, 2,, n. * Om bara ett objekt finns har listan bara ett element. 1: 1 1,2: 2 1; 1 2 1,2,3: 3 2 1;2 3 1; 2 1 3;3 1 2; 1 3 2; 1 2 3 1,2,3,4: 4 3 2 1; 3 4 2 1; 3 2 4 1; 3 2 1 4; p 5 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 6 (23) Staffan Romberger, CSC, KTH, 2009-11-25 function A = recperm(v) % generate all permutations of elements in % array v by recursion %--------------------------------------------------- n = length(v); if n == 1 % just return V A = v; else B = recperm(v(1:n-1)); % permute all % but the last, col = v(n)*ones(size(b(:,1))); % make a column of % correct size A = [col,b]; % first block of % rows of A for k = 1:n-1 % n-1 next blocks A = [A;... [B(:,1:k),col,B(:,k+1:)]]; Rekursionen kräver att hela tillståndet för funktionen sparas för n, n-1,, tills man kommer till n = 1. Då först sänds något tillbaka och listorna växer. Men här är tillståndet litet: data växer först i else-delen ovan. Exempel 1: Beräkning av fakulteter, n! = n (n-1)!; 1! = 1 Rekursion: function nfac = fact_rec(n) % compute n factorial = 1 2 3... n % by recursion %---------------------------------- if n == 1 nfac = 1; else nfac = n*fact_rec(n-1); p 7 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 8 (23) Staffan Romberger, CSC, KTH, 2009-11-25

Det är enkelt att konstruera en icke-rekursiv algoritm, nfac = 1; for k = 2:n nfac = nfac*k; som implementeras av matlabs prod-funktion, nfac = prod(1:n); Exempel 2 Beräkna det n:te Fibonacci-talet, fn = fn 1 + fn 2; f1 = 1; f2 = 2; function fn = fibo(n) % assume n is a positive integer if n == 1 fn = 1; elseif n == 2 fn = 2; else f1 = 1; f2 = 2; for k = 3:n fn = f1 + f2; f1 = f2; % no need to save all fk, f2 = fn; % just the two last p 9 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 10 (23) Staffan Romberger, CSC, KTH, 2009-11-25 fn växer exponentiellt, 5 + 1 f n / f n 1 1.618 2 Skrivning och läsning med formatstyrning Läs en text-fil med fileread(filnamn) som ger filens innehåll som en sträng. Skrivning som text med filreferens: fprintf(filreferens,formatsträng,uttryck, ) Utelämnad filreferens = standard output = skärm sprintf(formatsträng, uttryck, ) returnerar en sträng p 11 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 12 (23) Staffan Romberger, CSC, KTH, 2009-11-25

Funktion som parameter (function functions) I många tillämpningar har man en metod (function method) som man ska kunna använda med många olika funktioner. 1 Funktion med bestämt namn Fil: use1.m function use1 method1; Fil: f1.m function f1(x) disp(['f1 x=' num2str(x)]); Fil: method1.m function method1 f1(x); >use1 f1 x=3 f1 x=6 f1 x=9 2a Uttryck som text och eval Fil: use2a.m function use2a f = 'disp([''f2 x='' num2str(x)]);'; method2a(f); Fil: method2a.m function method2a(f) eval(f); %f(x); >use2a f2 x=3 f2 x=6 f2 x=9 p 13 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 14 (23) Staffan Romberger, CSC, KTH, 2009-11-25 3a Enkel funktionsreferens (function handle) Fil: use3a.m >use3a function use3a f3a x=3 f=@f3a; f3a x=6 method3a(f); f3a x=9 Fil: f3a.m function f3a(x) disp(['f3a x=' num2str(x)];); Fil: method3a.m function method3a(f) f(x); 3b Funktionsreferens med parameter Fil: use3b.m function use3b for y = [5 10] f = @(x)f3b(x,y); method3b(f); Fil: f3b.m function f3b(x,y) disp(['f3b x=' num2str(x) ' y=' num2str(y)]); Fil: method3b.m function method3b(f) f(x); >use3b; f3b x=3 y=5 f3b x=6 y=5 f3b x=9 y=5 f3b x=3 y=10 f3b x=6 y=10 f3b x=9 y=10 p 15 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 16 (23) Staffan Romberger, CSC, KTH, 2009-11-25

Bankkontoregister se F6! Formelbehandling Med Matlabs»Symbolic algebra toolbox» kan man göra formelbehandling. Matlab känner till deriverings- och integrationsregler och kan göra viss formelförenkling. n = 4; syms x; A = x.^((0:n)'*(0:n)) A = [1, 1, 1, 1, 1] [1, x, x^2, x^3, x^4] [1, x^2, x^4, x^6, x^8] [1, x^3, x^6, x^9, x^12] [1, x^4, x^8, x^12, x^16] p 17 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 18 (23) Staffan Romberger, CSC, KTH, 2009-11-25 Formelbehandling forts. >>D = diff(log(a)) D = [0, 0, 0, 0, 0] [0, 1/x, 2/x, 3/x, 4/x] [0, 2/x, 4/x, 6/x, 8/x] [0, 3/x, 6/x, 9/x, 12/x] [0, 4/x, 8/x, 12/x, 16/x] >>syms a b; expand((a^3+b^2)^3) ans = a^9+3*a^6*b^2+3*a^3*b^4+b^6 Formelbehandling forts. I laboration 5 finns en differensapproximation till derivatan av en funktion i dess vänstra ändpunkt. Låt funktionsvärdena på gitter-punkterna vara u i = u(x i ), x i = ih, i = 0,1,,N-1, N där h=l/n. Om vi approximerar funktionen med en rät linje får vi u ( x0) = ( u1 u0) / h Approximera istället med en parabel (x 0 = 0!) 2 u ( x) = A( x x0 ) + B( x x0) + C, u ( x) = 2A( x x0) + B och bestäm A, B, och C så att parabeln går genom (x 0 +kh,u k ), k = 0,1,2: p 19 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 20 (23) Staffan Romberger, CSC, KTH, 2009-11-25

syms A B C u0 u1 u2 h d e e = solve('a*0+b*0+c=u0',... 'A*h^2+B*h+C=u1',... 'A*(2*h)^2+B*(2*h)+C=u2','A','B','C'); d = 2*A*0+B; >> e.b ans = 1/2*(-3*u0-u2+4*u1)/h Det stämmer med formeln i labb 5. Man kan göra motsvarande för funktionens högra ände. Formelbehandling forts. Med syms deklarerar man vilka variabler som ska vara symboliska. S = solve('eqn1','eqn2',...,'eqnn',... 'var1','var2',...'varn') löser {vari},i=1:n ur ekvationssystemet {eqni } som S.vari. subs(f, {v1 v2 vn}, {e1, e2,, en}) ersätter i formeln f variablerna vi med uttrycken ei. simplify(f) förenklar formeln f. Se hjälpen för information om hur man kan styra förenklingen. p 21 (23) Staffan Romberger, CSC, KTH, 2009-11-25 p 22 (23) Staffan Romberger, CSC, KTH, 2009-11-25 Avslutning av programmeringskursdelen Det finns mer i Matlab Ni kan fördjupa det ni redan har sett. Ni kan lära känna Matlabs verktygslådor. Ni kan lära er objektorienterad programmering med Matlab. Kursen fortsätter med Programmeringslaboration 2 och 3 Numeriska metoder inkl. laborationer Projektet Tentan Hur går du vidare? Använd Matlab i nummedelen och i andra kurser. Läs kursen Tillämpad datalogi (tilda). p 23 (23) Staffan Romberger, CSC, KTH, 2009-11-25