Sunteți pe pagina 1din 2

BP - Curs 12

1 Algoritmi și algoritmi alternativi

Algoritm concurent = algoritmi care descriu comportamentul fiecărei unități de program care
concura în spațiul de unități (procese, corutine etc).

Algoritm paralel = algoritmi care descriu comportamentul fiecărei unități de program care
rulează în spațiul de unități de procesare (coprocesoare, nuclee in procesor, GPU, transputere,
calculatoare vectoriale, calculatoare masiv paralele etc).

Algoritm distribuit = algoritmi care descriu comportamentul fiecărei unități de program care
rulează în spațiul de unități de procesare interconectate prin rețea de interconectare.

Algoritm de aproximare = obținerea unei soluții x, pentru care S(x), este aproximată printr-o
valoare x’ acceptabilă, adică una pentru care || x – x’|| < epsilon, unde ||.|| este o norma dată pe
spațiu normat în care apar x și x’.

Algoritm aproximativ = rezolvarea unei probleme y=P(x) pentru care complexitatea este
prea mare, se modifică prin rezolvarea unei probleme y’=P(x’), unde x’= x + epsilon, dar
pentru care complexitatea scade dramatic. Fortand dependenta continua de date (care nu e
demonstrată, de cele mai multe ori!), soluția este y’ ca o aproximație a solutiei initiale.

Algoritm probabilist = datele de intrare sunt variabile aleatoare, iar rularea algoritmului
scotea ca rezultat un proces stochastic. Indicatorii de succes pentru un algoritm probabilist
este probabilitatea de a scoate un rezultat corect. De cele mai multe ori, variabilele aleatoare
sunt grupate separat de datele de intrare clasice.

Alte: Soft computing: algoritmi genetici, algoritmi neuronali, algoritmi de călire, algoritmi
ABC, algoritmi cu membrane, algoritmi cu sistole etc.

Algoritm cuantic = calculator cuantic, qbit / super bit cuantic, superpozitie.

2 Paradigme de programare

Programare declarativă = programul descrie o scena de calcul, nu un mod de calcul.


Exemplu: SIMULIX, HTML etc.

Programare funcțională = tratează calculul ca o evaluare de funcții. Baza este ierarhia de


funcții calculabile (ierarhia Ackerman-Peter) și conceptul de lambda funcție. Exemple de
limbaje Lisp, APL, Erlang, OCaml, Haskell, Scheme, R (în statistică si data science),
Mathematica (și alte softuri de calcul simbolic). Multe limbaje încearcă sa adopte și
paradigma funcțională. Astfel limbajele imperative (C, C++) au conceptul de pointer la
funcție. Alte limbaje implementează conceptele de parametri de tip funcție sau lambda
expresii.

Programare logică = tratează calculul ca o consecință a logicii predicatelor, mecanismul de


calcul fiind bazat pe backtracking și tăieturi. Exemplu: Prolog.
Programare imperativă = este o paradigmă de programare care descrie calculul ca
instrucțiuni ce modifică starea unui program. Exemplu: Pascal, C, C++, Python, PHP, Java etc

Programarea orientată pe aspecte = permite separarea relațiilor cross-cutting, participanții


(actorii) conțin codul necesar pentru ca aceștia să implementeze serviciile sistemului.

Programarea orientată pe agenți = permite separarea distribuită a codului în așa fel incat sa
ruleze pe procese specializate (agenți), care, eventual, pot migra de pe o gazda pe alta
(eventual arhitecturi diferite).

Programare orientată eveniment = Cursul execuției unui program orientat eveniment este
condus în mare parte de evenimente externe. (de exemplu, interiorul unui SO de tip Windows,
evenimentele pot fi generate de tastatura, mouse, intrări de la drivere etc).

Programare orientată pe obiecte = axat pe ideea încapsulării și polimorfismului, care


permite abstractizări ce permit o descriere conceptuală mai simplă a soluție. Exemple: C++,
Turbo Pascal, Objective C, C#, Java, Python etc.

Programare procedurală = bazată pe conceptul de apel de procedură (procedura,


subprogram, funcție, rutina, subrutina, metoda), adică o serie de pași care trebuie executați
într-un anumit context. Exemple: Pascal, C, C++, Java, Python etc.

Programare structurată = programare folosind instrucțiunile de programare structurată și


evitarea instrucțiunilor de tip GOTO sau JUMP (exista în limbajele de asamblare / masina,
Fortran, C, C++, Pascal etc).

Programare paralelă = programarea unei arhitecturi multiprocesor. De exemplu, in C++ sau


alte limbaje.

Programare distribuite = programarea unei arhitecturi multicalculator. De exemplu, in C++


sau alte limbaje.

Programare concurentă = programarea unei arhitecturi cu sistem de operare multiproces. De


exemplu: C, C++. Cu mentiuni legate de conceptul de thread / proces etc, și alte limbaje, cum
ar fi Java, Python, Javascript etc.

Programare recursiva = programarea unei arhitecturi care permite gestionarea unei stive de
execuție. De exemplu: Pascal, C, C++, Python, Java etc.

Programaarea bazata pe reguli si sabloane = se definesc pattern-uri de comportament, de


exemplu tabele de decizie

3 Ce urmează?

Recapitulare pentru examen, subiecte propuse.

4 Probleme de interviu

S-ar putea să vă placă și