Professional Documents
Culture Documents
Limb Alg
Limb Alg
Dorel Lucanu
Faculty of Computer Science Alexandru Ioan Cuza University, Ia si, Romania dlucanu@info.uaic.ro
PA 2013/2014
Limbajul Algoritmic
PA 2013/2014
1 / 46
Outline
Introducere
Limbajul Algoritmic
PA 2013/2014
2 / 46
Introducere
Plan
Introducere
Limbajul Algoritmic
PA 2013/2014
3 / 46
Introducere
Ce este un algoritm
Nu exist a o denit ie standard pentru nout iunea de algorithm. Cambridge Dictionary:
A set of mathematical instructions that must be followed in a xed order, and that, especially if given to a computer, will help to calculate an answer to a mathematical problem.
Gersting and Schneider 2012 (Invitation for Computer Science, 6nd edition):
An algorithm is ordered sequence of instructions that is guaranteed to solve a specic problem.
Limbajul Algoritmic
PA 2013/2014
4 / 46
Introducere
Ce este un algoritm?
Wikipedia:
In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning. An algorithm is an eective method expressed as a nite list of well-dened instructions for calculating a function. Starting from an initial state and initial input (perhaps empty), the instructions describe a computation that, when executed, proceeds through a nite number of well-dened successive states, eventually producing output and terminating at a nal ending state. The transition from one state to the next is not necessarily deterministic; some algorithms, known as randomized algorithms, incorporate random input.
Limbajul Algoritmic
PA 2013/2014
5 / 46
Introducere
un algoritm trebuie s a produc a un rezultat, adic a un algoritm trebuie s a rezolve o problem a. O problem a este n general reprezentat a de o pereche (input,output), unde input reprezint a descrierea datelor de intrare (instant a) iar output descrierea datelor de ie sire (rezultatul).
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 6 / 46
Introducere
semiformal
pseudo-cod: combin a notat ia formal a a limbajelor de prgramare cu limbajul natural notat ie grac a: scheme logice, automate (state machines), diagrame de activit a ti
Limbajul Algoritmic
PA 2013/2014
7 / 46
Introducere
De ce nevoie de formalizare?
nainte de secolul 20 matematicienii au utilizat not iunea de algoritm doar la nivel intuitiv n 1900, David Hilbert, la Congresul matematicienilor din Paris, a formulat 23 de probleme ca provoc ari ale secolului care ncepea problema a 10-a cerea g asirea unui proces care s a determine dac a un polinom cu cefeicient i ntregi are o r ad acin a ntreag a Hilbert nu a pronunt at termenul de algoritm
Limbajul Algoritmic
PA 2013/2014
8 / 46
Introducere
De ce nevoie de formalizare?
problema a 10-a a lui Hilbert este nerezolvabil a, i.e. nu exist a un algoritm care av and la intrare un polinom p , decide daca a p are r ad acin a ntreag a acest fapt nu se poate demonstra av and doar not iunea intuitiv a de algoritm pentru a demonstra c a nu exist a algoritm care rezolv a o problem a, e necesar de o not iune formal a
Limbajul Algoritmic
PA 2013/2014
9 / 46
Introducere
Limbajul Algoritmic
PA 2013/2014
10 / 46
Introducere
Teza Church-Turing
Turing a armat (Teza lui Turing) c a orice funct ie a c arei valoare poate obt inut a printr-o metod a efectiv a (?), poate calcult a de mo ma sin a Turing. Forma cea mai accesibil a formulat a de Turing: LCMs [logical computing machines: Turings expression for Turing machines] can do anything that could be described as rule of thumb or purely mechanical. (Turing 1948) Teza lui Church: A function of positive integers is eectively calculable only if recursive. Modelul de calcul al funct iilor recursive a fost denite de de G odel si Herbrand (1932-1934) si este echivalent cu lambda-calculul (Kleene, Church, 1936). Kleene (1967) este cel care a introdus termenul de Teza Church-Turing: So Turings and Churchs theses are equivalent. We shall usually refer to them both as Churchs thesis, or in connection with that one of its . . . versions which deals with Turing machines as the Church-Turing thesis.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 11 / 46
Introducere
Nivelul de formalizare
Care este cel mai potrivit limbaj formal de prezentare a algoritmilor? ma sinile Turing, lambda-calcululu, funct iile recursive au avantajul ca sunt u sor de denit matematic, dar sunt greu de utilizat n practic a limbajele de programare sunt u sor de utilizat n practic a dar dicil de manevrat n demonstrat ii datorit a detaliilor de implementare cel mai simplu limbaj de programare echivalent cu ma sinile Turing: modelul de memorie: mult ime de variabile ce pot lua valori ntregi instruct iuni: goto condit ional a si necondit ional a, incrementarea si decrementarea variabilelor este cunoscut sub numele de counting machines o variant structurat a (modelul programelor while): modelul de memorie: mult ime de variabile ce pot lua valori ntregi instruct iuni: atribuirea, if, while, si compunerea secvent ial a
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 12 / 46
Limbajul Alk
Plan
Introducere
Limbajul Algoritmic
PA 2013/2014
13 / 46
Limbajul Alk
Motivat ie
Scopul nostru este de a avea un limbaj care este destul de simplu pentru a nt eles sucient de expresiv pentru a descrie tot i algoritmii prezentat i abstract: descrierea algoritmului face abstract ie de detaliile de implementare (specice unui limbaj de programare real), avantaj and astfel focalizarea pe g andirea algoritmic a s a ofere un model de calcul riguros denit si potrivit pentru analiza algoritmilor (corectitudine si ecient a) executabil: algoritmii pot testat i si execut iile lor analizate cu diverse mijloace (execut ie pas cu pas, execut ie simbolic a, etc) intr arile si ie sirile sunt reprezentate abstract, ca obiecte matematice. astfel nc at detaliile de implementare sunt omise total Un candidat care satisface aceste cerint e este Alk (limbaj specic acestui curs).
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 14 / 46
Limbajul Alk
Modelul de memorie
Plan
Introducere
Limbajul Algoritmic
PA 2013/2014
15 / 46
Limbajul Alk
Modelul de memorie
Modelul de memorie
memoria este dat a de o mult ime de variabile variabilele nu sunt altceva dec at locat ii de memorie care stucheaz a valori si care sunt accesta prin nuume simbolice n loc de adrese astfel o varibil a este o pereche: notat ie matematic a nume-variabil a valoare
valoare nume-variabil a notat ie grac a consider a urm atoarel tipuri de variabile: scalare liste cons tablouri structuri
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 16 / 46
Limbajul Alk
Modelul de memorie
Scalari
aici sunt incluse tipurile primitive: valorile boolene, algebra ntregilor, algebra numerelor rat ionale (virgul a mobil a), siruri notat ie matematic a b true true b bool b = true; i5 5 i int i = 5;
Notat ia matematic a este scrierea simplicat a (f ar a numele intermediar al funct iei) al unei funct ii : {b, i, . . .} Val dat a prin (b) = true , (i) = 5, . . . . Val este reuniunea valorilor booleene, ntregi,. . . .
Limbajul Algoritmic
PA 2013/2014
17 / 46
Limbajul Alk
Modelul de memorie
Liste cons
Sunt numite si liste a la Lisp. Sunt denite recursiv asfel: lista vid a () este o list a cons ; dac a V este o valoare si L este o list a cons , atunci (V , L) este o list a cons (cons vine de la structureconstructor) Abstractizeaz a liste simplu nl ant uite: notat ie matematic a L = (a, (b , (c , ()))) (scris a pe scurt (a, b , c , ())) a L b c
notat ie grac a
C++
struct List { int info; List *next; } * L; L = new List; L.info = a; L.next = new List; ...
Limbajul Algoritmic PA 2013/2014 18 / 46
Limbajul Alk
Modelul de memorie
Tablouri (unidimensionale)
Un tablou (unidimensional) poate abstractizat ca o funct ie de la mult imea (nit a) de indici la mult mea de valori. O astfel de funct ie poate reprezentat a de o mult ime de perechi indice valoare . Vom considera c a mult imea indicilor este {0, 1, . . . , n 1} (la fel ca n C++): notat ie matematic a a {0 a0 1 a1 2 a2 }
int a[3]; for (i=0; i<3;++i) cin >> a[i];
notat ie grac a
0 a0 a
1 a1
2 a2
C++
or int a = {a0, a1, a2};
Limbajul Alk
Modelul de memorie
Structuri
Structurile sunt reprezentate ntr-un mod similar celui de la tablouri, numai c a acum domeniul funct iilor este mult imea numelor de c ampuri n loc de cea a indicilor. De exemplu, o structur a p represent and puncte n plan are dou a c ampuri: x si y: notat ie matematic a p {x 2 y 7} x 2 p y 7
notat ie grac a
C++
Limbajul Alk
Modelul de memorie
2 0, (1, ())
Limbajul Alk
Operat ii
Plan
Introducere
Limbajul Algoritmic
PA 2013/2014
22 / 46
Limbajul Alk
Operat ii
Scalari
Intregi: Operat ie a +Int b a Int b ... Cost uniform O (1) O (1) Cost logarithmic O (max(log a, log b )) O (log a log b ) O (max(log a, log b )1.545 )
Limbajul Algoritmic
PA 2013/2014
23 / 46
Limbajul Alk
Operat ii
Liste cons
Operat ie L.lookup(i ) L.insert(i , x ) L.update(i , x ) L.topFront() L.pushFront(x ) L.topBack() L.pushBack() Cost uniform O (i ) O (i ) O (i ) O (1) O (1) O (L.size()) O (L.size()) Cost logarithmic ? ? ? ? ? ? ?
Denit ia operat iei de c autare: ().lookup(i ) = error (V , L).lookup(0) = V (V , L).lookup(i ) = (L).lookup(i 1) dac ai >0 Presupunem c a lista L include valorile v0 , . . . , vn1 . Timpul pentru c autare: T (0) = log v0 T (i ) = T (i 1) + log vi T (n 1) = log v0 + log vn1 Restul operat iilor r am an ca exercit ii.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 24 / 46
Limbajul Alk
Operat ii
Tablouri
Limbajul Algoritmic
PA 2013/2014
25 / 46
Limbajul Alk
Operat ii
Structuri
Operat ie p .x p .x = v
Limbajul Algoritmic
PA 2013/2014
26 / 46
Limbajul Alk
Plan
Introducere
Limbajul Algoritmic
PA 2013/2014
27 / 46
Limbajul Alk
Expresii: sintaxa
Varianta recursiv a Notat ia Backus-Naur syntax Exp ::= Id | Int | Exp "+" Exp | Exp "*" Exp ... | Exp "&&" Exp | Exp "||" Exp ... | Id "(" Exps ")" ... syntax Exps ::= List{Exp,","} un identicator (nume de variabil a) este espresie un num ar ntreg este expresie dac a E1 si E2 sunt expresii atunci E1 + E2 este expresie dac a E1 si E2 sunt expresii atunci E1 * E2 este expresie ... daca a E1 , . . . , En este o list a de expresii sI F un identicator (nume de funct ie) ...
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 28 / 46
Limbajul Alk
syntax Stmt ::= Exp "=" Exp ";" | Exp ";" | "{" "}" | "{" Stmts "}" | "while" "(" Exp ")" Stmt | "return" Exps ";" | Exp "(" Ids ")" "{" Stmts "}" | "if" "(" Exp ")" Stmt "else" Stmt | "if" "(" Exp ")" Stmt ... syntax Stmts ::= List{Stmt,""}
Limbajul Algoritmic
PA 2013/2014
29 / 46
Limbajul Alk
Limbajul Alk
Congurat ii
O congurat ie este o pereche secvent a-de-activit a ti, stare Exemple: x = x + 1; y = y x = x + 1; y = x + 1 x = ; x + 1 x = + 2 * x;, x 7 y 12 y + 2 * x;, x 7 y 12 y = y + 2 * x;, x 7 y 12 ; y = y + 2 * x;, x 7 y 12
Limbajul Algoritmic
PA 2013/2014
31 / 46
Limbajul Alk
S, S , dac a si numai dac a execut and prima activitate din lista curent a de activit a ti S n starea obt inem lista de activit a ti S , ce urmeaz a a executat a n continuare, si o nou a stare
Limbajul Algoritmic
PA 2013/2014
32 / 46
Limbajul Alk
Evaluarea expresiilor
Deoarece subexpresiile (argumentele) sunt deja evaluate datorit a regulilor de heating/cooling, trebuie reguli doar pentru evaloarea operatorilor: I1 + I2 S , I1 +Int I2 S, I1 * I2 S , I1 Int I2 S, ... B1 || B2 S , B 11 Bool B 22 S, B1 && B2 S , B 11 Bool B 22 S, ... Costul unei tranzit ii dat a de regula de mai sus este costul operat iei din partea dreapt a. variabil a: x informal : variabila x se nlocuie ste cu valoare ei din componenta stare a congurat iei curente formal : x S , {x v } v S , {x v } cost uniform: O (1), cost logaritmic: O (log v )
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 33 / 46
Limbajul Alk
atribuirea: x = e ; informal : se evalueaz ae si rezultatul este atribuit ca noua valoare a variabilei x formal : evaluarea mai nt ai a lui e se face prin reguli de heating/cooling : x = e; S, e x = ; S, v x = ; S, x = v; S, Execut ia propriuzis a a atribuirii: x = v; S , { x } S , {x v } cost uniform: O (1), cost logaritmic: O (log v )
Limbajul Algoritmic
PA 2013/2014
34 / 46
Limbajul Alk
Limbajul Alk
compunerea secvent ial a: S1 ; S2 informal : se exect a mai nt ai S1 apoi S2 formal : S1 ; S2 bloc : {S } informal : se exect a instruct iunile dintre acolade formal : {S } S , S S , S , S1 S2 S ,
Ca si pentru reguille de heating/cooling, costul tranzit iei obt inute prin aplicarea acestor reguli este considerat 0.
Limbajul Algoritmic
PA 2013/2014
36 / 46
Limbajul Alk
Apelul de funct ie
Operat ie mai complex a ce include mai multe activit a ti: se evalueaz a argumentele actuale legarea parametrilor formali la valorile date de argumentele actuale (parametrii funct iei devin variabile cu vlaorile date de evaluarea argumentelor actuale) salvarea starii curente n lista de actvit a ti construirea st arii de start pentru execut ia corpului funct iei format a din variabilele globale, parametrii si variabilele locale ale funct iei dup a execut ia corpului funct iei, se restaureaz a starea de dinainte de apel Funct iile sunt memorate ca variabile speciale f (parametri@{corpul funct iei}) Presupunere: costul unui apel este suma dintre costul evalu arii argumentelor actuale si costul execut iei corpului funct iei.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 37 / 46
Limbajul Alk
Exemplu de execut ie
x + 1 x = ; y = y + 2 * x;, x 7 y 12 7 + 1 x = ; y = y + 2 * x;, x 7 y 12 7 + 1 x = ; y = y + 2 * x;, x 7 y 12 7 +Int 1 x = ; y = y + 2 * x;, x 7 y 12 = 8 x = ; y = y + 2 * x;, x 7 y 12 x = 8; y = y + 2 * x;, x 7 y 12 y = y + 2 * x;, x 8 y 12 ... cost uniform: 3 cost logaritmic: log 7 + log 7 + log 8
Limbajul Algoritmic
PA 2013/2014
38 / 46
Limbajul Alk
Limbajul Alk
Limbajul Alk
$ krun programs/random.alk -cST=".Map" -cGST="random_seed |-> 1212" <k> .K </k> <state> rand |-> lambda ( @ random_seed = ((random_seed * 1103515245) + return ((random_seed / 65536) % 32768) ; ) random_seed |-> 1475908039511156662170 x |-> 26331 y |-> 19887 </state>
Limbajul Algoritmic
PA 2013/2014
41 / 46
Limbajul Alk
This example includes the nonrecursive version of the DFS algorith @input: a digraf D and a vertex i0 @output: the list S of the verices reachable from i0 */ // visit i0 while (SB.size() > 0) { i = SB.topFront(); if (p[i].size() == 0) { SB.popFront(); } else { j = p[i].topFront(); p[i].popFront(); if (S[j] == 0) { // visit j; S[j] = 1; SB.pushFront(j); } } }
Limbajul Algoritmic PA 2013/2014 42 / 46
Limbajul Alk
Limbajul Alk
Limbajul Algoritmic
PA 2013/2014
44 / 46
Limbajul Alk
Limbajul Alk
Demo
Limbajul Algoritmic
PA 2013/2014
46 / 46