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

Σχετικά έγγραφα
Sortare şi cǎutare. 8 ianuarie Utilizarea şi programarea calculatoarelor. Curs 11

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

Metode iterative pentru probleme neliniare - contractii

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

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.

Esalonul Redus pe Linii (ERL). Subspatii.

Aplicaţii ale principiului I al termodinamicii la gazul ideal

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

Curs 4 Serii de numere reale

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

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

Curs 1 Şiruri de numere reale

riptografie şi Securitate

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

MARCAREA REZISTOARELOR

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

Subiecte Clasa a VII-a

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

Subiecte Clasa a VIII-a


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

5.4. MULTIPLEXOARE A 0 A 1 A 2

Metode de interpolare bazate pe diferenţe divizate

Seminar 5 Analiza stabilității sistemelor liniare

Laborator 11. Mulţimi Julia. Temă

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

Integrala nedefinită (primitive)

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

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

V O. = v I v stabilizator

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

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

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

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

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

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

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

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

Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera

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

Curs 2 Şiruri de numere reale

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

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

Criptosisteme cu cheie publică III

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

III. Reprezentarea informaţiei în sistemele de calcul

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

Asupra unei inegalităţi date la barajul OBMJ 2006

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

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

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

Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili

Sisteme liniare - metode directe

1. Tehnici de programare

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

Geometrie computationala 2. Preliminarii geometrice

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

1. Preliminarii 1.1 Ce este un algoritm?

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

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

Eficienta algoritmilor

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


Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].

Algoritmi genetici. 1.1 Generalităţi

Εμπορική αλληλογραφία Ηλεκτρονική Αλληλογραφία

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

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

Proiectarea algoritmilor: Programare dinamică

Foarte formal, destinatarul ocupă o funcţie care trebuie folosită în locul numelui

Tablouri unidimensionale

Subiectul III (30 de puncte) - Varianta 001

Temă pentru acasă. Pointeri către funcţii

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.

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

Curs 2 DIODE. CIRCUITE DR

Capitolul ASAMBLAREA LAGĂRELOR LECŢIA 25

5.1. Noţiuni introductive

Noţiuni introductive

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

Δομές Δεδομένων και Αλγόριθμοι

Programarea Calculatoarelor

* K. toate K. circuitului. portile. Considerând această sumă pentru toate rezistoarele 2. = sl I K I K. toate rez. Pentru o bobină: U * toate I K K 1

Zgomotul se poate suprapune informaţiei utile în două moduri: g(x, y) = f(x, y) n(x, y) (6.2)

CIRCUITE LOGICE CU TB

4. Măsurarea tensiunilor şi a curenţilor electrici. Voltmetre electronice analogice

riptografie şi Securitate

Subiecte Clasa a V-a

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

Ακαδημαϊκός Λόγος Κύριο Μέρος

Capitolul 2 - HIDROCARBURI 2.5.ARENE

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

Cum folosim cazuri particulare în rezolvarea unor probleme

Προχωρημένες έννοιες προγραμματισμού σε C

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Αλγόριθμοι ταξινόμησης

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

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

MULTIMEA NUMERELOR REALE

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

Transcript:

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 cele mai fundamentale şi studiate de algoritmi [D. Knuth - Tratat de programare a calculatoarelor. Vol. 3: Sortare şi cǎutare] sortare internǎ (în memorie) sau externǎ (folosind fişiere) Principalele operaţii la sortare: compararea şi interschimbarea vom studia complexitatea algoritmilor (nr. de operaţii necesare) O(f(n)) dacǎ timpul de rulare este cf(n), pt. n > n 0 Ω(f(n)) dacǎ timpul de rulare este cf(n), pt. n > n 0 se studiazǎ pentru cazul cel mai defavorabil şi cel mediu vom raţiona despre corectitudinea algoritmilor folosind invarianţi

Sortare 3 Înainte de a sorta...... sǎ generǎm un tablou de numere aleatoare pe care sǎ le sortǎm. int rand(void); /* ^ın stdlib.h */ genereazǎ numǎr pseudoaleator între 0 şi RAND MAX void srand(unsigned seed); seteazǎ starea iniţialǎ pentru generatorul de numere pseudoaleatoare OBS: în absenţa apelului la srand, funcţia rand va repeta aceeaşi secvenţǎ generatǎ pentru fiecare rulare se poate iniţializa generatorul în funcţie de ceas (time.h): time t time(time t *timer); (time t e unsigned long) ret. nr. de secunde trecute de la o datǎ origine (UNIX: 1 ian. 1970) dacǎ param. pointer e nenul, valoarea se stocheazǎ şi la acea adresǎ. const int N=100; const int MAX=1000; int i, a[n]; srand((int)time(null)); /* iniţializeazǎ generatorul */ for (i = 0; i < N; i++) a[i] = rand() % MAX; /* ^ıntre 0 şi MAX-1 */

Sortare 4 Algoritmul Bubblesort interschimbǎm elemente adiacente, pornind de la ultimul; cel mai mic element va ajunge pânǎ la începutul tabloului; se continuǎ pentru tabloul de lungime N- 1 rǎmas void swap (int *p, int *q) { /* o vom folosi peste tot */ int aux; aux = *p; *p = *q; *q = aux; void bubblesort(int *a, int N) { int i, j; for (i = 1; i < N; i++) for (j = N-1; j >= i; j--) /* if (a[j] < a[j-1]) swap(&a[j-1], &a[j]);

Sortare 5 Analiza lui Bubblesort Complexitatea: bucla dupǎ j executǎ N - i comparaţii total: N 1 i=1 N i = N-1 + N-2 +... + 1 = N(N-1)/2 = O(N 2 ) cele mai multe interschimbǎri: pentru şirul iniţial sortat invers Invariant: dupǎ iteraţia i (1 i N), primele i elemente din tablou sunt cele mai mici, şi sunt ordonate Pasul inductiv: în iteraţia i cel mai mic element dintre a[i-1].. a[n-1] e adus pe poziţia i (a[i-1], începând cu 0) Exerciţiu: Modificaţi bubblesort aşa încât: sǎ parcurgǎ tabloul alternativ în ambele direcţii sǎ se încheie atunci când nu se mai produce nici o modificare

Sortare 6 Sortarea prin selecţie se selecteazǎ cel mai mic element se interschimbǎ cu primul element din tablou se continuǎ pentru tabloul de lungime N- 1 rǎmas void selectionsort (int *a, int N) { int i, j, low; for (i = 0; i < N; i++) { for (low = j = i; ++j < N;) if (a[j] < a[low]) low = j; if (low!= i) swap(&a[i], &a[low]);

Sortare 7 Analiza sortǎrii prin selecţie Complexitatea: similar cu bubblesort bucla dupǎ j executǎ N - i comparaţii total: N 1 i=1 N i = N-1 + N-2 +... + 1 = N(N-1)/2 = O(N 2 ) însǎ numǎrul de interschimbǎri de elemente: cel mult N-1 preferabil dacǎ dimensiunea elementelor este mare Invariant: acelaşi ca la bubblesort: dupǎ iteraţia i (1 i N), primele i elemente din tablou sunt cele mai mici, şi sunt ordonate

Sortare 8 Algoritmul Quicksort dezvoltat de Hoare (1960); prin descompunere recursivǎ în probleme mai mici se alege o valoare numitǎ pivot, în mod ideal cât mai aproape de valoarea medianǎ a elementelor din tablou. se interschimbǎ elemente din tablou pânǎ se partiţioneazǎ în douǎ segmente, cu elemente mai mici şi respectiv mai mari decât pivotul se apeleazǎ recursiv pentru cele douǎ partiţii (tablouri mai mici) Gǎsirea pivotului: o euristicǎ simplǎ (ex. mediana a 3 elemente) int findpivot (int *a, int i, int j) { int m, n, p; m = rand() % (j - i + 1); n = rand() % (j - i + 1); p = rand() % (j - i + 1); return (a[m] < a[n])? ((a[n] < a[p])? a[n] : max(a[m], a[p])) : ((a[m] < a[p])? a[m] : max(a[n], a[p]))

Sortare 9 Quicksort: algoritmul propriu-zis void partition (int *a, int i, int j, int *pl, int *pr) { int p, l = i, r = j; p = findpivot(a, i, j); while (1) { while (l <= j && a[l] <= p) l++; while (r >= i && a[r] >= p) r--; if (l < r) swap(&a[l], &a[r]); else break; *pl = l; *pr = r; void quicksort (int *a, int i, int j) { int l, r; partition(a, i, j, &l, &r); if (r > i) quicksort (a, i, r); if (l < j) quicksort (a, l, j);

Sortare 10 Discuţia algoritmului Quicksort timpul mediu de rulare este O(n log n) (limita teoreticǎ inferioarǎ pentru sortarea bazatǎ pe comparaţii). O(n 2 ) în cazul cel mai defavorabil de alegere a pivotului cu algoritm mai sofisticat pt. pivot, O(n log n) în toate cazurile numeroase variante pe lângǎ cea prezentatǎ la invocarea recursivǎ, pentru subproblemele mici se foloseşte de regulǎ unul din algoritmii mai simpli În C: implementat ca funcţie standard de bibliotecǎ: void qsort(void *base, size t num, size t size, int (*compar)(void *, void *));