Introducere în combinatoric

Σχετικά έγγραφα
Metode iterative pentru probleme neliniare - contractii

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

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

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

Asupra unei inegalităţi date la barajul OBMJ 2006

Sisteme diferenţiale liniare de ordinul 1

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

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

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

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

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

Esalonul Redus pe Linii (ERL). Subspatii.

Metode de interpolare bazate pe diferenţe divizate

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

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

Curs 4 Serii de numere reale

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

Seminar 5 Analiza stabilității sistemelor liniare

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

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

Curs 1 Şiruri de numere reale

Subiecte Clasa a VIII-a

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

Lucrare. Varianta aprilie I 1 Definiţi noţiunile de număr prim şi număr ireductibil. Soluţie. Vezi Curs 6 Definiţiile 1 şi 2. sau p b.

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

Subiecte Clasa a VII-a

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

Curs 2 Şiruri de numere reale

Criptosisteme cu cheie publică III

MARCAREA REZISTOARELOR

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

Integrala nedefinită (primitive)

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

Matrice. Determinanti. Sisteme liniare

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

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

Laborator 11. Mulţimi Julia. Temă

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

III. Reprezentarea informaţiei în sistemele de calcul

Al cincilea baraj de selecţie pentru OBMJ Bucureşti, 28 mai 2015

riptografie şi Securitate

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

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

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

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


INTERPOLARE. y i L i (x). L(x) = i=0

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

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.

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

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

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

MULTIMEA NUMERELOR REALE

Functii Breviar teoretic 8 ianuarie ianuarie 2011

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

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

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


Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

3. Momentul forţei în raport cu un punct...1 Cuprins...1 Introducere Aspecte teoretice Aplicaţii rezolvate...4

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

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

Sisteme liniare - metode directe

TEMA 9: FUNCȚII DE MAI MULTE VARIABILE. Obiective:

Profesor Blaga Mirela-Gabriela DREAPTA

Subiecte Clasa a V-a

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

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

Problema a II - a (10 puncte) Diferite circuite electrice

5.4. MULTIPLEXOARE A 0 A 1 A 2

Conice - Câteva proprietǎţi elementare

CURS 11: ALGEBRĂ Spaţii liniare euclidiene. Produs scalar real. Spaţiu euclidian. Produs scalar complex. Spaţiu unitar. Noţiunea de normă.

z a + c 0 + c 1 (z a)

1.3 Baza a unui spaţiu vectorial. Dimensiune

Vectori liberi Produs scalar Produs vectorial Produsul mixt. 1 Vectori liberi. 2 Produs scalar. 3 Produs vectorial. 4 Produsul mixt.

1.4 Schimbarea bazei unui spaţiu vectorial

VII.2. PROBLEME REZOLVATE

Seminar Algebra. det(a λi 3 ) = 0

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Subiectul III (30 de puncte) - Varianta 001

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

Ecuatii trigonometrice

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

SEMINAR TRANSFORMAREA FOURIER. 1. Probleme

Criterii de comutativitate a grupurilor

CURS XI XII SINTEZĂ. 1 Algebra vectorială a vectorilor liberi

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

2. Sisteme de forţe concurente...1 Cuprins...1 Introducere Aspecte teoretice Aplicaţii rezolvate...3

V O. = v I v stabilizator

Exemple de probleme rezolvate pentru cursurile DEEA Tranzistoare bipolare cu joncţiuni

Erori si incertitudini de măsurare. Modele matematice Instrument: proiectare, fabricaţie, Interacţiune măsurand instrument:

Ecuaţia generală Probleme de tangenţă Sfera prin 4 puncte necoplanare. Elipsoidul Hiperboloizi Paraboloizi Conul Cilindrul. 1 Sfera.

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

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

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

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

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

Algebra si Geometrie Seminar 9

SEMINARUL 3. Cap. II Serii de numere reale. asociat seriei. (3n 5)(3n 2) + 1. (3n 2)(3n+1) (3n 2) (3n + 1) = a

Tranzistoare bipolare şi cu efect de câmp

Transcript:

- martie 2008 - Introducere în combinatoric Autor: prof. Alin Bura C.N. B.P. Hasdeu Cuprins: 1. Permutri i factoriale 2. Aranjamente 3. Submulimi i combinri 4. Produs cartezian Scurt prezentare: Acest minicurs reprezinta o scurta introducere in combinatorica, definind cateva dintre notiunile de baza i insistand mai mult asupra algoritmilor de generare in ordine lexicografica a permutarilor, aranjamentelor, combinarilor, submultimilor si a produsului cartezian. Sunt necesare cunotine matematice de baz din teoria mulimilor, baze de numeraie, reguli de calcul in baza 2. Cunotine i abiliti algoritmice: algoritmi cu tablouri unidimensionale i bidimensionale, lucrul cu structuri repetitive si, eventual, functii. Algoritmii prezentai nu necesita utilizarea functiilor recursive, dei se pot da astfel de implementari pentru toti algoritmii prezentati. Tema de lucru: 1. Parcurgeti cursul si implementati algoritmii prezentai.

1. Permutri i factoriale O permutare de n obiecte este un mod de aranjare a acestora prin modificarea poziiilor. S presupunem c avem 3 obiecte, notate cu a,b, respectiv c. Avem 6 modaliti de aranjare (permutri) i anume: abc, acb, bac, bca, cab, cba În combinatoric apar frecvent probleme care cer fie determinarea permutrilor de n obiecte (generarea permutrilor) care satisfac, eventual, anumite condiii, fie numrarea acestora. În continuare încercm s gsim un algortim pentru generarea permutrilor de n obiecte i s determinm i numrul acestora. Pentru n=1 i obiectul {a}, avem o singur modalitate de aranjare: a Pentru n=2 i obiectele notate {a,b}, se observ uor c avem permutrile: ab i ba Pentru n=3: S construim permutrile de 3 obiecte pe baza permutrilor de dou obiecte generate la pasul anterior. Pentru permutarea ab vom insera al treilea obiect, c, în toate poziiile posibile (înaintea lui a, între a i b, respectiv dup b): Aplicm acelai procedeu pentru permutarea ba: cab, acb, abc cba, bca, bac Astfel am obinut cele 6 permutri enumerate mai sus. Pentru n obiecte, algoritmul de generare poate fi rezumat astfel: - Considerm, pe rând, fiecare permutare de n-1 obiecte i obinem alte n permutri de n obiecte, prin inserarea obiectului n în irul celor n-1 obiecte iniiale, în toate poziiile posibile. În privina numrului permutrilor de n obiecte, sa-l notam P n avem: P n =n * P n-1 =n *(n-1) * P n-2 = n *(n-1) * (n-2)*p n-3 =... = n *(n-1) * (n-2)*...* 3 * 2 * 1 adic produsul primelor n numere naturale. Convenim s notm acest produs cu n! (se citete n factorial). Prin convenie, 0! = 1. Valoarea n! crete foarte repede, chiar i pentru valori mici ale lui n, astfel c 10! = 3 628 800 este considerat o linie de separare între lucrurile care se pot calcula în timp decent i celelalte. Pentru a evita calcularea valorii n! prin produse succesive, se poate folosi i formula aproximativ urmtoare:

n! n 2πn e n descoperit de matematicianul James Stirling, unde e este o constanta utilizata ca baza a logaritmilor naturali (aproximativ egala cu 2,72) 1 Diferena dintre valoarea lui n! i valoarea obinut cu ajutorul formulei este de aproximativ. 12n Algoritm pentru generarea permutrilor în ordine lexicografic Determinarea permutrilor unei mulimi cu n elemente se poate reduce la a genera permutrile mulimii {1,2,,n}. Memorm elementele mulimii într-un tablou unidimensional i permutm de fapt indicii elementelor i nu elementele propriu-zise. Algoritmul prezentat în seciunea precedent nu permite generarea permutrilor în ordine lexicografic, de aceea vom arta cum putem genera, pornind de la permutarea {1,2,,n} toate permutrile de n elemente în ordine lexicografic cresctoare. S analizm puin primele permutri de 5 elemente aranjate în ordine lexicografic: 1 2 3 4 5 1 2 3 5 4 1 2 4 3 5 1 2 4 5 3 1 2 5 3 4 1 2 5 4 3 1 3 2 4 5 1 3 2 5 4 1 3 4 2 5 1 3 4 5 2 1 3 5 2 4 1 3 5 4 2 1 4 2 3 5 1 4 2 5 3 1 4 3 2 5 1 4 3 5 2 1 4 5 2 3 1 4 5 3 2 1 5 2 3 4 1 5 2 4 3 1 5 3 2 4 1 5 3 4 2 1 5 4 2 3 1 5 4 3 2 2 1 3 4 5

Pentru a trece de la o permutare dat la urmtoarea permutare în ordine lexicografic, parcurgem permutarea de la dreapta la stânga i gsim primul element p i cu proprietatea c p i < p i+1 i p i+1 > p i+2 >...> p n Permutarea urmtoare se obine prin înlocuirea lui p i cu cel mai mic dintre elementele urmtoare cu proprietatea de a fi mai mare decât p i. Apoi se inverseaz ultimele n-i elemente pentru ca acestea s apar în ordine cresctoare. De exemplu, trecerea de la permutarea 1 3 5 4 2 la permutarea 1 4 2 3 5 se realizeaz astfel: gsim p i = 3; 4 este cel mai mic element mai mare decât 3, deci interschimbm cele dou valori i ordonm ultimele 3 elemente. Pentru generarea tuturor celor n! permutri ale mulimii {1,2,,n} pornim de la permutarea identic 1,2,3,,n i aplicm algoritmul de mai sus pn când se obine permutarea n,n-1,,3,2,1, care este cea mai mare permutare în ordinea lexicografic. Programul C++ care implementeaz algoritmul este: int main() { int p[100],n,i,k,poz,min,j; ofstream g("lexic.out"); cin>>n; for(i=1;i<=n;i++) p[i]=i; do{ poz=n; while(p[poz]<p[poz-1] && poz>1) poz--; poz--; if(poz) { min=p[poz+1]; j=poz+1; for(i=poz+1;i<=n;i++) if(min>p[i] && p[i]>p[poz]) min=p[i], j=i; k=p[poz], p[poz]=p[j]; p[j]=k; for(i=1;i<=(n-poz)/2;i++) k=p[poz+i],p[poz+i]=p[n-i+1],p[n-i+1]=k; for(i=1;i<=n;i++) g<<p[i]<<" "; g<<endl; } }while(poz); g.close(); return 0; }

2. Aranjamente S considerm n obiecte. O modalitate de a selecta i aranja k obiecte distincte dintre cele n date se numete aranjament. Evident, k<=n! Fie mulimea M={a 1,a 2, a n } Toate modalitile de a selecta i aranja k elemente din cele n elemente ale mulimii M poart numele de aranjamente de k elemente din mulimea M sau aranjamente de n elemente luate cate k. Numrul de aranjamente se noteaz cu A k n. Exemplu: Pentru M={1,2,3}, aranjamentele de 2 obiecte sunt: 1, 2 1, 3 2, 3 2, 1 3, 1 3, 2 Observai c aranjamentele (1,2) si (2,1) sunt considerate distincte. Se poate demonstra ca A k n n! = ( n k)! Algoritm pentru generarea aranjamentelor de k obiecte in ordine lexicografica Pas1. Consideram pentru inceput cel mai mic aranjament, in ordine lexicografica, de k elemente, anume: {1, 2,..., k} Pas2. Presupunem ca aranjamentul curent este {a 1,a 2, a k }. Determinarea aranjamentului succesor se reduce la: Determinarea celui mai mare indice i cu proprietatea c a i mai poate fi marit, adica macar una din valorile a i +1, a i +2,,n nu a fost deja inclusa in aranjament; Inlocuim valorile a i,a i+1, a k cu cele mai mici valori disponibile (nealese), ordonate crescator Pas 3. Se repeta PAS2 pân când nu mai poate fi determinat un indice cu proprietea de mai sus. Asta înseamn c s-a ajuns la cel mai mare aranjament în ordine lexicograficp i anume: {n,n-1,, n-k+1}

3. Submulimi i combinri O modalitate de a alege k obiecte din n obiecte date, fr a conta ordinea, se numete combinare. Fie mulimea M={a 1,a 2, a n } Toate modalitile de a selecta k elemente distincte din cele n elemente ale mulimii M poart numele de combinri de k elemente din mulimea M sau combinari de n elemente luate câte k. Numrul de combinari se noteaz cu C k n. Exemplu: Pentru M={1,2,3}, combinarile de 2 obiecte sunt: 1, 2 1, 3 2, 3 Exprimarea lui C k n se poate face observand ca, in cazul aranjamentelor de n obiecte luate cate k, fiecare alegere apare de k! ori: alegand, de exemplu elementele 1, 2, 3 din multimea {1,2,3,4} se vor alege si : 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 Asta inseamna C k k A n n= => C k n! n = k! k!( n k)! Citind cu atentie definitia i consideraiile de mai sus, putem trage concluzia c o combinare de k elemente reprezint de fapt o submulime cu k elemente a mulimii M considerate iar C k n reprezint.numrul acestor submulimi. Dup cum se tie din teoria mulimilor, numrul de submulimi ale unei mulimi cu n elemente, inclusiv mulimea vid, este de 2 n, astfel avem: C 0 n+ C 1 n+... +, C n n = 2 n C 0 n numarul modalitatilor de alegere a 0 elemente din n = 1 C 1 n numarul modalitatilor de alegere a submultimilor de 1 element = n... C n n numarul modalitatilor de alegere a n elemente din n = 1 Datorita acestei identitati matematice, combinarile mai poarta numele de coeficieni binomiali.

Formula obtinuta mai sus poate fi dificil de aplicat pentru calculul C k n, pentru ca intervin factorialele, a caror valoare creste foarte repede. O modalitate mai buna de calcul este sugerata de triunghiul lui Pascal, compus din coeficientii binomiali calculati pentru n=1,2,3,...: K C k 0 C k 1 C k 2 C k 3 C k 4 C k 5 C k 6 0 1 1 1 1 2 1 2 1 3 1 3 3 1 4 1 4 6 4 1 5 1 5 10 10 5 1 6 1 6 15 20 15 6 1 e.t.c Se observa ca fiecare element, cu exceptia celor de pe diagonala principala si de pe prima coloana, se poate calcula prin insumarea celor doua elemente de pe linia precedenta aflate deasupra, respectiv la stanga sa, deci C k n = C k-1 n-1+ C k n-1 Formula de mai sus ne permite sa calculam C k n din apropape in aproape si fara a efectua inmultiri. Deoarece valoarea C k 50 n creste si ea destul de repede, calculul valorii C 100 de exemplu, nu se poate realiza decat prin utilizarea adunarii cu numere mari. Algoritm pentru generarea submultimilor unei multimi Fie mulimea A={a 1,a 2, a n }, memorata intr-un tablou unidimensional notat X. Ne propunem sa generam toate cele 2 n submulimi ale sale. S consideram mai intai urmatoarea problema: Fiind dat un numar natural n, sa se determine in cate moduri putem construi un tablou unidimensional avand elemente din multimea {0, 1}? (problema numarului de vectori binari cu n elemente) Primul element al tabloului, sa-l notam v[1], poate fi ales in doua moduri, la fel si v[2], v[3],,v[n] De exemplu, daca n=3 avem solutiile: 0, 0, 0 1, 0, 0 0, 1, 0 1, 1, 0 0, 0, 1 1, 0, 1 0, 1, 1 1, 1, 1

Se observa ca, pentru fiecare din cele doua alegeri facute pentru v[1] se pot face 2 alegeri pentru v[2] si, de asemenea, pentru fiecare alegere facuta pentru elementul v[2] se pot face 2 alegeri pentru v[3], adica 2x2x2 solutii. Generalizand, numarul tablourilor unidimensionale cu elemente 0 si 1 este 2 n. Rezultatul precedent ne permite sa facem o paralela intre problema generarii submultimilor si problema vectorilor binari. Iata cum, pentru multimea A={1, -3, 8} Tabloul unidimensional Submultimea corespunzatoare 0, 0, 0 Multimea vida 1, 0, 0 {1} 0, 1, 0 {3} 1, 1, 0 {1, -3} 0, 0, 1 {8} 1, 0, 1 {1, 8} 0, 1, 1 {-3, 8} 1, 1, 1 {1, -3, 8} Tabloul unidimensional v se mai numeste si vector caracteristic, deoarece o submultime se construieste astfel: pentru fiecare i=1,,n, daca v[i]=1 atunci consideram elementul corespunzator X[i] ca facand parte din submultime de aceea, pentru rezolvarea problemei noastre initiale, va fi suficient sa generam vectorii caracteristici. Algoritmul propriu-zis foloseste proprietatile adunarii numerelor scrise in baza 2, de fapt tabla adunarii din aceasta baza: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (+ 1 de inut minte = transport catre pozitia urmatoare) (obs. Reamintiti-va ca, atunci cand calculati 25 + 175 in baza 10 zicem 5+5 = 0 si una in minte, 7+5=12+1 din minte, e.t.c) Algoritm pentru generarea submultimilor: Pas 1. Se porneste cu vectorul caracteristic v, avand toate cele n elemente egale cu zero si-l consideram a fi numarul 0 = 000 0 (n de 0) in baza 2 Pas 2. Adunam 1 la numarul curent si obtinem o noua submultime. Afisam/prelucram elementele submultimii. Pas 3. Repetam pasul 2 pana cand vectorul caracteristic contine n elemente egale cu 1

Generarea submultimilor in ordine lexicografica La fel ca mai sus consideram mulimea A={a 1,a 2, a n }, memorata intr-un tablou unidimensional, notat X si ne propunem generarea submultimilor sale in ordinea crescatoare a numarului de elemente. Fiecare submultime va fi generata, pe rand, intr-un tablou unidimensional v, care va memora indicii elementelor din tabloul X. Astfel, spunem ca generarea submultimilor unei multimi oarecare A cu n elemente, este echivalenta cu generarea submultimilor multimii {1,2,,n} si de aceea, in continuare, de vom referi la aceasta. Prima submultime cu k elemente, in ordine lexicografica, este {1,2,,k}, deci primele pozitii ale tabloului v sunt ocupate, in ordine, de aceste valori. Ultima submultime cu k elemente va fi {n-k+1, n-k+2,, n-1,n} Trecerea de la o submultime cu k elemente la submultimea urmatoare, in ordine lexicografica, se bazeaza pe urmatoarea observatie: Pe o pozitie j a tabloului solutie v, valoarea maxima admisa este n-k+j. Intuitiv, pe pozitia 1 a tabloului v se poate afla valoarea maxima n-k+1, deoarece ultima submultime cu k elemente este {n-k+1, n-k+2,, n-1, n}. De aici observam ca, pe pozitia 2 se poate afla cel mult valoarea n-k+2, e.t.c Pas1. k=1 Pas2. Determinam submultimile cu k elemente, astfel: Prima submultime este {1,2,,k} Trecerea de la submultimea curenta la urmatoarea se face prin determinarea celui mai din dreapta element care mai poate fi marit cu o unitate, fie el v[j]; Marim pe v[j] cu 1 si modificam valoarea elementelor de la dreapta lui v[j] dupa formula: v[p] = v[p-1]+1, oricare ar fi p=j+1,,n Repetam pasii pana la determinarea tuturor submultimilor cu k elemente Pas3. k = k +1 Pas4. Repeta Pas 2 pana cand k>n Observatie: Subalgoritmul pentru determinarea submultimilor cu k elemente, aplicat de n ori in algoritmul de mai sus, constituie de fapt algoritmul de generare a combinarilor de k elemente ale multimii {1,2,, n} in ordine lexicografica.

4. Generarea produsului cartezian Fie A i B dou mulimi cu n, respectiv m elemente. Definim produsul cartezian al muimilor A i B, notat A x B, ca fiind mulimea perechilor care au prima component din mulimea A i a doua din mulimea B. Formal, vom scrie: A x B = {(a,b) / a A si b B } Numarul elementelor acestei mulimi este n x m. Multe aplicaii practice necesit generarea produsului cartezian a N mulimi. Fie mulimile A 1, A 2,..., A N având c 1, c 2, respectiv c N elemente. Definim produsul cartezian al celor n mulimi ca fiind mulimea: A 1 x A 2 x...x A N = {(a 1, a 2,, a N ) / a i A i } Multimea A 1 x A 2 x...x A N va fi multimea tablourilor unidimensionale cu N elemente, elementul de pe pozitia i apartinand multimii A i. Numarul elementelor produsului cartezian a celor N multimi este c 1 x c 2 x... x c N. Algoritm pentru generarea produsului cartezian a N multimi Multimile noastre avand numar finit de elemente, putem gandi algoritmul pentru multimile: A 1 = {1, 2,..., c 1 } A 2 = {1, 2,..., c 2 }... A N ={1, 2,..., c N } determinand elementele produsului cartezian in ordine lexicografica. Vom proceda similar algoritmilor din sectiunile precedente, deci vom incepe cu elementul cel mai mic, in ordine lexicografica: (1, 1,..., 1) si ne vom opri la ultimul element in ordine lexicografica:

(c 1, c 2,..., c N ) Observam ca elementul de pe pozitia i are cel mult valoarea c i (ultimul element al multimii corespunzatoare). Trecerea de la un element oarecare (v[1], v[2],..., v[n]) la urmatorul element in ordine lexicografica se face astfel: Determinam cel cel mai din dreapta indice j cu proprietatea ca v[j] mai poate fi marit cu o unitate (v[j]<c j ) Marim v[j] cu o unitate Initializam toate elementele v[p] cu valoarea 1, unde p=j+1,..., N