You are on page 1of 46

Limbajul Algoritmic

Dorel Lucanu
Faculty of Computer Science Alexandru Ioan Cuza University, Ia si, Romania dlucanu@info.uaic.ro

PA 2013/2014

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

1 / 46

Outline

Introducere

Limbajul Alk Modelul de memorie Operat ii Expresii si instruct iuni

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

2 / 46

Introducere

Plan

Introducere

Limbajul Alk Modelul de memorie Operat ii Expresii si instruct iuni

D. Lucanu (FII - UAIC)

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.

Schneider and Gersting 1995 (Invitation for Computer Science):


An algorithm is a well-ordered collection of unambiguous and eectively computable operations that when executed produces a result and halts in a nite amount of time.

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.

D. Lucanu (FII - UAIC)

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.

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

5 / 46

Introducere

Ingredientele de baz a: model de calcul, problema rezolvat a


Toate denit iile au ceva n comun: datele/informat ia si procesarea acestora/acesteia n pa si. Acestea sunt descrise n general de un model de calcul. Un model de calcul este format din:
memorie - modul de reprezentare a datelor instruct iuni sintax a - descrie sintactic pa sii de procesare semantic a - descrie pa sii de procesare realizat i de execut ia unei instruct iuni; n general este dat a de o relat ie de tranzit ie peste congurat ii (sistem tranzit ional)

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

Cum descriem un algoritm?

informal: limbaj natural formal


notat ie matematic a (ma sini Turing, lambda-calcul (Church), funct ii recursive, . . . ) limbaje de programare: de nivel inalt, de nivel jos, declarative (e.g., programare funct ional a, programare logic a). Acesta poate si un model informal dac a nu exist a o semnatic a formal a pentru limbaj.

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

D. Lucanu (FII - UAIC)

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

D. Lucanu (FII - UAIC)

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

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

9 / 46

Introducere

Formalizarea not iunii de algoritm


abia n 1936 Alonso Church si Alan Turing au denit formal, ecare independent, not iunea de de lagoritm Church a utilizat notatt ia cunoscut a acum sub numele de lambda-calcul (-calcul) Turing a denit modelul de calcul care acum este cunoscut sub numele de ma sini Turing cele dou a modele de calcul sunt echivalente n 1970 Yuri Matijasevic a ar atat c a nu exist a algoritm care s a testeze dac a un polinom dat are r ad acin a ntreag a sau nu (rezultaul se bazraz a pe munca anterioar a depus a de Martin Davis, Hilary Putnam, si Julia Robinson) de atunci au ap arut multe alte modele echivalente cu ma sinile Turing

D. Lucanu (FII - UAIC)

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 Alk Modelul de memorie Operat ii Expresii si instruct iuni

D. Lucanu (FII - UAIC)

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 Alk Modelul de memorie Operat ii Expresii si instruct iuni

D. Lucanu (FII - UAIC)

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 ie grac a C++

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,. . . .

D. Lucanu (FII - UAIC)

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

D. Lucanu (FII - UAIC)

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};

Tablourile multidimensionale pot modele cu tablouri unidimensionale de tablouri . . .


D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 19 / 46

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++

struct Point { int x; int y; } p; p.x = 2; p.y = 7;


Limbajul Algoritmic PA 2013/2014 20 / 46

D. Lucanu (FII - UAIC)

Limbajul Alk

Modelul de memorie

Valori complexe: grafuri


Graful G = ({0, 1, 2}, {(0, 1), (0, 2), (1, 2)}) este reprezentat prin liste de adiacent a dup a cum urmeaz a: notat ie matematic a {n 3 a {0 [1, (2, ())] 1 [0, (2, ())] 2 [0, (1, ())]}} notat ie grac a n a 0 1 3 1, (2, ()) 0, (2, ()) G C++ struct Graph { int n; vector<list<int>> a; } G;
D. Lucanu (FII - UAIC) Limbajul Algoritmic

2 0, (1, ())

G.n = 3; G.a[0].push_front(1); ...


PA 2013/2014 21 / 46

Limbajul Alk

Operat ii

Plan

Introducere

Limbajul Alk Modelul de memorie Operat ii Expresii si instruct iuni

D. Lucanu (FII - UAIC)

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 )

D. Lucanu (FII - UAIC)

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

Operat ie a[i ] (a.lookup(i )) a[i ] = v (a.update(i ))

Cost uniform O (1) O (1)

Cost logarithmic O (i + log ai ) O (i + log v )

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

25 / 46

Limbajul Alk

Operat ii

Structuri

Operat ie p .x p .x = v

Cost uniform O (1) O (1)

Cost logarithmic O (log x ) O (log v )

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

26 / 46

Limbajul Alk

Expresii si instruct iuni

Plan

Introducere

Limbajul Alk Modelul de memorie Operat ii Expresii si instruct iuni

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

27 / 46

Limbajul Alk

Expresii si instruct iuni

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

Expresii si instruct iuni

Instruct iuni: sintaxa

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,""}

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

29 / 46

Limbajul Alk

Expresii si instruct iuni

Secvent ializarea pa silor de execut ie


Se consider a o relat ie S1 S2 cu semnicat ia activitatea S1 se execut a nainte de activitatea S2 . activitate = evaluarea unei expresii, execut ia unei instruct iuni, act iune auxiliara a,. . . Ordinea de execut ie se poate deni prin reguli de heating/cooling: E1 + E2 E1 + E2 (heating) E1 + E2 E2 E1 + (heating) I1 + E2 I1 + E2 (cooling) I2 E1 + E1 + I2 (cooling) (pentru o expresie-sum a, se evalueaz a mai nt ai argumentele si apoi suma) ... if E S1 else S2 E if S1 else S2 (heating) B if S1 else S2 if B S1 else S2 (cooling) (pentru instrct iunea if se evalueaz a mai nt ai expresia care trebuie s a dea ca rezultat o valoare boolean a) ... Presupunere: costul tranzit iilor date de regulile de heating/cooling este 0.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 30 / 46

Limbajul Alk

Expresii si instruct iuni

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

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

31 / 46

Limbajul Alk

Expresii si instruct iuni

Pas de execut ie computat ional

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

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

32 / 46

Limbajul Alk

Expresii si instruct iuni

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

Expresii si instruct iuni

Instruct iuni: semantica

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 )

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

34 / 46

Limbajul Alk

Expresii si instruct iuni

Instruct iuni: semantica


if: if (e ) then S else S informal : se evalueaz a e ; dac a rezultatul obt inut este true, atunci se execut a S , altfel se execut aS formal : evaluarea mai nt ai a lui e se face prin reguli de heating/cooling descrise pe slide-ul 30; Semantica controlului dat de if: if (true ) then S else S S , S S , if (false ) then S else S S , S S , cost uniform: O (1), cost logaritmic: O (1) while: while (e ) S informal : se evalueaz a e ; dac a rezultatul obt inut este true, atunci se execut a S , dup a care se evalueaz a din nou e si . . . ; altfel execut ia instruct iunii se termin a formal : se exprim a cu ajutorul lui if: while (e ) S S , if (e ) { S ; while (e ) S } else { } S , Ca si pentru reguille de heating/cooling, costul tranzit iei obt inute prin aplicarea acestei reguli este considerat 0.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 35 / 46

Limbajul Alk

Expresii si instruct iuni

Instruct iuni: semantica

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.

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

36 / 46

Limbajul Alk

Expresii si instruct iuni

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

Expresii si instruct iuni

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

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

38 / 46

Limbajul Alk

Expresii si instruct iuni

Testarea algoritmilor cu K Framework


K Framework (www.kframework.org) este un mediu de lucru pentru denit ii de limbaje de programare. Denit iile K sunt executabile. Limbajul Alk este denit n K, a sa c a algoritmii descri si n Alk pot testat i si analizat i. Exist a o interfat a online pentru K (http://fmse.info.uaic.ro/tools/K/), dar se recomand a instalarea Kului pentru calculatorul personal. Denit ia K a lui Alk se gaseste la adresa https://github.com/kframework/alk-semantics Compilarea denit iei limbajului Alk: kompile alk Proiect (posibil pentru licent a): dezvoltarea unei interfet e specice pentru Alk.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 39 / 46

Limbajul Alk

Expresii si instruct iuni

Stare global a, stare local a


Deoarece Alk include funct ii si posibil si variabile globale, starea unei congurat ii este divizat a n dou a: stare local a si stare global a. Pentru execut ia unui algoritm, trebuie precizate ambele componente pentru a se putea deni congurat ia init ial a. Urmatorul exemplu este un generator de numere pseufo-aleatorii din cartea The C Programming Language de Kernighan and Ritchie. rand() { random_seed = random_seed * 1103515245 +12345; return (random_seed / 65536) % 32768; } x = rand(); y = rand(); a global a, valoarea ei init ial a trebuie Deoarece random seed este variabil precizat a n starea globa a (GST): krun programs/random.alk -cST=".Map" -cGST="random_seed |-> 1212"
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 40 / 46

Limbajul Alk

Expresii si instruct iuni

Stare global a, stare local a


Aceast a separare e necesar a doar pentru pa sii intermediari, n congurat ia na a se gaset e o singur a stare cu toate variabilele ( si funct iile):

$ 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>

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

41 / 46

Limbajul Alk

Expresii si instruct iuni

Exemplu de algoritm n Alk: DFS nerecursiv


/*

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

i = 0; while (i < D.n) { p[i] = D.a[i]; S[i] = 0; i = i + 1; } SB = empty(); SB.pushFront(i0); S[i0] = 1;

D. Lucanu (FII - UAIC)

Limbajul Alk

Expresii si instruct iuni

Execut ia algoritmului DFS nerecursiv


Presupun and ca digraful D este D.n = 3 D.a[0] = (1,2) D.a[1] = (2, 0) D.a[2] = (0) si c a v arful de start i0 este 1, linia de comand a pentru execut ie va preciza valoarea lui D n starea local a (ST): krun programs/dfsnerec.alk -cST "D |-> { n |-> 3 a |-> { 0 |-> [1, 2, .Vals] 1 |-> [2, 0, .Vals] 2 |-> [0, .Vals] } } i0 |-> 1 p |-> { .Map } S |-> { .Map }" \ -cGST=".Map"
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 43 / 46

Limbajul Alk

Expresii si instruct iuni

Exemplu de algoritm n Alk: DFS recursiv


/* This example includes the recursive version of the DFS algorithm. @input: a digraf D and a vertex i0 @output: the list S of the verices reachable from i0 */ // the recursive function dfsRec(i) { if (S[i] == 0) { // visit i S[i] = 1; p = D.a[i]; while (p.size() > 0) { j = p.topFront(); p.popFront(); dfsRec(j); } } }
D. Lucanu (FII - UAIC)

// the calling program i = 0; while (i < D.n) { S[i] = 0; i = i + 1; } dfsRec(1);

Limbajul Algoritmic

PA 2013/2014

44 / 46

Limbajul Alk

Expresii si instruct iuni

Execut ia algoritmului DFS nerecursiv


Presupun and ca digraful D este D.n = 3 D.a[0] = (1,2) D.a[1] = (2, 0) D.a[2] = (0) si c a v arful de start i0 este 1, linia de comand a pentru execut ie va preciza valoarea lui D n starea global a (GST): krun programs/dfsrec.alk -cGST "D |-> { n |-> 3 a |-> { 0 |-> [1, 2, .Vals] 1 |-> [2, 0, .Vals] 2 |-> [0, .Vals] } } i0 |-> 1 p |-> { .Map } S |-> { .Map }" \ -cST=".Map"
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 45 / 46

Limbajul Alk

Expresii si instruct iuni

Demo

Execut ia algoritmilor de mai sus cu interfat a online.

D. Lucanu (FII - UAIC)

Limbajul Algoritmic

PA 2013/2014

46 / 46

You might also like