1. Tehnici de programare

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "1. Tehnici de programare"

Transcript

1

2 1.1. Analiza algoritmilor 1. Tehnici de programare Prin analiza unui algoritm se identifică resursele necesare pentru executarea algoritmului: timpul de execuţie şi memoria. Analiza algoritmilor este necesară atunci când există mai mulţi algoritmi pentru rezolvarea aceleiaşi probleme şi trebuie ales algoritmul cel mai eficient. Eficienţa unui algoritm este evaluată prin timpul necesar pentru executarea algoritmului. Pentru a compara din punct de vedere al eficienţei doi algoritmi care rezolvă aceeaşi problemă, se foloseşte aceeaşi dimensiune a datelor de intrare n (acelaşi număr de valori pentru datele de intrare). Timpul de execuţie al algoritmului se exprimă prin numărul de operaţii de bază executate în funcţie de dimensiunea datelor de intrare: T(n). Pentru a compara doi algoritmi din punct de vedere al timpului de execuţie, trebuie să se stabilească unitatea de măsură care se va folosi, adică operaţia de bază executată în cadrul algoritmilor, după care, se numără de câte ori se execută operaţia de bază în cazul fiecărui algoritm. Operaţia de bază este o operaţie elementară sau o succesiune de operaţii elementare, a căror execuţie nu depinde de valorile datelor de intrare. Există algoritmi la care timpul de execuţie depinde de distribuţia datelor de intrare. Să considerăm doi algoritmi de sortare a unui vector cu n elemente algoritmul de sortare prin metoda selecţiei directe şi algoritmul de sortare prin metoda bulelor şi ca operaţie de bază comparaţia. Dacă, în cazul primului algoritm, timpul de execuţie nu depinde de distribuţia datelor de intrare (modul în care sunt aranjate elementele vectorului înainte de n (n 1) sortarea lui), el fiind T(n) =, în cazul celui de al doilea algoritm timpul de execuţie depinde de distribuţia datelor de intrare (numărul de execuţii ale structurii repetitive 2 while depinde de modul în care sunt aranjate elementele vectorului înainte de sortare). În cazul în care numărul de execuţii ale operaţiilor elementare depinde de distribuţia datelor de intrare, pentru analiza algoritmului se folosesc: timpul maxim de execuţie timpul de execuţie pentru cazul cel mai nefavorabil de distribuţie a datelor de intrare; în cazul sortării prin metoda bulelor, cazul cel mai nefavorabil este atunci când elementele vectorului sunt aranjate în ordine inversă decât aceea cerută de criteriul de sortare; timpul mediu de execuţie media timpilor de execuţie pentru fiecare caz de distribuţie a datelor de intrare. Deoarece, în analiza eficienţei unui algoritm, se urmăreşte comportamentul lui pentru o dimensiune mare a datelor de intrare, pentru a compara doi algoritmi din punct de vedere al eficienţei, este suficient să se ia în considerare numai factorul care determină timpul de execuţie şi care este denumit ordinul de complexitate.

3 4 Tehnici de programare Ordinul de complexitate al unui algoritm îl reprezintă timpul de execuţie estimat prin ordinul de mărime al numărului de execuţii ale operaţiei de bază: O((f(n)), unde f(n) reprezintă termenul determinant al timpului de execuţie T(n). De exemplu, dacă pentru algoritmul de sortare, prin metoda selecţiei directe timpul de 2 n (n 1) n n execuţie este T(n) =, ordinul de complexitate al algoritmului este O(n 2 ), deoarece în calcularea lui se ia în considerare numai factorul determinant din timpul de execuţie. În funcţie de ordinul de complexitate, există următoarele tipuri de algoritmi: Ordin de complexitate O(n) O(n m ) O(k n ) O(logn) O(nlogn) Tipul algoritmului Algoritm liniar. Algoritm polinomial. Dacă m=2, algoritmul este pătratic, iar dacă m=3, algoritmul este cubic. Algoritm exponenţial. De exemplu: 2 n, 3 n etc. Algoritmul de tip O(n!) este tot de tip exponenţial, deoarece: n > = 2 n-1. Algoritm logaritmic. Algoritm liniar logaritmic. De exemplu, algoritmul de sortare prin metoda selecţiei directe este un algoritm pătratic. Ordinul de complexitate este determinat de structurile repetitive care se execută cu mulţimea de valori pentru datele de intrare. În cazul structurilor repetitive imbricate, ordinul de complexitate este dat de produsul dintre numărul de repetiţii ale fiecărei structuri repetitive. Structura repetitivă Numărul de execuţii ale corpului structurii Tipul algoritmului for (i=1;i =n;i=i+k) {...} f(n)=n/k O(n)=n Liniar for (i=1;i =n;i=i*k) {...} f(n)= log k n O(n)= logn Logaritmic for (i=n;i =n;i=i/k) {...} f(n)= log k n O(n)= logn Logaritmic for (i=n;i =n;i=i+p) {...} for (j=n; j =n;j=j+q) {...} f(n)=(n/p)*(n/q) = n 2 /(p*q) O(n)= n 2 Polinomial pătratic for (i=n;i =n;i=i++) {...} for (j=i; j =n;j=j++) {...} f(n)= n =(n*(n+1))/2 O(n)= n 2 Polinomial pătratic Determinaţi complexitatea următorilor algoritmi şi precizaţi tipul algoritmului. Temă Pentru fiecare algoritm se va considera dimensiunea datelor de intrare n. a. determinarea valorii minime dintr-un şir de numere; b. inserarea unui element într-un vector, după un element cu valoare precizată; c. ştergerea dintr-un vector a unui element cu valoare precizată, d. stabilirea dacă un şir de numere conţine numai numere distincte; e. sortarea unui vector folosind metoda bulelor; f. căutarea unui element cu valoare precizată, într-un vector nesortat; g. căutarea unui element cu valoare precizată, într-un vector sortat; h. determinarea tuturor permutărilor unei mulţimi de numere.

4 Informatică Metode de construire a algoritmilor În funcţie de procesul de calcul necesar pentru rezolvarea unei probleme, există următoarele clase de probleme: Clase de probleme Probleme de enumerare prin care se găsesc toate soluţiile posibile Probleme de decizie prin care se precizează dacă există sau nu cel puţin o soluţie Probleme de optimizare prin care se identifică soluţia optimă din mulţimea de soluţii posibile Generarea tuturor permutărilor unei mulţimi de numere este o problemă de enumerare, căutarea unei valori precizate într-un şir de numere este o problemă de decizie, iar găsirea modalităţii de plată a unei sume s cu un număr minim de bancnote de valori date este o problemă de optimizare. Pentru rezolvarea aceleiaşi probleme se pot folosi mai multe metode de construire a algoritmilor. Aţi învăţat deja că pentru rezolvarea aceleiaşi probleme puteţi folosi un: algoritm iterativ; algoritm recursiv. Soluţiile recursive sunt mult mai clare, mai scurte şi mai uşor de urmărit. Alegerea algoritmului recursiv în locul celui iterativ este mai avantajoasă în cazul în care soluţiile problemei sunt definite recursiv sau dacă cerinţele problemei sunt formulate recursiv. Timpul de execuţie a unui algoritm recursiv este dat de o Θ(1) pentru n=0 formulă recursivă. De exemplu, pentru algoritmul de T(n) = calculare a sumei primelor n numere naturale, funcţia Θ(1)+T(n-1) pentru n 0 pentru timpul de execuţie este prezentată alăturat, unde Θ(1) reprezintă timpul de execuţie a unei operaţii elementare de atribuire a unei valori sumei. Rezultă că T(n)=(n+1) Θ(1), iar ordinul de complexitate a algoritmului este O(n) la fel ca şi cel al algoritmului iterativ. În cazul implementării recursive, fiecare apel al unui subprogram recurent înseamnă încă o zonă de memorie rezervată pentru execuţia subprogramului (variabilele locale şi instrucţiunile). Din această cauză, în alegerea între un algoritm iterativ şi un algoritm recursiv trebuie ţinut cont nu numai de ordinul de complexitate, dar şi de faptul că, pentru o adâncime mare a recursivităţii, algoritmii recursivi nu mai sunt eficienţi, deoarece timpul de execuţie creşte, din cauza timpilor necesari pentru mecanismul de apel şi pentru administrarea stivei de sistem. Veţi învăţa noi metode de construire a algoritmilor care vă oferă avantajul că prezintă fiecare o metodă generală de rezolvare care se poate aplica unei clase de probleme: metoda backtracking; metoda divide et impera; metoda greedy; metoda programării dinamice. Fiecare dintre aceste metode de construire a algoritmilor se poate folosi pentru anumite clase de probleme, iar în cazul în care pentru aceeaşi clasă de probleme se pot folosi mai multe metode de construire a algoritmilor, criteriul de alegere va fi eficienţa algoritmului.

5 6 Tehnici de programare 1.3. Metoda backtracking Descrierea metodei backtracking Metoda backtracking se poate folosi pentru problemele în care trebuie să se genereze toate soluţiile, o soluţie a problemei putând fi dată de un vector: S = {x 1, x 2,, x n } ale cărui elemente aparţin, fiecare, unor mulţimi finite A i (x i A i ), iar asupra elementelor unei soluţii există anumite restricţii specifice problemei care trebuie rezolvată, numite condiţii interne. Mulţimile A i sunt mulţimi ale căror elemente sunt în relaţii bine stabilite. Mulţimile A i pot să coincidă sau nu. Pentru a găsi toate soluţiile unei astfel de probleme folosind o metodă clasică de rezolvare, se execută următorul algoritm: PAS1. Se generează toate elementele produsului cartezian A 1 A 2 A 3 A n. PAS2. Se verifică fiecare element al produsului cartezian, dacă îndeplineşte condiţiile interne impuse ca să fie soluţie a problemei. Scop: identificarea problemelor pentru care trebuie enumerate toate soluţiile, fiecare soluţie fiind formată din n elemente x i, care aparţin fiecare unor mulţimi finite A i şi care trebuie să respecte anumite condiţii interne. Enunţul problemei 1: Să se genereze toate permutările mulţimii {1, 2, 3}. Cerinţa este de a enumera toate posibilităţile de generare a 3 numere naturale din mulţimea {1, 2, 3}, astfel încât numerele generate să fie distincte (condiţia internă a soluţiei). O soluţie a acestei probleme va fi un vector cu 3 elemente: S = {x 1,x 2,x 3 }, în care elementul x i reprezintă numărul care se va găsi, în permutare, pe poziţia i, iar mulţimea A i reprezintă mulţimea numerelor din care se va alege un număr pentru poziţia i. În acest exemplu, mulţimile A i coincid. Ele au aceleaşi 3 elemente, fiecare element reprezentând un număr. A i = {1, 2, 3} = A Dacă s-ar rezolva clasic această problemă, ar însemna să se genereze toate elementele produsului cartezian A 1 A 2 A 3 = A A A = A 3, adică mulţimea: {(1,1,1), (1,1,2), (1,1,3), (1,2,1),, (3,3,2), (3,3,3)} după care se va verifica fiecare element al mulţimii dacă este o soluţie a problemei, adică dacă cele trei numere dintr-o soluţie sunt distincte. Soluţiile obţinute sunt: {(1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1)} Enunţul problemei 2: Să se genereze toate aranjamentele de 2 elemente ale mulţimii {1, 2, 3}. Cerinţa este de a enumera toate posibilităţile de generare a 2 numere naturale din mulţimea {1, 2, 3}, astfel încât numerele generate să fie distincte (condiţia internă a soluţiei). O soluţie a acestei probleme va fi un vector cu 2 elemente: S = {x 1,x 2 }, în care elementul x i reprezintă numărul care se va găsi în aranjament pe poziţia i, iar mulţimea A i reprezintă mulţimea numerelor din care se va alege un număr pentru poziţia i. Şi în acest exemplu, mulţimile A i coincid. Ele au aceleaşi 3 elemente, fiecare element reprezentând un număr. A i = {1, 2, 3} = A Dacă s-ar rezolva clasic această problemă, ar însemna să se genereze toate elementele produsului cartezian A 1 A 2 = A A = A 2, adică mulţimea: {(1,1), (1, 2), (1,3), (2,1),, (3,2), (3,3)}

6 Informatică 7 după care se va verifica fiecare element al mulţimii, dacă este o soluţie a problemei, adică dacă cele două numere dintr-o soluţie sunt distincte. Soluţiile obţinute sunt: {(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)} Enunţul problemei 3: Să se genereze toate combinările de 2 elemente ale mulţimii {1, 2, 3}. Cerinţa este de a enumera toate posibilităţile de generare a 2 numere naturale din mulţimea {1,2,3}, astfel încât numerele generate să fie distincte (condiţia internă a soluţiei), iar soluţiile obţinute să fie distincte. Două soluţii sunt considerate distincte dacă nu conţin aceleaşi numere. O soluţie a acestei probleme va fi un vector cu 2 elemente: S = {x 1,x 2 }, în care elementul x i reprezintă numărul care se va găsi în combinare pe poziţia i, iar mulţimea A i reprezintă mulţimea numerelor din care se va alege un număr pentru poziţia i. Şi în acest exemplu, mulţimile A i coincid. Ele au aceleaşi 3 elemente, fiecare element reprezentând un număr. A i = {1, 2, 3} = A Dacă s-ar rezolva clasic această problemă, ar însemna să se genereze toate elementele produsului cartezian A 1 A 2 = A A = A 2, adică mulţimea: {(1,1), (1, 2), (1,3), (2,1),, (3,2), (3,3)} după care se va verifica fiecare element al mulţimii dacă este o soluţie a problemei, adică dacă cele două numere dintr-o soluţie sunt distincte şi dacă soluţia obţinută este distinctă de soluţiile obţinute anterior. Soluţiile obţinute sunt: {(1,2), (1,3), (2,3)} Enunţul problemei 4: Să se genereze toate permutările mulţimii {1,2,3,4} care îndeplinesc condiţia că 1 nu este vecin cu 3, şi 2 nu este vecin cu 4. Cerinţa este de a enumera toate posibilităţile de generare a 4 numere naturale din mulţimea {1, 2, 3, 4}, astfel încât numerele generate să fie distincte, iar 1 să nu se învecineze cu 3, şi 2 să nu se învecineze cu 4 (condiţia internă a soluţiei). O soluţie a acestei probleme va fi un vector cu 4 elemente: S = {x 1,x 2,x 3,x 4 }, în care elementul x i reprezintă numărul care se va găsi în permutare pe poziţia i, iar mulţimea A i reprezintă mulţimea numerelor din care se va alege un număr pentru poziţia i. În acest exemplu, mulţimile A i coincid. Ele au aceleaşi 4 elemente, fiecare element reprezentând un număr. A i = {1, 2, 3, 4} = A Dacă s-ar rezolva clasic această problemă, ar însemna să se genereze toate elementele produsului cartezian A 1 A 2 A 3 A 4 = A A A A = A 4, adică mulţimea: {(1,1,1,1), (1,1,1,2), (1,1,1,3), (1,1,1,4),,(4,4,4,3), (4,4,4,4)} după care se va verifica fiecare element al mulţimii dacă este o soluţie a problemei, adică dacă cele patru numere dintr-o soluţie sunt distincte şi dacă 1 nu se învecinează cu 3, iar 2 cu 4. Soluţiile obţinute sunt: {(1,2,3,4), (1,4,3,2), (2,1,4,3), (2,3,4,1), (3,2,1,4), (3,4,1,2), (4,1,2,3), (4,3,2,1)} Enunţul problemei 5: Să se aranjeze pe tabla de şah opt dame care nu se atacă între ele (problema celor 8 dame). Cerinţa este de a enumera toate posibilităţile de aranjare a 8 dame pe o tablă de şah cu dimensiunea 8x8 (8 linii şi 8 coloane), astfel încât toate cele 8 dame să nu se atace între ele (condiţia internă a soluţiei). Deoarece nu se pot aranja două dame pe aceeaşi coloană (s-ar ataca între ele), înseamnă că pe fiecare coloană a tablei de şah se va pune o damă. O soluţie a acestei probleme va fi un vector cu 8 elemente, S = {x 1,x 2,x 3,x 4,x 5,x 6,x 7,x 8 }, în care elementul x i reprezintă numărul liniei pe care se va pune dama în coloana i, iar mulţimea A i reprezintă mulţimea liniilor pe care se poate aranja dama din coloana i. Şi în acest caz mulţimile A i coincid. Ele au aceleaşi opt elemente, fiecare element reprezentând un număr de linie: A i = {1, 2, 3, 4, 5, 6, 7, 8} = A

7 8 Tehnici de programare Dacă s-ar rezolva clasic această problemă, ar însemna să se genereze toate elementele produsului cartezian A 1 A 2 A 3... A 8 = A A A A = A 8, adică mulţimea: {(1,1,1,1,1,1,1,1), (1,1,1,1,1,1,1,2), (1,1,1,1,1,1,1,3),, (8,8,8,8,8,8,8,7), (8,8,8,8,8,8,8,8)} după care se va verifica fiecare element al mulţimii, dacă este o soluţie a problemei, adică dacă cele opt numere dintr-o soluţie pot reprezenta coloanele pe care pot fi aranjate damele pe fiecare linie, astfel încât să nu se atace între ele. Soluţiile obţinute sunt: {(1,5,8,6,3,7,2,4), (1,6,8,3,7,4,2,5), (1,7,4,6,8,2,5,3),, (8,3,1,6,2,5,7,4), (8,4,1,3,6,2,7,5)} Observaţie. Metoda clasică de rezolvare a acestui tip de probleme necesită foarte multe operaţii din partea calculatorului, pentru a verifica fiecare element al produsului cartezian. Presupunând (pentru simplificare) că fiecare mulţime A i are m elemente, atunci algoritmul de generare a elementelor produsului cartezian are complexitatea O(card(A 1 ) card(a 2 ) card(a n )) = Q(m m m m) = O(m n ). Considerând că algoritmul prin care se verifică dacă un element al produsului cartezian este o soluţie a problemei (respectă condiţia internă a soluţiei) are complexitatea O(p), atunci complexitatea algoritmului de rezolvare a problemei va fi O(p m n ). De exemplu, în algoritmul de generare a permutărilor, complexitatea algoritmului de verificare a condiţiei interne este dată de complexitatea algoritmului prin care se verifică dacă numerele dintr-un şir sunt distincte. În acest algoritm, se parcurge şirul de m numere şi pentru fiecare număr din şir se parcurge din nou şirul pentru a verifica dacă acel număr mai există în şir. Complexitatea algoritmului este dată de cele două structuri for imbricate: O(m 2 ) p = m 2. Metoda recomandată pentru acest gen de probleme este metoda backtracking sau metoda căutării cu revenire prin care se reduce volumul operaţiilor de găsire a tuturor soluţiilor. Metoda backtracking construieşte progresiv vectorul soluţiei, pornind de la primul element şi adăugând la vector următoarele elemente, cu revenire la elementul anterior din vector, în caz de insucces. Elementul care trebuie adăugat se caută în mulţime, printre elementele care respectă condiţiile interne. Prin metoda backtracking se obţin toate soluţiile problemei, dacă ele există. Pentru exemplificarea modului în care sunt construite soluţiile, considerăm problema generării permutărilor mulţimii {1, 2, 3,, n} (A 1 =A 2 = =A n =A={1, 2, 3,, n}). PAS1. Se alege primul element al soluţiei ca fiind primul element din mulţimea A. În exemplu, x 1 =1, adică primul număr din permutare este 1. PAS2. Se caută al doilea element al soluţiei (x 2 ). Pentru a-l găsi, se parcurg pe rând elementele mulţimii A şi, pentru fiecare element i al mulţimii, se verifică dacă respectă condiţiile interne. Căutarea continuă până când se găseşte primul element din mulţimea A care îndeplineşte condiţia internă, după care se opreşte. În exemplu, se caută numărul de pe a doua poziţie a permutării, verificându-se dacă al doilea număr din permutare este diferit de primul număr. Se parcurg primele două elemente ale mulţimii A şi se găseşte elementul x 2 =2, după care procesul de căutare se opreşte. PAS3. Se caută al treilea element al soluţiei (x 3 ). Căutarea va folosi acelaşi algoritm de la Pasul 2. În exemplu, se caută numărul din poziţia a treia din permutare. Se găseşte elementul x 3 =3. PAS4. Presupunând că s-au găsit primele k elemente ale soluţiei, x 1, x 2, x 3,, x k, se trece la căutarea celui de al k+1-lea element al soluţiei, x k+1. Căutarea se va face astfel: se atribuie pe rând lui x k+1 elementele mulţimii A, până se găseşte primul element i care îndeplineşte condiţia internă. În exemplu, condiţia internă este ca

8 Informatică 9 numărul din poziţia k+1 a permutării să nu fie egal cu nici unul dintre numerele din poziţiile anterioare lui k+1. Pot să apară două situaţii: a. Există un element i în mulţimea A, astfel încât x k+1 = i să fie element al soluţiei problemei. În acest caz, se atribuie elementului x k+1 al soluţiei valoarea i, după care se verifică dacă s-a găsit soluţia problemei. În exemplu, presupunem că pe nivelul k+1 s-a găsit numărul 4. Se verifică dacă s-au generat toate cele n elemente ale mulţimii S, adică dacă s-au găsit numere pentru toate cele n poziţii din permutare (k=n). Dacă s-a găsit soluţia problemei, atunci se afişează soluţia; altfel, se caută următorul element al soluţiei, reluându-se operaţiile de la Pasul 4. b. S-au parcurs toate elementele mulţimii A şi nu s-a găsit nici un element i care să fie elementul x k+1 al soluţiei problemei. Înseamnă că trebuie să revenim la elementul k al soluţiei x k. Aşadar, se consideră generate primele k-1 elemente ale soluţiei: x 1, x 2,, x k-1 şi, pentru elementul x k al soluţiei, se reia căutarea, cu următorul element din mulţimea A, adică se reiau operaţiile de la Pasul 4 pentru elementul x k al soluţiei, însă nu cu primul element din mulţimea A, ci cu elementul din mulţimea A care se găseşte imediat după cel care a fost atribuit anterior pentru elementul x k al soluţiei. În exemplu, luând în considerare modul în care au fost generate primele k numere ale permutării, în poziţia k+1, orice număr s-ar alege, el mai există pe una dintre cele k poziţii anterioare, şi se revine la elementul k, care presupunem că are valoarea 3. Se generează în această poziţie următorul număr din mulţimea A (4) şi se verifică dacă el nu mai există pe primele k-1 poziţii ale permutării, iar dacă există, se generează următorul element din mulţimea A (5) ş.a.m.d. PAS5. Algoritmul se încheie după ce au fost parcurse toate elementele mulţimii A pentru elementul x 1 al soluţiei. În exemplu, algoritmul se încheie după ce s-au atribuit pe rând valorile 1, 2,, n, elementului de pe prima poziţie a permutării. Generarea tuturor permutărilor mulţimii {1, 2, 3} Au fost parcurse toate elementele mulţimii A pen- tru elementul x 1 al soluţiei. Observaţie. În metoda backtracking, dacă s-a găsit elementul x k al soluţiei, elementului x k+1 al soluţiei i se atribuie o valoare numai dacă mai există o valoare care să îndeplinească condiţia de continuare a construirii soluţiei adică dacă, prin atribuirea acelei valori, se poate ajunge la o soluţie finală pentru care condiţiile interne sunt îndeplinite. Desenaţi diagramele pentru generarea prin metoda backtracking a: Temă a. tuturor aranjamentelor de 2 elemente ale mulţimii {1, 2, 3}; b. tuturor combinărilor de 2 elemente ale mulţimii {1, 2, 3}; c. tuturor permutărilor mulţimii {1, 2, 3, 4} care îndeplinesc condiţia că 1 nu este vecin cu 3, şi 2 nu este vecin cu 4.

9 10 Tehnici de programare Algoritmul metodei backtracking poate fi generalizat pentru orice problemă care îndeplineşte următoarele condiţii: 1. Soluţia problemei poate fi pusă sub forma unui vector S = {x 1, x 2,, x n } ale cărui elemente x i aparţin fiecare unei mulţimi A i, astfel: x 1 A 1, x 2 A 2,, x n A n. 2. Mulţimile A i sunt finite, iar elementele lor sunt numere întregi şi se găsesc într-o ordine bine stabilită. Algoritmul backtracking este următorul: PAS1. Se alege primul element al soluţiei S: x 1 A i. PAS2. Cât timp nu au fost parcurse toate elementele mulţimii A 1 (nu au fost găsite toate soluţiile) execută: PAS3. Pentru fiecare element al soluţiei execută: PAS4. Se presupune că s-au găsit primele k elemente ale soluţiei (x 1, x 2,, x k ) aparţinând mulţimilor A 1, A 2, A 3,, A k şi se trece la căutarea celui de al k+1-lea element al soluţiei, x k+1, printre elementele mulţimii A k+1. Căutarea se va face astfel: se atribuie, pe rând, lui x k+1, elementele mulţimii A k+1, până se găseşte primul element care îndeplineşte condiţia de continuare. PAS5. Dacă există un element a i în mulţimea A k+1, astfel încât x k+1 = a i să aparţină soluţiei problemei, atunci se atribuie elementului x k+1 valoarea a i şi se trece la Pasul 7; altfel, se trece la Pasul 6. PAS6. Deoarece s-au parcurs toate elementele mulţimii A k+1 şi nu s-a găsit nici un element a i care să îndeplinească condiţia de continuare, se revine la elementul x k şi se consideră generate primele k-1 elemente ale soluţiei: x 1, x 2,, x k-1, şi pentru elementul x k se reia căutarea cu următorul element din mulţimea A k, adică se reiau operaţiile de la Pasul 4 pentru elementul x k al soluţiei, însă nu cu primul element din mulţimea A k ci cu elementul din mulţimea A k care se găseşte imediat după cel care a fost atribuit anterior elementului x k. PAS7. Se verifică dacă s-a găsit soluţia problemei, adică dacă s-au găsit toate elementele mulţimii S. Dacă s-a găsit soluţia problemei, atunci se afişează soluţia; altfel, se trece la căutarea următorului element al soluţiei, reluându-se operaţiile de la Pasul Implementarea metodei backtracking Pentru implementarea metodei se folosesc următoarele structuri de date şi subprograme. Date şi structuri de date Pentru a memora elementele x k ale soluţiei se foloseşte o structură de date de tip stivă, care este implementată static printr-un vector st. Pentru vârful stivei se foloseşte variabila k. Când s-a găsit elementul x k al soluţiei, se urcă în stivă, prin incrementarea vârfului cu 1 (k++), pentru a căuta elementul x k+1 al soluţiei, iar pentru a reveni la elementul x k-1 al soluţiei se coboară în stivă prin decrementarea vârfului cu 1 (k--). Iniţial, stiva are dimensiunea 1 (k min =1), corespunzătoare poziţiei de pornire, şi conţine valoarea primului element al soluţiei. Pentru elementul din vârful stivei (care corespunde elementului x k al soluţiei) se va atribui o valoare din mulţimea Ak care poate fi un element al soluţiei: st[k]=a[i]. După parcurgerea completă a mulţimilor Ak, stiva va avea dimensiunea n (k max =n) corespunzătoare numărului

10 Informatică 11 de elemente ale soluţiei. Vârful stivei va fi iniţial 1, la găsirea unei soluţii va avea valoarea n, iar la terminarea algoritmului vârful stivei va avea valoarea 0. Se mai folosesc următoarele variabile de memorie: as pentru a şti dacă pentru elementul x k al soluţiei mai există un succesor, adică dacă mai există un element în mulţimea Ak care ar putea fi elementul x k al soluţiei (este o variabilă logică ce are valoarea 1 true, dacă există succesor; altfel, are valoarea 0 false), ev pentru a şti dacă succesorul găsit respectă condiţia de continuare şi poate fi elementul x k al soluţiei (este o variabilă logică ce are valoarea 1 true, dacă succesorul este element al soluţiei; altfel, are valoarea 0 false) şi n pentru dimensiunea soluţiei (numărul de elemente ale soluţiei, în cazul problemelor în care toate soluţiile au acelaşi număr de elemente). //st=stiva int n,k,ev,as; //k=vârful stivei În cazul problemelor prezentate în studiul de caz, un element x k al soluţiei este format dintr-o singură valoare: numărul din poziţia k (în cazul permutărilor, al aranjamentelor şi al combinărilor), respectiv numărul liniei pe care va fi pusă dama din coloana k. În problemele în care trebuie găsit un traseu, un element x k al soluţiei este format din două valori care reprezintă coordonatele poziţiei în care se face următoarea deplasare. În acest caz, pentru memorarea elementelor x k ale soluţiei se va folosi o stivă dublă: typedef int stiva[100][3]; sau o înregistrare în care cele două câmpuri reprezintă coordonatele deplasării: struct element{int x,y;}; typedef element stiva[100]; Elementele mulţimii Ak vor fi perechi de valori (i,j) şi vor reprezenta coordonatele unei poziţii, iar pentru elementul din vârful stivei se va atribui o valoare, din mulţimea Ak, care poate fi un element al soluţiei, astfel: st[k][1]=i şi st[k][2]=j, respectiv st[k].x=i şi st[k].y=j. Pentru simplificarea implementării, toate aceste date şi structuri de date sunt declarate globale, deoarece valoarea pentru vârful stivei se va transmite mai uşor, între subprograme ca variabilă globală. Subprograme Algoritmul va fi implementat prin: un subprogram care va fi acelaşi pentru toţi algoritmii de rezolvare prin metoda backtracking (parte fixă) şi care descrie strategia generală backtracking şi subprogramele care au aceeaşi semnificaţie pentru toţi algoritmii, dar al căror conţinut diferă de la o problemă la alta, depinzând de condiţiile interne ale soluţiei. Semnificaţia subprogramelor folosite este (se va considera ca exemplu generarea permutărilor mulţimii {1, 2, 3,, n}): Subprogramul init (funcţie procedurală). Se iniţializează elementul din vârful stivei (elementul k). În acest element se va înregistra următorul element al soluţiei. Acest element se iniţializează cu o valoare care nu face parte din mulţimea Ak considerată, urmând ca în următorii paşi ai algoritmului să se atribuie acestui element prima

11 12 Tehnici de programare valoare din mulţimea Ak. În exemplu, nivelul k al stivei se va iniţializa cu valoarea 0 (st[k]=0), urmând ca la pasul următor să i se atribuie ca valoare 1, adică primul număr din mulţimea {1, 2, 3,..., n}. void init() {st[k]=0;} Subprogramul succesor (funcţie operand). Verifică dacă mai există în mulţimea Ak un element pentru nivelul k al soluţiei (un succesor). Dacă mai există un succesor, se trece la următorul element din mulţimea Ak, iar funcţia va returna valoarea 1 (true). Dacă nu mai există un succesor, funcţia va returna valoarea 0 (false). Valoarea returnată de funcţie se va atribui variabilei as. Iniţial, valoarea variabilei de memorie as este 1 (true) se presupune că mai există un succesor. În exemplu, subprogramul succesor va verifica dacă pentru poziţia k din permutare mai există un număr. Dacă numărul i de pe nivelul k este mai mic decât n, poziţiei k i se va atribui numărul următor, i+1, şi funcţia va returna valoarea 1 (true), iar dacă numărul de pe nivelul k este n, înseamnă că pe această poziţie din permutare nu mai poate fi pus nici un număr şi funcţia va returna valoarea 0 (false). int succesor() {if (st[k]<n) {st[k]++; return 1;} Subprogramul valid (funcţie operand). Verifică dacă valoarea atribuită elementului x k al soluţiei îndeplineşte condiţia de continuare, adică poate fi considerată că face parte din soluţia problemei (dacă succesorul găsit este element al soluţiei). Dacă este îndeplinită condiţia (se evaluează expresia prin care este descrisă condiţia), funcţia va returna valoarea 1 (true); altfel, va returna valoarea 0 (false). Valoarea returnată de funcţie se va atribui variabilei ev. Iniţial, valoarea variabilei ev este 0 (false) se presupune că succesorul găsit nu este elementul k al soluţiei. În exemplu, subprogramul valid va verifica dacă numărul din poziţia k nu mai există în cele k-1 poziţii anterioare. Dacă numărul nu îndeplineşte această condiţie, funcţia va returna valoarea 0 (false). int valid() {for (int i=1;i<k;i++) if (st[i]==st[k]) return 0; return 1;} Subprogramul solutie (funcţie operand). Verifică dacă s-au obţinut toate elementele soluţiei. În exemplu, subprogramul solutie va verifica dacă au fost găsite toate cele n elemente ale soluţiei, adică dacă s-au găsit soluţii de aranjare în permutare pentru toate cele n numere. Dacă s-a găsit soluţia, subprogramul întoarce valoarea 1 (true); altfel, întoarce valoarea 0 (false). int solutie() {return k==n;} Subprogramul tipar (funcţie procedurală). Afişează elementele soluţiei. De obicei, afişarea soluţiei constă în afişarea valorilor din stivă. {for (int i=1;i<=n;i++) cout<<st[i]<<" "; cout<<endl;}

12 Informatică 13 Numărul de ordine al elementelor soluţiei Elementele soluţiei n a n1 a n2 a nj a nm x n.. Parcurgerea elementelor se face cu... subprogramul succesor. i a i1 a i2 a ij a im x i.. k=k+1. k=k-1 2 a 21 a 22 a 2j a 2m x 2 1 a 11 a 12 a 1j a 1m x j. m Numărul de ordine al elementelor din mulţimea A k Stiva st[k] Subprogramul valid verifică dacă este element al soluţiei Subprogramul fix poate fi implementat iterativ sau recursiv. Implementarea iterativă void bt() //partea fixă a algoritmului {k=1; //se iniţializează vârful stivei init(); //se iniţializează stiva pentru primul element al soluţiei while (k>0) //cât timp stiva nu s-a golit {as=1; ev=0; while(as &&!ev) // cât timp are succesor şi nu s-a găsit // elementul k al soluţiei {as=succesor(); // se caută succesor if(as) // dacă are succesor, atunci ev=valid();} // se verifică dacă este element al soluţiei // se iese din structura repetitivă while dacă nu mai există // succesor sau dacă s-a găsit elementul soluţiei if(as) // dacă are succesor, atunci if (solutie()) //dacă s-au obţinut toate elementele soluţiei, tipar(); // atunci se afişează elementele soluţiei; _ else {k++; // altfel, se urcă în stivă pentru a înregistra // următorul element al soluţiei init();} // şi se iniţializează stiva pentru // următorul element al soluţiei; else k--;} // altfel, se coboară în stivă pentru a reveni } // la elementul anterior al soluţiei {... bt();... } Implementarea recursivă Prelucrările care se fac pentru elementul k al soluţiei se fac şi pentru elementul k+1 al soluţiei şi aceste prelucrări pot fi apelate pentru elementul k+1 al soluţiei, iar trecerea de la elementul k al soluţiei la elementul k+1 al soluţiei se face prin apelul recursiv al acestor prelucrări. În algoritmul backtracking implementat iterativ, revenirea la nivelul k-1 trebuie să se facă atunci când pe nivelul k nu se găseşte o valoare care să îndeplinească condiţiile interne. În cazul implementării recursive, condiţia de

13 14 Tehnici de programare bază este ca pe nivelul k să nu se găsească o valoare care să îndeplinească condiţiile interne. Când se ajunge la condiţia de bază, încetează apelul recursiv şi se revine la subprogramul apelant, adică la subprogramul în care se prelucrează elementul k-1 al soluţiei, iar în stivă se vor regăsi valorile prelucrate anterior în acest subprogram. Deoarece apelul recursiv se face în funcţie de valoarea vârfului stivei (k), această valoare se va transmite, între subprograme, prin intermediul parametrilor de comunicaţie. void bt(int k) //partea fixă a algoritmului {init(k); //se iniţializează stiva pentru elementul k al soluţiei while(succesor(k)) //cât timp se găseşte succesor pentru elementul k al soluţiei if(valid(k)) dacă succesorul este element al soluţiei if(solutie(k)) //dacă s-au obţinut toate elementele soluţiei, tipar(k); // atunci se afişează elementele soluţiei;_ else bt(k+1); //altfel, se apelează subprogramul pentru a găsi } //elementul k+1 al soluţiei {... bt(1);... } Complexitatea algoritmului metodei backtracking Dacă fiecare soluţie are n elemente şi fiecare mulţime A i din care se alege un element al soluţiei are m elemente, atunci complexitatea algoritmului metodei backtracking este O(card(A 1 ) card(a 2 ) card(a n )) = Q(m m m m) = O(m n ). Dacă numărul de elemente ale mulţimilor A i este diferit şi notăm cu: m min = min(card(a 1 ), card(a 2 ),, card(a n )) m max = max(card(a 1 ), card(a 2 ),, card(a n )) n atunci complexitatea algoritmului va fi cuprinsă între o complexitate minimă O(m min ) şi o n complexitate maximă O(m max ). Rezultă că algoritmul metodei backtracking este un algoritm exponenţial. Având o complexitate exponenţială, metoda backtracking se recomandă numai dacă nu se cunoaşte un algoritm mai eficient Probleme rezolvabile prin metoda backtracking Metoda backtracking este recomandată în cazul problemelor care au următoarele caracteristici: se cere găsirea tuturor soluţiilor posibile; nu se cunoaşte un algoritm mai eficient. Alte exemple de probleme clasice care se pot rezolva folosind metoda backtracking: generarea tuturor elementelor unui produs cartezian; generarea tuturor partiţiilor unui număr natural; generarea tuturor partiţiilor unei mulţimi; generarea tuturor funcţiilor surjective; generarea tuturor funcţiilor injective; generarea tuturor posibilităţilor de plată a unei sume cu bancnote de valori date; generarea tuturor posibilităţilor de acoperire a tablei de şah prin săritura calului (parcurgerea tablei de şah prin săritura calului, fără a se trece de două ori prin aceeaşi poziţie). generarea tuturor posibilităţilor de ieşire dintr-un labirint;

14 Informatică Generarea permutărilor Prin asamblarea subprogramelor definite anterior, programul pentru generarea tuturor permutărilor muţimii {1, 2, 3,, n} va fi: Implementarea iterativă int n,k,ev,as; void init() {st[k]=0;} int succesor() {if (st[k]<n) {st[k]=st[k]+1; return 1;} int valid() {for(int i=1;i<k;i++) if (st[k]==st[i]) return 0; return 1;} int solutie() {return k==n;} {for(int i=1;i<=n;i++) cout<<st[i]<<" "; cout<<endl;} void bt() {k=1; init(); while (k>0) {as=1; ev=0; while(as &&!ev) {as=succesor(); if(as) ev=valid();} if(as) if (solutie()) tipar(); else {k++; init();} else k--;}} {cout<<"n= "; cin>>n; bt();} Implementarea recursivă int n; void init(int k) {st[k]=0;} int succesor(int k) {if (st[k]<n) {st[k]=st[k]+1; return 1;} int valid(int k) {for(int i=1;i<k;i++) if (st[k]==st[i]) return 0; return 1;} int solutie(int k) {return k==n;} {for(int i=1;i<=n;i++) cout<<st[i]<<" "; cout<<endl;} void bt(int k) {init(k); while(succesor(k)) if(valid(k)) if(solutie(k)) tipar(); else bt(k+1);} {cout<<"n= "; cin>>n; bt(1);} Algoritmul de generare a permutărilor poate fi folosit şi în alte probleme. De exemplu, să se genereze toate permutările mulţimii {1, 2, 3,, n} în care nu apar numere consecutive. Această problemă face parte din categoria de probleme de generare a permutărilor cu condiţie soluţia conţine o condiţie internă suplimentară faţă de cea impusă de permutare. În acest exemplu, condiţia suplimentară de continuare a construirii soluţiei este ca numărul ales pentru nivelul k al soluţiei să nu difere printr-o unitate de numărul care se găseşte pe nivelul k-1 al soluţiei. Modificarea apare în subprogramul valid():

15 16 Tehnici de programare int valid() {if (k>1 && abs(st[k]-st[k-1])==1) return 0; for (int i=1;i<k;i++)if (st[i]==st[k]) return 0; return 1;} Scrieţi următoarele programe, în care să folosiţi metoda backtracking pentru Temă generarea tuturor permutărilor. 1. Să se genereze toate permutările unei mulţimi de numere oarecare. Numerele se memorează într-un vector. (Indicaţie. Se permută indicii elementelor din vectorul v, şi în subprogramul tipar() se afişează elementele v[st[i]]). 2. Să se afişeze toate anagramele unui cuvând citit de la tastatură. 3. Să se genereze toate matricele binare pătrate, de dimensiune n, care au un singur element de 1 pe linie şi un singur element de 1 pe coloană. O matrice binară este o matrice ale cărei elemente au valoarea 0 sau 1. Indicaţie. Soluţia are n elemente. Elementul soluţiei x k reprezintă numărul coloanei de pe linia k pe care se găseşte elementul cu valoarea Să se genereze toate funcţiile bijective f : A B, unde card(a)=card(b)=n. 5. Să se genereze toate posibilităţile de aranjare pe o tablă de şah, cu dimensiunea n n, a n ture care să nu se atace între ele. Deoarece tura se poate deplasa numai pe linia sau pe coloana pe care a fost plasată, turele se pot ataca între ele pe linie şi pe coloană. Indicaţie. Se observă că fiecare tură trebuie să fie plasată singură pe o coloană, ca să nu se atace între ele. Soluţia problemei este dată de mulţimea cu n elemente {x 1, x 2,, x n } care se memorează în stivă. Elementul soluţiei x k reprezintă numărul liniei în care se aşază tura din coloana k şi se memorează pe nivelul k al stivei st. Deoarece două ture nu pot fi aşezate pe aceeaşi linie, stiva trebuie să conţină elemente distincte. Problema se reduce la generarea permutărilor mulţimii {1, 2, 3,, n}. Interpretarea soluţiei este: fiecare tură se plasează în coloana k, pe linia st[k]. 6. Să se genereze toate permutările mulţimii {1, 2, 3,, n} în care două numere vecine nu trebuie să fie ambele pare sau ambele impare. Indicaţie. În subprogramul valid() se mai verifică şi condiţia suplimentară de vecinătate. int valid() {if (k>1 && (st[k-1]%2==0 && st[k]%2==0) (st[k-1]%2==1 && st[k]%2==1)) return 0; for (int i=1;i<k;i++) if (st[i]==st[k]) return 0; return 1;} 7. Să se genereze toate permutările mulţimii {1, 3, 5,, 2 n+1}. Indicaţie. Soluţia are n elemente. În subprogramul init() elementul din vârful stivei se iniţializează cu valoarea -1, iar în subprogramul succesor() se modifică modul de determinare a succesorului. int succesor() {if (st[k]<2*n+1) {st[k]= st[k]+2; return 1;} 8. Să se genereze toate permutările unei mulţimi de numere oarecare, astfel încât cea mai mică şi cea mai mare valoare să-şi păstreze poziţiile iniţiale. 9. Într-un şir sunt aranjate n persoane. Să se genereze toate posibilităţile de rearanjare în şir a acestor persoane, astfel încât fiecare persoană din şir: a. să nu aibă în faţa sa aceeaşi persoană pe care a avut-o în şirul iniţial; b. să nu aibă aceiaşi vecini ca în şirul iniţial;

16 Informatică 17 c. să nu aibă în faţa sa persoanele pe care le-a avut în şirul iniţial; d. să fie despărţită de vecinii pe care i-a avut în şirul iniţial de una sau cel mult p persoane; valoarea pentru p se citeşte de la tastatură Generarea produsului cartezian Se generează toate elementele produsului cartezian A 1 A 2 A 3 A n, unde A i ={1, 2,, n i }. O soluţie a problemei va fi un element al produsului cartezian şi va fi formată din n elemente. Un element x k al soluţiei poate fi orice element din mulţimea A k (nu există condiţii interne). Numărul de elemente ale fiecărei mulţimi A i va fi memorat într-un vector m cu lungimea logică n, unde m[i]=n i. Faţă de algoritmul pentru generarea permutărilor, apar următoarele diferenţe: Deoarece fiecare mulţime A k are un număr diferit de elemente, elementul de pe nivelul k are succesor dacă numărul i de pe acest nivel este mai mic decât m[k]. Deoarece nu există condiţii interne, nu există restricţii nici pentru condiţia de continuare, şi subprogramul valid() va furniza valoarea 1. Implementarea iterativă typedef int stiva[10]; int n,k,ev,as,m[10]; void init() {st[k]=0;} int succesor() {if (st[k]<m[k]) {st[k]=st[k]+1; return 1;} int valid() {return 1;} int solutie() {return k==n;} {for(int i=1;i<=n;i++) cout<<st[i]<<" "; cout<<endl;} void bt() {//partea fixă a algoritmului} {cout<<"n= "; cin>>n; for(int i=1;i<=n;i++) {cout<<"nr. de elemente multimea " <<i<<" "; cin>>m[i];} bt();} Implementarea recursivă typedef int stiva[10]; int n; void init(int k) {st[k]=0;} int succesor(int k) {if (st[k]<m[k]) {st[k]=st[k]+1; return 1;} int valid(int k) {return 1;} int solutie(int k) {return k==n;} {for(int i=1;i<=n;i++) cout<<st[i]<<" "; cout<<endl;} void bt(int k) {//partea fixă a algoritmului} {cout<<"n= "; cin>>n; for(int i=1;i<=n;i++) {cout<<"nr. de elemente multimea " <<i<<" "; cin>>m[i];} bt(1);} Algoritmul de generare a produsului cartezian poate fi folosit şi în alte probleme. De exemplu, pentru generarea tuturor submulţimilor unei mulţimi.

17 18 Tehnici de programare O submulţime este formată din elemente ale mulţimii A. Pentru simplificarea algoritmului, vom considera mulţimea A={1,2,3,,n}. Considerăm mulţimea B={0,1}. Pentru construirea submulţimilor, pentru fiecare submulţime se defineşte funcţia f:a B, astfel: dacă elementul i din mulţimea A aparţine submulţimii, atunci f(i)=1; altfel, f(i)=0. Problema se reduce la generarea produsului cartezian B n. Soluţia va fi memorată în stivă şi va avea n elemente, fiecare element k al soluţiei având valoarea 0 sau 1, cu semnificaţia că elementul k din mulţimea A aparţine, respectiv nu aparţine submulţimii. Alăturat, sunt prezentate toate submulţimile mulţimii {1,2,3} şi conţinutul stivei pentru fiecare dintre ele. Submulţimile {}= {3} {2} {2, 3} {1} {1,3} {1,2} {1,2,3} Stiva Faţă de programul anterior, apar următoarele modificări: Deoarece mulţimile produsului cartezian sunt identice (B={0,1}), s-au modificat: subprogramul init() iniţializarea nivelului k al stivei se face cu valoarea -1, cu 1 mai mic decât 0 şi subprogramul succesor() elementul are succesor numai dacă este mai mic decât ultimul element din mulţime, 1. În subprogramul de afişare a soluţiei, va fi afişat numărul nivelului i pentru care, în stivă, se memorează valoarea 1. Implementarea iterativă int n,k,ev,as; void init() {st[k]=-1;} int succesor() {if (st[k]<1) {st[k]=st[k]+1; return 1;} int valid() {return 1;} int solutie() {return k==n;} void tipar () {int i,x=0; cout<<"{"; for (i=1;i<=n;i++) if (st[i]==1) {cout<<i<<","; x=1;} if (x) cout<<'\b'; cout<<"}"<<endl;} void bt() {//partea fixă a algoritmului} {cout<<"n= "; cin>>n; bt();} Implementarea recursivă int n; void init (int k) {st[k]=0;} int succesor(int k) {if (st[k]<st[k-1]+1) {st[k]=st[k]+1;return 1;} int valid() {return 1;} int solutie(int k) {return k==n;} {int i,x=0; cout<<"{"; for (i=1;i<=n;i++) if (st[i]==1) {cout<<i<<","; x=1;} if (x) cout<<'\b'; cout<<"}"<<endl;} cout<<endl;} void bt(int k) {//partea fixă a algoritmului} {cout<<"n= "; cin>>n; bt(1);} Observaţie. Caracterul escape '\b' este caracterul Backspace (şterge ultimul caracter din şir)

18 Informatică 19 Scrieţi următoarele programe, în care să folosiţi metoda backtracking pentru Temă generarea produsului cartezian. 1. Se consideră n mulţimi de cuvinte A i, fiecare mulţime având n i cuvinte. Să se genereze toate textele de n cuvinte care se pot forma cu cuvintele din aceste mulţimi, cuvântul i din text aparţinând mulţimii A i. 2. Într-un restaurant, un meniu este format din trei feluri de mâncare. Există patru preparate culinare pentru felul unu, cinci preparate culinare pentru felul doi şi trei preparate culinare pentru felul 3. Să se genereze toate meniurile care se pot forma cu aceste preparate culinare. 3. Într-un restaurant, un meniu este format din trei feluri de mâncare. Există patru preparate culinare pentru felul unu, cinci preparate culinare pentru felul doi şi trei preparate culinare pentru felul 3. Fiecare preparat culinar are un preţ şi un număr de calorii. Să se genereze toate meniurile pe care le poate comanda o persoană, care să nu depăşească suma s şi numărul de calorii c. Datele se citesc dintr-un fişier text, astfel: de pe primul rând suma s şi numărul de calorii, de pe rândul următor, în ordine, preţul fiecărui preparat culinar, şi de pe ultimul rând, în aceeaşi ordine, caloriile fiecărui preparat culinar. 4. Pentru o mulţime oarecare A, cu n elemente, să se genereze toate submulţimile care au suma elementelor egală cu s. Numărul de elemente ale mulţimii, elementele mulţimii A şi valoarea pentru suma s se citesc de la tastatură. 5. Să se afişeze toate numerele cu n cifre (1 n 10) care au proprietatea că sunt formate numai din cifre pare, în ordine descrescătoare. 6. Să se afişeze toate numerele formate din cifre distincte cu proprietatea că suma cifrelor este S. Valoarea variabilei S se citeşte de la tastatură. 7. Să se afişeze toate secvenţele de n litere (n număr natural par, citit de la tastatură) din mulţimea {A,B,C,D}, secvenţe care se construiesc astfel: nu se aşază două litere identice una lângă alta şi trebuie să se folosească exact n/2 litere A. 8. Se citesc de la tastatură un număr natural n (0<n 10) şi apoi n numere naturale a 1, a 2, a 3,..., a n. Să se afişeze pe ecran toate posibilităţile de a intercala între toate cele n numere operatorii + şi - astfel încât, evaluând expresia obţinută, de la stânga la dreapta, la fiecare pas, rezultatul obţinut să fie strict pozitiv. 9. Să se rezolve în mulţimea numerelor naturale ecuaţia 4x+3y+2xy=48. Indicaţie. Soluţia are 2 elemente: x şi y. Ele pot lua valori în intervalul [0,16]. Limita inferioară a intervalului este 0, pentru că numerele sunt naturale. Limita superioară s-a determinat considerând, pe rând, situaţiile limită x=0 şi y=0. Considerăm mulţimea A={0,2,3,,16}. Problema se reduce la generarea produsului cartezian cu condiţie A A soluţia conţine o condiţie internă suplimentară: elementele ei trebuie să verifice ecuaţia. 10. Se citesc n cifre distincte şi un număr natural x. Să se genereze toate numerele care se pot forma cu aceste cifre şi sunt mai mici decât numărul x. De exemplu, pentru cifrele 0, 1 şi 3 şi numărul x=157, se generează 1, 3, 10, 11, 13, 30, 31, 33, 100, 101, 103, 110, 111, 113, 130, 131, 133. Indicaţie. Se calculează numărul de cifre m ale numărului x. Pentru mulţimea A formată din cele n cifre, se generează produsele carteziene A p, cu 1 p m. Elementele produsului cartezian sunt cifrele numărului care se formează. Pentru ca un element al produsului cartezian să fie soluţie, trebuie ca primul element să fie diferit de 0 (cifra cea mai semnificativă din număr nu trebuie să fie 0), iar numărul format cu m cifre să fie mai mic decât numărul x. 11. Să se genereze toate numerele naturale, cu cel mult n cifre (n 10), care sunt formate numai din cifre pare, în ordine strict crescătoare.

19 20 Tehnici de programare 12. Să se genereze toate numerele naturale, cu n cifre, care conţin p cifre k. Valorile pentru n, p şi k se citesc de la tastatură. 13. Se citeşte un număr natural n. Să se genereze toate numerele naturale care, reprezentate în baza 2, au acelaşi număr de cifre de 0 şi acelaşi număr de cifre de 1 ca şi reprezentarea în baza 2 a numărului n. 14. Pe un bilet există 12 poziţii care pot fi perforate, aranjate pe 4 linii şi 3 coloane. Să se genereze toate posibilităţile de perforare a celor 12 poziţii, astfel încât să nu existe două poziţii alăturate neperforate. Indicaţie. Considerăm mulţimea A, formată din 12 elemente, fiecare element reprezentând o poziţie care poate fi perforată, şi mulţimea B={0,1}. Se defineşte funcţia f:a B astfel: dacă poziţia i este perforată, atunci f(i)=1; altfel, f(i)=0. Problema se reduce la generarea produsului cartezian B 12 soluţia conţine o condiţie internă suplimentară: poziţia k care se adaugă, nu trebuie să fie neperforată (nu trebuie să aibă valoarea 0) dacă poziţia k-1 sau poziţia k-3 este neperforată (are valoarea 0) Generarea aranjamentelor Se generează toate aranjamentele de m elemente ale mulţimii {1, 2, 3,, n}. O soluţie a problemei va fi un aranjament şi va avea m elemente. Faţă de algoritmul pentru generarea permutărilor, se modifică doar condiţia prin care se verifică dacă s-au obţinut toate elementele soluţiei. Implementarea iterativă int n,m,k,ev,as; void init() {st[k]=0;} int succesor() {if (st[k]<n) {st[k]=st[k]+1; return 1;} int valid() {for(int i=1;i<k;i++) if (st[k]==st[i]) return 0; return 1;} int solutie() {return k==m;} {for(int i=1;i<=m;i++) cout<<st[i]<<" "; cout<<endl;} void bt() {//partea fixă a algoritmului} {cout<<"n= "; cin>>n; cout<<"m= "; cin>>m; bt();} Implementarea recursivă int n,m; void init(int k) {st[k]=0;} int succesor(int k) {if (st[k]<n) {st[k]=st[k]+1; return 1;} int valid(int k) {for(int i=1;i<k;i++) if (st[k]==st[i]) return 0; return 1;} int solutie(int k) {return k==m;} {for(int i=1;i<=m;i++) cout<<st[i]<<" "; cout<<endl;} void bt(int k) {//partea fixă a algoritmului} {cout<<"n= "; cin>>n; cout<<"m= "; cin>>m; bt(1);}

20 Informatică 21 Algoritmul de generare a aranjamentelor poate fi folosit şi în alte probleme. De exemplu, pentru generarea tuturor funcţiilor injective. Se generează toate funcţiile injective f:a B, unde card(a)=m şi card(b)=n. Pentru simplificarea algoritmului vom considera mulţimile A={1,2,3,,m} şi B={1,2,3,,n}. O soluţie este formată din m elemente. Elementul k al soluţiei reprezintă valoarea funcţiei f(k). Deoarece valoarea funcţiei f(k) aparţine mulţimii B, în stivă se vor genera numere din mulţimea {1,2,3,,n}. Din definiţia funcţiei injective, f(i) f(j), pentru orice i j. Rezultă că, pentru ca funcţia să fie injectivă, trebuie ca m n. Problema se reduce la generarea în stivă a tuturor aranjamentelor de n elemente luate câte m. Soluţiile vor fi afişate sub forma tabelului de variaţie al funcţiei. De exemplu, dacă A={1,2} şi B={1,2,3}, soluţiile şi modul în care vor fi afişate sunt prezentate alăturat. Faţă de programul anterior, nu se va modifica decât subprogramul de afişare a soluţiilor tipar(). Soluţia Afişarea 1 2 x 1 2 f(x) x 1 2 f(x) x 1 2 f(x) x 1 2 f(x) x 1 2 f(x) x 1 2 f(x) 3 2 {int i; cout<<" x "; for (i=1;i<=m;i++) cout<<i<<" "; cout<<endl; for (i=1;i<=m;i++) cout<<"-----"; cout<<endl<<"f(x) "; for (i=1;i<=m;i++) cout<<st[i]<<" "; cout<<endl<<endl;}... {cout<<"numarul de elemente ale multimii A= "; cin>>m; cout<<"numarul de elemente ale multimii B= "; cin>>n; bt();} Scrieţi următoarele programe, în care să folosiţi metoda backtracking pentru Temă generarea tuturor aranjamentelor. 1. Să se genereze toate posibilităţile de aranjare pe m scaune a n persoane (m n). Valorile pentru n şi m şi numele persoanelor se citesc dintr-un fişier text. 2. Se citesc de la tastatură n cifre distincte. Să se genereze toate numerele de m cifre (m n) care se pot forma cu aceste cifre şi care conţin toate cele n cifre. 3. Să se genereze toate anagramele unui cuvânt, din care se elimină p litere oarecare. Valoarea minimă a numărului p este 1, iar valoarea maximă este cu 1 mai mică decât lungimea cuvântului. Se citesc de la tastatură cuvântul şi valoarea numărului p. 4. Se citesc de la tastatură n caractere distincte. Să se genereze toate cuvintele de m caractere (m n) care se pot forma cu aceste caractere şi care conţin toate cele n caractere. 5. Se citeşte un număr n care are m cifre. Să se genereze toate numerele, cu cel mult m cifre, care se pot forma cu cifrele numărului iniţial. 6. Dintr-o mulţime de n persoane, aranjate într-un şir, se elimină p persoane. Să se genereze toate posibilităţile de aranjare într-un şir a persoanelor rămase, astfel încât fiecare persoană să nu aibă aceiaşi vecini ca în şirul iniţial. Valorile pentru n şi p se citesc de la tastatură. 7. Să se genereze toate aranjamentele, de m numere, ale unei mulţimi de n numere oarecare astfel încât suma elementelor generate să fie egală cu s. Numărul de elemente ale mulţimii, n, elementele mulţimii, valoarile pentru m şi pentru suma s, se citesc de la tastatură. 8. Să se genereze toate drapelele cu trei culori care se pot forma cu şase culori: alb, galben, roşu, verde, albastru şi negru, care au în mijloc culoarea alb, verde sau roşu. Indicaţie. Soluţia are 3 elemente, un element al soluţiei fiind indicele din vector al unei

Metode iterative pentru probleme neliniare - contractii

Metode iterative pentru probleme neliniare - contractii Metode iterative pentru probleme neliniare - contractii Problemele neliniare sunt in general rezolvate prin metode iterative si analiza convergentei acestor metode este o problema importanta. 1 Contractii

Διαβάστε περισσότερα

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1 Functii definitie proprietati grafic functii elementare A. Definitii proprietatile functiilor. Fiind date doua multimi X si Y spunem ca am definit o functie (aplicatie) pe X cu valori in Y daca fiecarui

Διαβάστε περισσότερα

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile Metode de Optimizare Curs V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile Propoziţie 7. (Fritz-John). Fie X o submulţime deschisă a lui R n, f:x R o funcţie de clasă C şi ϕ = (ϕ,ϕ

Διαβάστε περισσότερα

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a. Definiţie Spunem că: i) funcţia f are derivată parţială în punctul a în raport cu variabila i dacă funcţia de o variabilă ( ) are derivată în punctul a în sens obişnuit (ca funcţie reală de o variabilă

Διαβάστε περισσότερα

Esalonul Redus pe Linii (ERL). Subspatii.

Esalonul Redus pe Linii (ERL). Subspatii. Seminarul 1 Esalonul Redus pe Linii (ERL). Subspatii. 1.1 Breviar teoretic 1.1.1 Esalonul Redus pe Linii (ERL) Definitia 1. O matrice A L R mxn este in forma de Esalon Redus pe Linii (ERL), daca indeplineste

Διαβάστε περισσότερα

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor. Fiind date doua multimi si spunem ca am definit o functie (aplicatie) pe cu valori in daca fiecarui element

Διαβάστε περισσότερα

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate. Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Fie p, q N. Fie funcţia f : D R p R q. Avem următoarele

Διαβάστε περισσότερα

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE. 5 Eerciţii reolvate 5 UNCŢII IMPLICITE EXTREME CONDIŢIONATE Eerciţiul 5 Să se determine şi dacă () este o funcţie definită implicit de ecuaţia ( + ) ( + ) + Soluţie ie ( ) ( + ) ( + ) + ( )R Evident este

Διαβάστε περισσότερα

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale. 5p Determinați primul termen al progresiei geometrice ( b n ) n, știind că b 5 = 48 și b 8 = 84 5p Se consideră funcția f : intersecție a graficului funcției f cu aa O R R, f ( ) = 7+ 6 Determinați distanța

Διαβάστε περισσότερα

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică Gh. Asachi Curs 14 Funcţii implicite Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Fie F : D R 2 R o funcţie de două variabile şi fie ecuaţia F (x, y) = 0. (1) Problemă În ce condiţii ecuaţia

Διαβάστε περισσότερα

Sisteme diferenţiale liniare de ordinul 1

Sisteme diferenţiale liniare de ordinul 1 1 Metoda eliminării 2 Cazul valorilor proprii reale Cazul valorilor proprii nereale 3 Catedra de Matematică 2011 Forma generală a unui sistem liniar Considerăm sistemul y 1 (x) = a 11y 1 (x) + a 12 y 2

Διαβάστε περισσότερα

MARCAREA REZISTOARELOR

MARCAREA REZISTOARELOR 1.2. MARCAREA REZISTOARELOR 1.2.1 MARCARE DIRECTĂ PRIN COD ALFANUMERIC. Acest cod este format din una sau mai multe cifre şi o literă. Litera poate fi plasată după grupul de cifre (situaţie în care valoarea

Διαβάστε περισσότερα

Metode de interpolare bazate pe diferenţe divizate

Metode de interpolare bazate pe diferenţe divizate Metode de interpolare bazate pe diferenţe divizate Radu Trîmbiţaş 4 octombrie 2005 1 Forma Newton a polinomului de interpolare Lagrange Algoritmul nostru se bazează pe forma Newton a polinomului de interpolare

Διαβάστε περισσότερα

Subiecte Clasa a VIII-a

Subiecte Clasa a VIII-a Subiecte lasa a VIII-a (40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate pe foaia de raspuns in dreptul

Διαβάστε περισσότερα

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu INTRODUCERE Laborator 1: ÎN ALGORITMI Întocmit de: Claudia Pârloagă Îndrumător: Asist. Drd. Gabriel Danciu I. NOŢIUNI TEORETICE A. Sortarea prin selecţie Date de intrare: un şir A, de date Date de ieşire:

Διαβάστε περισσότερα

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare 1 Planul în spaţiu Ecuaţia generală Plane paralele Unghi diedru 2 Ecuaţia generală Plane paralele Unghi diedru Fie reperul R(O, i, j, k ) în spaţiu. Numim normala a unui plan, un vector perpendicular pe

Διαβάστε περισσότερα

Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera

Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera Cuprins Scheme de algoritmi Divide et impera Exemplificare

Διαβάστε περισσότερα

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice Teme de implementare in Matlab pentru Laboratorul de Metode Numerice As. Ruxandra Barbulescu Septembrie 2017 Orice nelamurire asupra enunturilor/implementarilor se rezolva in cadrul laboratorului de MN,

Διαβάστε περισσότερα

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005. SUBIECTUL Editia a VI-a 6 februarie 005 CLASA a V-a Fie A = x N 005 x 007 si B = y N y 003 005 3 3 a) Specificati cel mai mic element al multimii A si cel mai mare element al multimii B. b)stabiliti care

Διαβάστε περισσότερα

Laborator 11. Mulţimi Julia. Temă

Laborator 11. Mulţimi Julia. Temă Laborator 11 Mulţimi Julia. Temă 1. Clasa JuliaGreen. Să considerăm clasa JuliaGreen dată de exemplu la curs pentru metoda locului final şi să schimbăm numărul de iteraţii nriter = 100 în nriter = 101.

Διαβάστε περισσότερα

Subiecte Clasa a VII-a

Subiecte Clasa a VII-a lasa a VII Lumina Math Intrebari Subiecte lasa a VII-a (40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate

Διαβάστε περισσότερα

Curs 4 Serii de numere reale

Curs 4 Serii de numere reale Curs 4 Serii de numere reale Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Criteriul rădăcinii sau Criteriul lui Cauchy Teoremă (Criteriul rădăcinii) Fie x n o serie cu termeni

Διαβάστε περισσότερα

Asupra unei inegalităţi date la barajul OBMJ 2006

Asupra unei inegalităţi date la barajul OBMJ 2006 Asupra unei inegalităţi date la barajul OBMJ 006 Mircea Lascu şi Cezar Lupu La cel de-al cincilea baraj de Juniori din data de 0 mai 006 a fost dată următoarea inegalitate: Fie x, y, z trei numere reale

Διαβάστε περισσότερα

Curs 1 Şiruri de numere reale

Curs 1 Şiruri de numere reale Bibliografie G. Chiorescu, Analiză matematică. Teorie şi probleme. Calcul diferenţial, Editura PIM, Iaşi, 2006. R. Luca-Tudorache, Analiză matematică, Editura Tehnopress, Iaşi, 2005. M. Nicolescu, N. Roşculeţ,

Διαβάστε περισσότερα

Criptosisteme cu cheie publică III

Criptosisteme cu cheie publică III Criptosisteme cu cheie publică III Anul II Aprilie 2017 Problema rucsacului ( knapsack problem ) Considerăm un număr natural V > 0 şi o mulţime finită de numere naturale pozitive {v 0, v 1,..., v k 1 }.

Διαβάστε περισσότερα

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă. III. Serii absolut convergente. Serii semiconvergente. Definiţie. O serie a n se numeşte: i) absolut convergentă dacă seria modulelor a n este convergentă; ii) semiconvergentă dacă este convergentă iar

Διαβάστε περισσότερα

Examen AG. Student:... Grupa:... ianuarie 2011

Examen AG. Student:... Grupa:... ianuarie 2011 Problema 1. Pentru ce valori ale lui n,m N (n,m 1) graful K n,m este eulerian? Problema 2. Să se construiască o funcţie care să recunoască un graf P 3 -free. La intrare aceasta va primi un graf G = ({1,...,n},E)

Διαβάστε περισσότερα

Seminar 5 Analiza stabilității sistemelor liniare

Seminar 5 Analiza stabilității sistemelor liniare Seminar 5 Analiza stabilității sistemelor liniare Noțiuni teoretice Criteriul Hurwitz de analiză a stabilității sistemelor liniare În cazul sistemelor liniare, stabilitatea este o condiție de localizare

Διαβάστε περισσότερα

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE ABSTRACT. Materialul prezintă o modalitate de a afla distanţa dintre două drepte necoplanare folosind volumul tetraedrului. Lecţia se adresează clasei a VIII-a Data:

Διαβάστε περισσότερα

Toate subiectele sunt obligatorii. Timpul de lucru efectiv este de 3 ore. Se acordă din oficiu 10 puncte. SUBIECTUL I.

Toate subiectele sunt obligatorii. Timpul de lucru efectiv este de 3 ore. Se acordă din oficiu 10 puncte. SUBIECTUL I. Modelul 4 Se acordă din oficiu puncte.. Fie numărul complex z = i. Calculaţi (z ) 25. 2. Dacă x şi x 2 sunt rădăcinile ecuaţiei x 2 9x+8 =, atunci să se calculeze x2 +x2 2 x x 2. 3. Rezolvaţi în mulţimea

Διαβάστε περισσότερα

Laborator 6. Integrarea ecuaţiilor diferenţiale

Laborator 6. Integrarea ecuaţiilor diferenţiale Laborator 6 Integrarea ecuaţiilor diferenţiale Responsabili: 1. Surdu Cristina(anacristinasurdu@gmail.com) 2. Ştirbăţ Bogdan(bogdanstirbat@yahoo.com) Obiective În urma parcurgerii acestui laborator elevul

Διαβάστε περισσότερα

Integrala nedefinită (primitive)

Integrala nedefinită (primitive) nedefinita nedefinită (primitive) nedefinita 2 nedefinita februarie 20 nedefinita.tabelul primitivelor Definiţia Fie f : J R, J R un interval. Funcţia F : J R se numeşte primitivă sau antiderivată a funcţiei

Διαβάστε περισσότερα

Subiectul III (30 de puncte) - Varianta 001

Subiectul III (30 de puncte) - Varianta 001 (30 de puncte) - Varianta 001 1. Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate.

Διαβάστε περισσότερα

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0 Facultatea de Hidrotehnică, Geodezie şi Ingineria Mediului Matematici Superioare, Semestrul I, Lector dr. Lucian MATICIUC SEMINAR 4 Funcţii de mai multe variabile continuare). Să se arate că funcţia z,

Διαβάστε περισσότερα

Examen AG. Student:... Grupa: ianuarie 2016

Examen AG. Student:... Grupa: ianuarie 2016 16-17 ianuarie 2016 Problema 1. Se consideră graful G = pk n (p, n N, p 2, n 3). Unul din vârfurile lui G se uneşte cu câte un vârf din fiecare graf complet care nu-l conţine, obţinându-se un graf conex

Διαβάστε περισσότερα

Metode de sortare. Se dau n numere întregi, elemente ale unui vector a. Se cere să se aranjeze elementele vectorului a în ordine crescătoare.

Metode de sortare. Se dau n numere întregi, elemente ale unui vector a. Se cere să se aranjeze elementele vectorului a în ordine crescătoare. Metode de sortare Se dau n numere întregi, elemente ale unui vector a. Se cere să se aranjeze elementele vectorului a în ordine crescătoare. 1. Sortare prin selecţie directă Sortarea prin selecţia minimului

Διαβάστε περισσότερα

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0 SERII NUMERICE Definiţia 3.1. Fie ( ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0 şirul definit prin: s n0 = 0, s n0 +1 = 0 + 0 +1, s n0 +2 = 0 + 0 +1 + 0 +2,.......................................

Διαβάστε περισσότερα

III. Reprezentarea informaţiei în sistemele de calcul

III. Reprezentarea informaţiei în sistemele de calcul Metode Numerice Curs 3 III. Reprezentarea informaţiei în sistemele de calcul III.1. Reprezentarea internă a numerelor întregi III. 1.1. Reprezentarea internă a numerelor întregi fără semn (pozitive) Reprezentarea

Διαβάστε περισσότερα

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM Seminar S ANALA ÎN CUENT CONTNUU A SCHEMELO ELECTONCE S. ntroducere Pentru a analiza în curent continuu o schemă electronică,

Διαβάστε περισσότερα

Să se arate că n este număr par. Dan Nedeianu

Să se arate că n este număr par. Dan Nedeianu Primul test de selecție pentru juniori I. Să se determine numerele prime p, q, r cu proprietatea că 1 p + 1 q + 1 r 1. Fie ABCD un patrulater convex cu m( BCD) = 10, m( CBA) = 45, m( CBD) = 15 și m( CAB)

Διαβάστε περισσότερα

Matrice. Determinanti. Sisteme liniare

Matrice. Determinanti. Sisteme liniare Matrice 1 Matrice Adunarea matricelor Înmulţirea cu scalar. Produsul 2 Proprietăţi ale determinanţilor Rangul unei matrice 3 neomogene omogene Metoda lui Gauss (Metoda eliminării) Notiunea de matrice Matrice

Διαβάστε περισσότερα

Subiecte Clasa a V-a

Subiecte Clasa a V-a (40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate pe foaia de raspuns in dreptul numarului intrebarii

Διαβάστε περισσότερα

Functii Breviar teoretic 8 ianuarie ianuarie 2011

Functii Breviar teoretic 8 ianuarie ianuarie 2011 Functii Breviar teoretic 8 ianuarie 011 15 ianuarie 011 I Fie I, interval si f : I 1) a) functia f este (strict) crescatoare pe I daca x, y I, x< y ( f( x) < f( y)), f( x) f( y) b) functia f este (strict)

Διαβάστε περισσότερα

Principiul incluziunii si excluziunii. Generarea şi ordonarea permutărilor. Principiul porumbeilor. Pri

Principiul incluziunii si excluziunii. Generarea şi ordonarea permutărilor. Principiul porumbeilor. Pri Generarea şi ordonarea permutărilor. Principiul porumbeilor. Principiul incluziunii si excluziunii Recapitulare din cursul trecut Presupunem că A este o mulţime cu n elemente. Recapitulare din cursul trecut

Διαβάστε περισσότερα

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea Serii Laurent Definitie. Se numeste serie Laurent o serie de forma Seria n= (z z 0 ) n regulata (tayloriana) = (z z n= 0 ) + n se numeste partea principala iar seria se numeste partea Sa presupunem ca,

Διαβάστε περισσότερα

EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă

EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă Coordonatori DANA HEUBERGER NICOLAE MUŞUROIA Nicolae Muşuroia Gheorghe Boroica Vasile Pop Dana Heuberger Florin Bojor MATEMATICĂ DE EXCELENŢĂ pentru concursuri, olimpiade şi centre de excelenţă Clasa a

Διαβάστε περισσότερα

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Algebră (1)

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Algebră (1) Universitatea din ucureşti.7.4 Facultatea de Matematică şi Informatică oncursul de admitere iulie 4 omeniul de licenţă alculatoare şi Tehnologia Informaţiei lgebră (). Fie x,y astfel încât x+y = şi x +

Διαβάστε περισσότερα

riptografie şi Securitate

riptografie şi Securitate riptografie şi Securitate - Prelegerea 12 - Scheme de criptare CCA sigure Adela Georgescu, Ruxandra F. Olimid Facultatea de Matematică şi Informatică Universitatea din Bucureşti Cuprins 1. Schemă de criptare

Διαβάστε περισσότερα

a. 11 % b. 12 % c. 13 % d. 14 %

a. 11 % b. 12 % c. 13 % d. 14 % 1. Un motor termic funcţionează după ciclul termodinamic reprezentat în sistemul de coordonate V-T în figura alăturată. Motorul termic utilizează ca substanţă de lucru un mol de gaz ideal având exponentul

Διαβάστε περισσότερα

Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane

Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane Subspatii ane Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane Oana Constantinescu Oana Constantinescu Lectia VI Subspatii ane Table of Contents 1 Structura de spatiu an E 3 2 Subspatii

Διαβάστε περισσότερα

Algoritmica grafurilor XI. Cuplaje in grafuri. Masuri de calitate. Numere Ramsey

Algoritmica grafurilor XI. Cuplaje in grafuri. Masuri de calitate. Numere Ramsey Algoritmica grafurilor XI. Cuplaje in grafuri. Masuri de calitate. Numere Ramsey Mihai Suciu Facultatea de Matematică și Informatică (UBB) Departamentul de Informatică Mai, 16, 2018 Mihai Suciu (UBB) Algoritmica

Διαβάστε περισσότερα

Sisteme liniare - metode directe

Sisteme liniare - metode directe Sisteme liniare - metode directe Radu T. Trîmbiţaş 27 martie 2016 1 Eliminare gaussiană Să considerăm sistemul liniar cu n ecuaţii şi n necunoscute Ax = b, (1) unde A K n n, b K n 1 sunt date, iar x K

Διαβάστε περισσότερα

Sortare. 29 martie Utilizarea şi programarea calculatoarelor. Curs 16

Sortare. 29 martie Utilizarea şi programarea calculatoarelor. Curs 16 Sortare 29 martie 2005 Sortare 2 Sortarea. Generalitǎţi Sortarea = aranjarea unei liste de obiecte dupǎ o relaţie de ordine datǎ (ex.: pentru numere, ordine lexicograficǎ pt. şiruri, etc.) una din clasele

Διαβάστε περισσότερα

Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare

Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R În cele ce urmează, vom studia unele proprietăţi ale mulţimilor din R. Astfel, vom caracteriza locul" unui punct în cadrul unei mulţimi (în limba

Διαβάστε περισσότερα

prin egalizarea histogramei

prin egalizarea histogramei Lucrarea 4 Îmbunătăţirea imaginilor prin egalizarea histogramei BREVIAR TEORETIC Tehnicile de îmbunătăţire a imaginilor bazate pe calculul histogramei modifică histograma astfel încât aceasta să aibă o

Διαβάστε περισσότερα

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy Metode Runge-Kutta Radu T. Trîmbiţaş 8 ianuarie 7 Probleme scalare, pas constant Dorim să aproximăm soluţia problemei Cauchy y (t) = f(t, y), a t b, y(a) = α. pe o grilă uniformă de (N + )-puncte din [a,

Διαβάστε περισσότερα

5.4. MULTIPLEXOARE A 0 A 1 A 2

5.4. MULTIPLEXOARE A 0 A 1 A 2 5.4. MULTIPLEXOARE Multiplexoarele (MUX) sunt circuite logice combinaţionale cu m intrări şi o singură ieşire, care permit transferul datelor de la una din intrări spre ieşirea unică. Selecţia intrării

Διαβάστε περισσότερα

Tablouri unidimensionale

Tablouri unidimensionale Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n=1723237 Cifre = {1,2,3,7 Se cere să se utilizeze subprograme care să comunice între ele şi

Διαβάστε περισσότερα

Concurs MATE-INFO UBB, 1 aprilie 2017 Proba scrisă la MATEMATICĂ

Concurs MATE-INFO UBB, 1 aprilie 2017 Proba scrisă la MATEMATICĂ UNIVERSITATEA BABEŞ-BOLYAI CLUJ-NAPOCA FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ Concurs MATE-INFO UBB, aprilie 7 Proba scrisă la MATEMATICĂ SUBIECTUL I (3 puncte) ) (5 puncte) Fie matricele A = 3 4 9 8

Διαβάστε περισσότερα

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Aplicaţii ale principiului I al termodinamicii la gazul ideal Aplicaţii ale principiului I al termodinamicii la gazul ideal Principiul I al termodinamicii exprimă legea conservării şi energiei dintr-o formă în alta şi se exprimă prin relaţia: ΔUQ-L, unde: ΔU-variaţia

Διαβάστε περισσότερα

FLUXURI MAXIME ÎN REŢELE DE TRANSPORT. x 4

FLUXURI MAXIME ÎN REŢELE DE TRANSPORT. x 4 FLUXURI MAXIME ÎN REŢELE DE TRANSPORT Se numeşte reţea de transport un graf în care fiecărui arc îi este asociat capacitatea arcului şi în care eistă un singur punct de intrare şi un singur punct de ieşire.

Διαβάστε περισσότερα

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor Facultatea de Matematică Calcul Integral şi Elemente de Analiă Complexă, Semestrul I Lector dr. Lucian MATICIUC Seminariile 9 20 Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reiduurilor.

Διαβάστε περισσότερα

Noţiuni introductive

Noţiuni introductive Metode Numerice Noţiuni introductive Erori. Condiţionare numerică. Stabilitatea algoritmilor. Complexitatea algoritmilor. Metodele numerice reprezintă tehnici prin care problemele matematice sunt reformulate

Διαβάστε περισσότερα

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1) Ecuatii exponentiale Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. Cea mai simpla ecuatie exponentiala este de forma a x = b, () unde a >, a. Afirmatia.

Διαβάστε περισσότερα

2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER 2. Circuite logice 2.4. Decodoare. Multiplexoare Copyright Paul GASNER Definiţii Un decodor pe n bits are n intrări şi 2 n ieşiri; cele n intrări reprezintă un număr binar care determină în mod unic care

Διαβάστε περισσότερα

Spatii liniare. Exemple Subspaţiu liniar Acoperire (înfăşurătoare) liniară. Mulţime infinită liniar independentă

Spatii liniare. Exemple Subspaţiu liniar Acoperire (înfăşurătoare) liniară. Mulţime infinită liniar independentă Noţiunea de spaţiu liniar 1 Noţiunea de spaţiu liniar Exemple Subspaţiu liniar Acoperire (înfăşurătoare) liniară 2 Mulţime infinită liniar independentă 3 Schimbarea coordonatelor unui vector la o schimbare

Διαβάστε περισσότερα

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice 1 Conice pe ecuaţii reduse 2 Conice pe ecuaţii reduse Definiţie Numim conica locul geometric al punctelor din plan pentru care raportul distantelor la un punct fix F şi la o dreaptă fixă (D) este o constantă

Διαβάστε περισσότερα

CONCURSUL DE MATEMATICĂ APLICATĂ ADOLF HAIMOVICI, 2017 ETAPA LOCALĂ, HUNEDOARA Clasa a IX-a profil științe ale naturii, tehnologic, servicii

CONCURSUL DE MATEMATICĂ APLICATĂ ADOLF HAIMOVICI, 2017 ETAPA LOCALĂ, HUNEDOARA Clasa a IX-a profil științe ale naturii, tehnologic, servicii Clasa a IX-a 1 x 1 a) Demonstrați inegalitatea 1, x (0, 1) x x b) Demonstrați că, dacă a 1, a,, a n (0, 1) astfel încât a 1 +a + +a n = 1, atunci: a +a 3 + +a n a1 +a 3 + +a n a1 +a + +a n 1 + + + < 1

Διαβάστε περισσότερα

4. CIRCUITE LOGICE ELEMENTRE 4.. CIRCUITE LOGICE CU COMPONENTE DISCRETE 4.. PORŢI LOGICE ELEMENTRE CU COMPONENTE PSIVE Componente electronice pasive sunt componente care nu au capacitatea de a amplifica

Διαβάστε περισσότερα

Programarea Calculatoarelor

Programarea Calculatoarelor Programarea Calculatoarelor Modul 1: Rezolvarea algoritmică a problemelor Introducere în programare Algoritm Obiectele unui algoritm Date Constante Variabile Expresii Operaţii specifice unui algoritm şi

Διαβάστε περισσότερα

Eficienta algoritmilor

Eficienta algoritmilor Eficienta algoritmilor În cursul de introducere am menţionat că, oricât de rapid ar deveni un calculator, sau oricât de mult s-ar ieftini memoria, eficienţa va fi un factor decisiv în alegerea unui algoritm.

Διαβάστε περισσότερα

Progresii aritmetice si geometrice. Progresia aritmetica.

Progresii aritmetice si geometrice. Progresia aritmetica. Progresii aritmetice si geometrice Progresia aritmetica. Definitia 1. Sirul numeric (a n ) n N se numeste progresie aritmetica, daca exista un numar real d, numit ratia progresia, astfel incat a n+1 a

Διαβάστε περισσότερα

Instructiunea while. Forma generala: while (expresie) instructiune;

Instructiunea while. Forma generala: while (expresie) instructiune; Instructiunea while while (expresie) instructiune; Modul de executie: 1) Se evalueaza expresie, daca expresie = 0 (fals) se iese din instructiunea while, altfel (expresie 0, deci adevarat) se trece la

Διαβάστε περισσότερα

COMBINATORICĂ. Mulţimile ordonate care se formează cu n elemente din n elemente date se numesc permutări. Pn Proprietăţi

COMBINATORICĂ. Mulţimile ordonate care se formează cu n elemente din n elemente date se numesc permutări. Pn Proprietăţi OMBINATORIĂ Mulţimile ordoate care se formează cu elemete di elemete date se umesc permutări. P =! Proprietăţi 0! = ( ) ( ) ( ) ( ) ( ) ( )! =!! =!! =! +... Submulţimile ordoate care se formează cu elemete

Διαβάστε περισσότερα

Curs 2 Şiruri de numere reale

Curs 2 Şiruri de numere reale Curs 2 Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi" Iaşi 2014 Convergenţă şi mărginire Teoremă Orice şir convergent este mărginit. Demonstraţie Fie (x n ) n 0 un

Διαβάστε περισσότερα

CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 1998 Clasa a V-a

CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 1998 Clasa a V-a CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 998 Clasa a V-a. La gara Timișoara se eliberează trei bilete de tren: unul pentru Arad, altul pentru Deva și al treilea pentru Reșița. Cel pentru Deva

Διαβάστε περισσότερα

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE 5.5. A CIRCUITELOR CU TRANZISTOARE BIPOLARE PROBLEMA 1. În circuitul din figura 5.54 se cunosc valorile: μa a. Valoarea intensității curentului de colector I C. b. Valoarea tensiunii bază-emitor U BE.

Διαβάστε περισσότερα

CONCURS DE ADMITERE, 17 iulie 2017 Proba scrisă la MATEMATICĂ

CONCURS DE ADMITERE, 17 iulie 2017 Proba scrisă la MATEMATICĂ UNIVERSITATEA BABEŞ-BOLYAI CLUJ-NAPOCA FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ CONCURS DE ADMITERE, 7 iulie 207 Proba scrisă la MATEMATICĂ SUBIECTUL I (30 puncte) ) (0 puncte) Să se arate că oricare ar

Διαβάστε περισσότερα

8 Intervale de încredere

8 Intervale de încredere 8 Intervale de încredere În cursul anterior am determinat diverse estimări ˆ ale parametrului necunoscut al densităţii unei populaţii, folosind o selecţie 1 a acestei populaţii. În practică, valoarea calculată

Διαβάστε περισσότερα

Geometrie computationala 2. Preliminarii geometrice

Geometrie computationala 2. Preliminarii geometrice Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic Geometrie computationala 2. Preliminarii geometrice Preliminarii geometrice Spatiu Euclidean: E d Spatiu de d-tupluri,

Διαβάστε περισσότερα

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca Conice Lect. dr. Constantin-Cosmin Todea U.T. Cluj-Napoca Definiţie: Se numeşte curbă algebrică plană mulţimea punctelor din plan de ecuaţie implicită de forma (C) : F (x, y) = 0 în care funcţia F este

Διαβάστε περισσότερα

Ecuatii trigonometrice

Ecuatii trigonometrice Ecuatii trigonometrice Ecuatiile ce contin necunoscute sub semnul functiilor trigonometrice se numesc ecuatii trigonometrice. Cele mai simple ecuatii trigonometrice sunt ecuatiile de tipul sin x = a, cos

Διαβάστε περισσότερα

2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER

2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER 2. Circuite logice 2.5. Sumatoare şi multiplicatoare Copyright Paul GASNER Adunarea în sistemul binar Adunarea se poate efectua în mod identic ca la adunarea obişnuită cu cifre arabe în sistemul zecimal

Διαβάστε περισσότερα

Subiecte Clasa a VIII-a

Subiecte Clasa a VIII-a (40 de intrebari) Puteti folosi spatiile goale ca ciorna. Nu este de ajuns sa alegeti raspunsul corect pe brosura de subiecte, ele trebuie completate pe foaia de raspuns in dreptul numarului intrebarii

Διαβάστε περισσότερα

Algebra si Geometrie Seminar 9

Algebra si Geometrie Seminar 9 Algebra si Geometrie Seminar 9 Decembrie 017 ii Equations are just the boring part of mathematics. I attempt to see things in terms of geometry. Stephen Hawking 9 Dreapta si planul in spatiu 1 Notiuni

Διαβάστε περισσότερα

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2 .1 Sfera Definitia 1.1 Se numeşte sferă mulţimea tuturor punctelor din spaţiu pentru care distanţa la u punct fi numit centrul sferei este egalăcuunnumăr numit raza sferei. Fie centrul sferei C (a, b,

Διαβάστε περισσότερα

V O. = v I v stabilizator

V O. = v I v stabilizator Stabilizatoare de tensiune continuă Un stabilizator de tensiune este un circuit electronic care păstrează (aproape) constantă tensiunea de ieșire la variaţia între anumite limite a tensiunii de intrare,

Διαβάστε περισσότερα

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)).

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)). Teoremă. (Y = f(x)). Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism Demonstraţie. f este continuă pe X: x 0 X, S Y (f(x 0 ), ε), S X (x 0, ε) aşa ca f(s X (x 0, ε)) = S Y (f(x 0 ), ε) : y

Διαβάστε περισσότερα

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:, REZISTENTA MATERIALELOR 1. Ce este modulul de rezistenţă? Exemplificaţi pentru o secţiune dreptunghiulară, respectiv dublu T. RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii

Διαβάστε περισσότερα

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1 2. Circuite logice 2.2. Diagrame Karnaugh Copyright Paul GASNER Diagrame Karnaugh Tehnică de simplificare a unei expresii în sumă minimă de produse (minimal sum of products MSP): Există un număr minim

Διαβάστε περισσότερα

I. Noţiuni introductive

I. Noţiuni introductive Metode Numerice Curs 1 I. Noţiuni introductive Metodele numerice reprezintă tehnici prin care problemele matematice sunt reformulate astfel încât să fie rezolvate numai prin operaţii aritmetice. Prin trecerea

Διαβάστε περισσότερα

2 Transformări liniare între spaţii finit dimensionale

2 Transformări liniare între spaţii finit dimensionale Transformări 1 Noţiunea de transformare liniară Proprietăţi. Operaţii Nucleul şi imagine Rangul şi defectul unei transformări 2 Matricea unei transformări Relaţia dintre rang şi defect Schimbarea matricei

Διαβάστε περισσότερα

Sortare şi cǎutare. 8 ianuarie Utilizarea şi programarea calculatoarelor. Curs 11

Sortare şi cǎutare. 8 ianuarie Utilizarea şi programarea calculatoarelor. Curs 11 Sortare şi cǎutare 8 ianuarie 2004 Sortare şi cǎutare 2 Sortarea. Generalitǎţi Sortarea = aranjarea unei liste de obiecte dupǎ o relaţie de ordine datǎ (ex.: pentru numere, ordine lexicograficǎ pt. şiruri,

Διαβάστε περισσότερα

28. SUPRADEFINIREA OPERATORILOR

28. SUPRADEFINIREA OPERATORILOR 28. SUPRADEFINIREA OPERATORILOR Pentru un tip clasă se poate defini un set de operatori asociaţi prin supradefinirea operatorilor existenţi, ceea ce permite realizarea de operaţii specifice cu noul tip

Διαβάστε περισσότερα

CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 2018 Clasa a V-a. 1. Scriem numerele naturale nenule consecutive sub forma:

CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 2018 Clasa a V-a. 1. Scriem numerele naturale nenule consecutive sub forma: CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 2018 Clasa a V-a 1. Scriem numerele naturale nenule consecutive sub forma: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,... (pe fiecare

Διαβάστε περισσότερα

T R A I A N ( ) Trigonometrie. \ kπ; k. este periodică (perioada principală T * =π ), impară, nemărginită.

T R A I A N ( ) Trigonometrie. \ kπ; k. este periodică (perioada principală T * =π ), impară, nemărginită. Trignmetrie Funcţia sinus sin : [, ] este peridică (periada principală T * = ), impară, mărginită. Funcţia arcsinus arcsin : [, ], este impară, mărginită, bijectivă. Funcţia csinus cs : [, ] este peridică

Διαβάστε περισσότερα

Analiza funcționării și proiectarea unui stabilizator de tensiune continuă realizat cu o diodă Zener

Analiza funcționării și proiectarea unui stabilizator de tensiune continuă realizat cu o diodă Zener Analiza funcționării și proiectarea unui stabilizator de tensiune continuă realizat cu o diodă Zener 1 Caracteristica statică a unei diode Zener În cadranul, dioda Zener (DZ) se comportă ca o diodă redresoare

Διαβάστε περισσότερα

Tehnici algoritmice utilizate în bioinformatică Problema maparii fragmentelor

Tehnici algoritmice utilizate în bioinformatică Problema maparii fragmentelor Curs 4. Tehnici algoritmice utilizate în bioinformatică Problema maparii fragmentelor Biblio: cap. 4 din An introduction to Bioinformatics algorithms, N.Jones, P. Pevzner cap 2 din Computational Molecular

Διαβάστε περισσότερα

Proiectarea filtrelor prin metoda pierderilor de inserţie

Proiectarea filtrelor prin metoda pierderilor de inserţie FITRE DE MIROUNDE Proiectarea filtrelor prin metoda pierderilor de inserţie P R Puterea disponibila de la sursa Puterea livrata sarcinii P inc P Γ ( ) Γ I lo P R ( ) ( ) M ( ) ( ) M N P R M N ( ) ( ) Tipuri

Διαβάστε περισσότερα

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB 1.7. AMLFCATOARE DE UTERE ÎN CLASA A Ş AB 1.7.1 Amplificatoare în clasa A La amplificatoarele din clasa A, forma de undă a tensiunii de ieşire este aceeaşi ca a tensiunii de intrare, deci întreg semnalul

Διαβάστε περισσότερα