array a[0..n-1] a[0] = v0,..., a[n-1] = vn-1

Similar documents
Sorting DS 2017/2018

Liste. Stive. Cozi SD 2017/2018

Pentru clasa a X-a Ştiinţele naturii-sem II

Inteligenta Artificiala

1.3. OPERAŢII CU NUMERE NEZECIMALE

ON THE QUATERNARY QUADRATIC DIOPHANTINE EQUATIONS (II) NICOLAE BRATU 1 ADINA CRETAN 2

UNITATEA DE ÎNVĂȚARE 3 Analiza algoritmilor

Divizibilitate în mulțimea numerelor naturale/întregi

Soluţii juniori., unde 1, 2

Sisteme cu logica fuzzy

Programarea Dinamica. (si alte chestii adiacente) Andrei Olariu

Proiectarea Algoritmilor

O V E R V I E W. This study suggests grouping of numbers that do not divide the number

ȘIRURI (TABLOURI UNIDIMENSIONALE)

PRELUCRARI PE IMAGINI BINARE (ALB/NEGRU)

CURS 11: Programare dinamică - II - Algoritmica - Curs 12 1

Utilizarea limbajului SQL pentru cereri OLAP. Mihaela Muntean 2015

METODE NUMERICE: Laborator #4 Eliminare gaussiană cu pivotare totală şi scalare. Algoritmul Thomas pentru rezolvarea sistemului 3-diagonal

Ecuatii si inecuatii de gradul al doilea si reductibile la gradul al doilea. Ecuatii de gradul al doilea

Gradul de comutativitate al grupurilor finite 1

Teorema Reziduurilor şi Bucuria Integralelor Reale Prezentare de Alexandru Negrescu

Sorting. Chapter 11. CSE 2011 Prof. J. Elder Last Updated: :11 AM

Rezolvarea ecuaţiilor şi sistemelor de ecuaţii diferenţiale ordinare (II)

Insertion Sort. We take the first element: 34 is sorted

Sisteme cu logica fuzzy cu mai multe intrari (MISO)

Laborator 3. Backtracking iterativ

Reactoare chimice cu curgere piston (ideala) cu amestecare completa de tip batch (autoclava)

Subiecte geometrie licenta matematica-informatica 4 ani

SOI prin smart-cut. Caracterizarea TEM-HRTEM a defectelor structuale induse in Si prin hidrogenare in plasma.

Câteva rezultate de algebră comutativă

Barem de notare clasa a V-a

Rădăcina pătrată a unei matrici reale de ordinul 2

COMPARATIVE DISCUSSION ABOUT THE DETERMINING METHODS OF THE STRESSES IN PLANE SLABS

Controlul predictiv bazat pe modele intare-stare-iesire. Cuprins. 2. Modele intrare-stare-iesire :01

Metode clasice. Camelia Chira.

Laborator 5. Instructiuni de control logic : FOR, IF, WHILE. - Staţii de lucru care au instalat Orcad9.2. si MatLab 7.1

Bin Sort. Sorting integers in Range [1,...,n] Add all elements to table and then

Utilizarea claselor de echivalenta in analiza asistata de calculator a sistemelor cu evenimente discrete

Fundamental Algorithms

Fundamental Algorithms

Data Structures and Algorithms Chapter 3

Divide-and-conquer: Order Statistics. Curs: Fall 2017

Sorting Algorithms. We have already seen: Selection-sort Insertion-sort Heap-sort. We will see: Bubble-sort Merge-sort Quick-sort

Cristalul cu N atomi = un sistem de N oscilatori de amplitudini mici;

Procesarea Imaginilor

University of New Mexico Department of Computer Science. Midterm Examination. CS 361 Data Structures and Algorithms Spring, 2003

Algorithms. Quicksort. Slide credit: David Luebke (Virginia)

CS173 Running Time and Big-O. Tandy Warnow

GENERATOARE DE SEMNAL DIGITALE

Probleme extremale pentru grafuri si retele de transport

Modelling the Steady State Characteristic of ph Neutralization Process: a Neuro-Fuzzy Approach

A GENERALIZATION OF A CLASSICAL MONTE CARLO ALGORITHM TO ESTIMATE π

CS325: Analysis of Algorithms, Fall Midterm

LIGHTNING MVP System

Divide & Conquer. Jordi Cortadella and Jordi Petit Department of Computer Science

4/68. Mini-comutatoare cu came. Prezentare generalã a sistemului. Întreruptoare Pornit-Oprit TM. Comutatoare de comandã TM.

Reactoare chimice cu curgere piston (ideala) (Plug Flow Reactor PFR) cu amestecare completa (Mixed Flow Reactor MFR) de tip batch (autoclava)

Review Of Topics. Review: Induction

Cercet¼ari operaţionale

Divide and Conquer Strategy

Rezultate în Teoria Punctului Fix şi Procese Iterative cu Aplicaţii

Despre AGC cuasigrupuri V. Izbaș

IMAR Problema 1. Fie P un punct situat în interiorul unui triunghi ABC. Dreapta AP intersectează

Chapter 4 Divide-and-Conquer

Data Structures and Algorithms Chapter 3

ALGORITMI DE OPTIMIZARE IN INGINERIE ELECTRICA. Sef lucrari ing. Alin-Iulian DOLAN

Sisteme de Recunoastere a Formelor Lab 12 Clasificare cu Support Vector Machine

Universitatea Politehnica Bucureşti Facultatea de Automatică şi Calculatoare Departamentul de Automatică şi Ingineria Sistemelor

Procedeu de demonstrare a unor inegalităţi bazat pe inegalitatea lui Schur

FORMULELE LUI STIRLING, WALLIS, GAUSS ŞI APLICAŢII

Matematici speciale Variabile aleatoare discrete

$IfNot ParametricTable= P_ratio_gas. P ratio,gas = 14; Raport comprimare compresor aer - Pressure ratio for gas compressor (2) $EndIf

PROBLEME DIVERSE lecţie susţinută la lotul de 13 de Andrei ECKSTEIN Bucureşti, 25 mai 2015

Divide & Conquer. Jordi Cortadella and Jordi Petit Department of Computer Science

INEGALITĂŢI DE TIP HARNACK ŞI SOLUŢII POZITIVE MULTIPLE PENTRU PROBLEME NELINIARE

INCLUZIUNI OPERATORIALE PRIN TEHNICA PUNCTULUI FIX ÎN SPAŢII METRICE VECTORIALE

XI International Zhautykov Olympiad in Sciences Almaty Kazakhstan, January 11-17, 2015 Presentation of the Mathematics Section by Dan Schwarz

Lecture 4. Quicksort

Lecture 14: Nov. 11 & 13

Teoreme de compresie-extensie de tip Krasnoselskii şi aplicaţii (Rezumatul tezei de doctorat)

ARTICOLE ŞI NOTE MATEMATICE

Algorithms and Theory of Computation. Lecture 9: Dynamic Programming

Algorithm efficiency analysis

GAZETA MATEMATICĂ SERIA A. ANUL XXXI(CX) Nr. 1 2/ 2013 ANIVERSĂRI. Profesorul Ioan Tomescu la a 70-a aniversare

MATEMATICĂ 3 PROBLEME DE REFLECŢIE

Tablouri bidimensionale(matrici)

Data structures Exercise 1 solution. Question 1. Let s start by writing all the functions in big O notation:

Divide and Conquer. Arash Rafiey. 27 October, 2016

Figura 7.12 Multiscopul: schema bloc simplificată a părţii specifice osciloscopului hibrid. U Y CS S/T-H ADC MD DAC TC

Dynamic Response of Beams on Elastic Foundation with Axial Load

Discrete Mathematics: Logic. Discrete Mathematics: Lecture 17. Recurrence

Sorting algorithms. Sorting algorithms

BOOST CIRCUIT CONTROL IN TRANSIENT CONDITIONS

T h e C S E T I P r o j e c t

i=1 i B[i] B[i] + A[i, j]; c n for j n downto i + 1 do c n i=1 (n i) C[i] C[i] + A[i, j]; c n

Logică și structuri discrete. Marius Minea 25 septembrie 2017

Week 5: Quicksort, Lower bound, Greedy

TEOREME DE PUNCT FIX PENTRU OPERATORI CE NU INVARIAZĂ DOMENIUL DE DEFINIŢIE ŞI

Prelegerea 7. Sistemul de criptare AES. 7.1 Istoric

AN APPROACH TO THE NONLINEAR LOCAL PROBLEMS IN MECHANICAL STRUCTURES

Transcription:

Curs 5 - Agenda sortare interna buble sort sortare prin insertie sortare pri selectie naiva sistematica ( heap sort ) sortare prin interclasare ( merge sort ) sortare rapida ( quick sort ) cautare in liste liniare cautare binara aspectul dinamic arbori AVL

Problema sortarii Forma 1 Intrare: n, (R 0,..., R n-1 ) cu cheile k 0,..., k n-1 Iesire: (R 0,..., R n-1 )astfelincit (R 0,..., R n-1 )esteo permutarea (R 0,..., R n-1 ) si R 0.k 0... R n-1.k n-1 Forma 2 Intrare: n, (v 0,..., v n-1 ) Iesire: (w 0,..., w n-1 )astfelincit (w 0,..., w n-1 )esteo permutarea (v 0,..., v n-1 ), si w 0... w n-1 structura de date array a[0..n-1] a[0] = v 0,..., a[n-1] = v n-1

Bubble sort I idee: ( i) 0 i < n-1 a[i] a[i+1] algoritm procedure bubblesort (a, n) begin ultim n-1 while ultim > 0 do ntemp ultim 1 ultim 0 for i 0 to ntemp do if a[i] > a[i+1] then swap(a[i], a[i+1]) ultim i end

Bubble sort II exemplu analiza cazulcelmainefavorabil a[0] > a[1] >... > a[n-1] T bublesort (n) = O(n 2 )

Sortare prin insertie directa I idee presupunem a[0..i-1] sortat insereaza a[i] astfel incit a[0..i] devine sortat algoritm procedure insertsort(a, n) begin for i 1 to n-1 do j i 1 temp a[i] while ((j 0) and (a[j] > temp)) do a[j+1] a[j] j j 1 if (a[j+1] temp) then a[j+1] temp end

Sortare prin insertie directa II exemplu analiza cazulcelmainefavorabil a[0] > a[1] >... > a[n-1] T insertsort (n) = O(n 2 )

Sortare prin selectie ideea de baza pasul curent: selecteaza un element si-l duce pe pozitia sa finala din tabloul sortat repeta pasul curent pana cnd toate elementele ajung pe locurile finale

Sortare prin selectie naiva idee ( i ) 0 i < n a[i] = max{a[0],,a[i]} algoritm procedure naivsort(a, n) begin for i n-1 downto 0 do imax i for j i-1 downto 0 do if (a[j] > a[imax]) then imax j if (i imax) then swap(a[i], a[imax]) end complexitatea timp toate cazurile: T naivsort (n) = Θ(n 2 )

"Heap sort" (sortare prin selectie sistematica) etapa I organizeaza tabloul ca un max-heap initial tablou satisface proprietatea maxheap incepand cu n/2 introduce in max-heap elementele de pe pozitiile n/2-1, n/2-1,, 1, 0 etapa II selecteaza elementul maxim si-l duce la locul lui prin interschimbare cu ultimul micsoreaza cu 1 si apoi reface max-heapul repeta pasii de mai sus pana cand toate elementele ajung pe locul lor

Operatia de introducere in heap al t-lea procedure insereazaaltlea(a, n, t) begin j t heap false while ((2*j+1 < n) and not heap) do k 2*j+1 if ((k < n-1) and (a[k] < a[k+1])) then k k+1 if (a[j] < a[k]) then swap(a[j], a[k]) j k else heap true end

"Heap sort" (sortare prin selectie sistematica) procedure heapsort(a, n) begin // construieste maxheap-ul for t (n-1)/2 downto 0 do insereazaaltlea(a, n, t) // elimina r n-1 while (r > 0) do swap(a[0], a[r]) insereazaaltlea(a, r, 0) r r-1 end

"Heap sort" - complexitate formarea heap-ului (pp. n = 2 k 1 ) k 1 i= 0 2( k i 1)2 i = 2 k + 1 2( k + 1) eliminare din heap si refacere heap k 1 i= 0 2i 2 i = ( k 2)2 k + 1 + 4 complexitate algoritm de sortare T ( n) = 2nlogn 2n = heapsort O( nlogn)

Timpul de executie empiric Intel Pentium III 1.00 Ghz n bubblesort insertsort naivsort heapsort 10 0.0000 0.0000 0.0000 0.0000 100 0.0000 0.0000 0.0000 0.0000 1000 0.0310 0.0000 0.0150 0.0000 2000 0.1100 0.0150 0.0320 0.0000 4000 0.4840 0.0630 0.0930 0.0160 8000 1.9530 0.2500 0.3590 0.0160 10000 3.0940 0.4060 0.5780 0.0160

Paradigma divide-et-impera P(n): problema de dimensiune n baza daca n n 0 atunci rezolva P prin metode elementare divide-et-impera divide P in a probleme P 1 (n 1 ),..., P a (n a ) cu n i n/b, b > 1 rezolva P 1 (n 1 ),..., P a (n a ) in aceeasi maniera si obtine solutiile S 1,..., S a asambleaza S 1,..., S a pentru a obtine solutia S a problemei P

Paradigma divide-et-impera: algoritm procedure DivideEtImpera(P, n, S) begin if (n <= n0) then determina S prin metode elementare else imparte P in P1,..., Pa DivideEtImpera(P1, n1, S1)... DivideEtImpera(Pa, na, Sa) Asambleaza(S1,..., Sa, S) end

Sortare prin interclasare (Merge sort) generalizare: a[p..q] baza: p q divide-et-impera divide: m = [(p + q)/2] subprobleme: a[p..m], a[m+1..q] asamblare: interclaseaza subsecventele sortate a[p..m] si a[m+1..q] initial memoreaza rezultatul interclasarii in temp copie din temp[0..p+q-1] in a[p..q] complexitate: timp : T(n) = O(n log n) (T(n) = 2T(n/2)+n) spatiu suplimentar: O(n)

Interclasarea a doua secvente sortate problema: date a[0] a[1] a[m-1], b[0] b[1] b[n-1], sa se construiasca c[0] c[1] c[m+n-1] a.i. ( k)(( i)c[k]=a[i]) ( j)c[k]=b[j]) solutia initial: i 0, j 0, k 0 pasul curent: daca a[i] b[j] atunci c[k] a[i], i i+1 daca a[i] > b[j] atunci c[k] b[j], j j+1 k k+1 conditia de terminare: i > m-1 sau j > n-1 daca e cazul, copie elementele din tabloul neterminat

Sortare rapida (Quick sort) generalizare: a[p..q] baza: p q divide-et-impera divide: determina k intre p si q prin interschimbari a.i. dupa determinarea lui k avem: p i k a[i] a[k] k < j q a[k] a[j] x x x p k q subprobleme: a[p..k-1], a[k+1..q] asamblare: nu exista

Quick sort: partitionare initial: x a[p] (se poate alege x arbitrar din a[p..q]) i p+1 ; j q pasul curent: daca a[i] x atunci i i+1 daca a[j] x atunci j j-1 daca a[i] > x > a[j] si i < j atunci swap(a[i], a[j]) i i+1 j j-1 terminare: conditia i > j operatii k i-1 swap(a[p], a[k])

Cautare in liste liniare cautare binara aspectul dinamic arbori AVL

Problema cautarii aspectul static U multime univers S U operatia de cautare: Instanta: a U Intrebare: a S? aspectul dinamic operatia de inserare Intrare: x U, S Iesire: S {x} operatia de stergere Intrare: x U, S Iesire: S {x}

Cautare in liste liniare - complexitate Tip de date Implementare Cautare Inserare Stergere Lista liniara Tablouri O(n) O(1) O(n) Liste inlantuite O(n) O(1) O(1) Lista liniara ordonata Tablouri Liste inlantuite O(log n) O(n) O(n) O(n) O(n) O(1)

Cautare binara aspect static - context multimea univers este total ordonata: (U, ) structura de data utilizata: array s[0..n-1] s[0]<... < s[n-1]

Cautare binara aspect static - algoritm function Poz(s, n, a) begin p 0; q n-1 m [(p+q)/2] while (s[m]!= a && p < q) do if (a < s[m]) then q m-1 else p m+1 m [(p+q)/2] if (s[m] = a) then return m else return -1; end

Arborele binar asociat cautarii binare T(p,q) m T(p,m-1) T(m+1,q) T = T(0,n-1) n = 6 0 2 4 1 3 5

Cautare binara: aspect dinamic arbore binar de cautare arbore binar cu proprietatea ca pentru orice nod v, valorile memorate in subarborele la stinga lui v < valoarea din v < valorile memorate in subarborele la dreapta lui v.

Cautare binara: aspect dinamic - cautare function Poz(t, a) begin p t while (p!= NULL && p->val!= a) do if (a < p->val) then p p->stg else p p->drp return p end

Cautare binara: aspect dinamic - inserare procedure insarbbincautare(t, x) begin if (t = NULL) then t (x) /*(x) e arborele cu 1 nod */ else p t while (p!= NULL) do predp p if (x < p->val) then p p->stg else if (x > p->val)then p p->drp else p NULL if (predp->val!= x) then if (x < predp->val) then adauga x ca fiu stinga a lui predp else adauga x ca fiu dreapta a lui predp end

Cautare binara: aspect dinamic - eliminare se cauta pentru x in arborele t; daca-l gaseste se disting cazurile: cazul 1: nodul p care memoreaza x nu are fii cazul 2: nodul p care memoreaza x are un singur fiu cazul 3: nodul p care memoreaza x are ambii fii determinanodulq care memoreaza cea mai mare valoare y mai mica decit x (coboara din p la stinga si apoi coboara la dreapta cit se poate) interschimba valorile din p si q sterge q ca in cazul 1 sau 2

Cautare binara: aspect dinamic - eliminare cazul 1 sau 2 procedure elimcaz1sau2(t, predp, p) begin if (p = t) then t devine vid sau unicul fiu al lui t devine radacina else if (p->stg = NULL) then inlocuieste in predp pe p cu p->drp else inlocuieste in predp pe p cu p->stg end

Cautare binara: aspect dinamic - eliminare procedure elimarbbincautare(t, x) begin if (t!= NULL) then p t while (p!= NULL && p->val!= x) do predp p if (x < p->val) then p p->stg else p p->drp if (p!= NULL) if (p->stg = NULL p->drp = NULL) then elimcaz1sau2(t, predp, p) else q p->stg; predq p while (q->drp!= NULL) predq q; q q->drp p->val q->val elimcaz1sau2(t, predq, q) end

Degenerarea cautarii binare in cautare liniara 20 elimina(10) 20 elimina(0) 20 elimina(50) 0 40 0 40 40 30 10 30 50 50 30 50 20 insereaza(35) 20 insereaza(32) 20 40 40 40 30 30 30 35 35 32

Arbori AVL un arbore binar de cautare t este un arbore AVL-echilibrat daca pentru orice virf v, h(v stg) h(v drp) 1 Lema t AVL-echilibrat h(t) = Θ(log n).

Arbori AVL Teorema Clasa arborilor AVL-echilibrati este O(log n) stabila. algoritmul de inserare nodurile au memorate si factorii de echilibrare ( { 1, 0, 1}) se memoreaza drumul de la radacina la nodul adaugat intr-o stiva (O(log n)) se parcurge drumul memorat in stiva in sens invers si se reechilibeaza nodurile dezichilibrate cu una dintre operatiile: rotatie stinga/dreapta simpla/dubla (O(log n)).

Rotatii y Rotatie dreapta simpla x x C A y A B B C A x y z Rotatie dreapta dubla D x y z B C A B C D