Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Documente similare
Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Diapositive 1

SUBPROGRAME

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Ecuatii si sisteme de ecuatii neliniare 1 Metoda lui Newton Algorithm 1 Metoda lui Newton pentru ecuaţia f(x) = 0. Date de intrare: - Funcţia f - Apro

ALGORITHMICS

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Divide et Impera

Declararea variabilelor

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Subiectul 1

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Programarea şi utilizarea calculatoarelor

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

E_d_Informatica_sp_SN_2014_bar_10_LRO

carte2008.dvi

Ministerul Educatiei, Cercetarii si Tineretului Grup Scolar Gh. Asachi Galati Proiect pentru obtinerea certificatului de competente profesionale Speci

Slide 1

Backtracking_2018

Limbaje de Programare Curs 5 – Siruri de caractere

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

1

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

E_d_Informatica_sp_MI_2015_bar_02_LRO

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Tablouri (continuare)

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Calcul Numeric

L7

SSC-Impartire

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Lucrarea 7 Filtrarea imaginilor BREVIAR TEORETIC Filtrarea imaginilor se înscrie în clasa operaţiilor de îmbunătăţire, principalul scop al acesteia fi

Microsoft Word - CarteC.doc

Facultatea de Matematica si Informatica Universitatea din Bucuresti Structuri liniare Liste. Stive. Cozi - Inserare, cautare, stergere - Lectii de pre

PCLPII-C16(9)

Analiză statică Analiza fluxului de date 23 octombrie 2014

Microsoft PowerPoint - Fp_2.ppt

Slide 1

Microsoft Word - CarteC.doc

PHP (II)

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

Logică și structuri discrete Mulțimi Casandra Holotescu

Slide 1

Slide 1

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Slide 1

proiectarea bazelor de date

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

tehnologii web

Probleme rezolvate informatica: Probleme rezolvate grafuri si a

Capitole Speciale de Informatică Curs 2: Determinarea vocabularului de termeni şi a listelor de postări 4 octombrie 2018 Reamintim că listele de indec

Metode de programare Proiectarea algoritmilor

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Slide 1

Programarea şi utilizarea calculatoarelor

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Teoria Grafurilor şi Combinatorică recapitulare Principii de numărare Reţineţi că: P (n, r) este numărul de şiruri (sau r-permutări) de forma A 1,...,

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

ALGORITHMICS

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

4. Detectarea cantelor Calculul gradientului într-o imagine Detectorul de cante Canny Transformata Hough În această lucrare vor fi studiate metode de

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Curs8

Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S

PPSD

CAPITOLUL I

Facultatea de Automatică și Calculatoare

MergedFile

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

-

Top

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Aggregating Data

Paradigme de programare

Microsoft Word - Curs 7 - JavaScript.doc

1

Concurs online de informatică Categoria PROGRAMARE Secţiunea 5-6 avansaţi PROBLEMA puncte DANS De 1 Iunie - Ziua Copilului se organizează un spe

Microsoft Word - PCLP2_Curs_4_2019.doc

Analiză de flux de date 29 octombrie 2012

Grile si probleme siruri de caractere in C++ ŞIRURI DE CARACTERE Itemii următori sunt preluaţi din variantele de bacalaureat În secvenţa de i

Slide 1

Microsoft Word - Ivan, Boja.doc

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

UNIVERSITATEA DE STAT "ALECU RUSSO"

Microsoft Word - Curs_08.doc

RZOLVARE EXERCITIU ZODII declare cursor distributie_zodie is select nume_zodie, count(*) distributie from zodiac z join utilizatori u on to_date(to_ch

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Transcriere:

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Interclasare Analiza complexităţii unui algoritm

Metode de căutare Datele se află în memoria internă, într-un şir. Vom căuta un element în șir și returnăm poziţia elementului căutat (dacă acesta există). Se dă (date): un șir de numere și numărul care se caută Se cere (rezultate): poziția elemetului în șir Dacă lucrăm cu șiruri ordonate este util să aflăm nu numai dacă există un element în șir ci şi să găsim în caz contrar locul în care ar trebui inserat un nou element, astfel încât să se păstreze ordinea existentă.

Căutare secvenţială Ideea: Verificăm pe rând elementele din șir până când găsim elementul căutat Exemplu: sir = 1, 7, 3, 5, 2 x = 3 Rezultat: 2 sir = 1, 7, 3, 5, 2 x = 4 Rezultat: -1

Căutare secvenţială - Implementare în C /** * cauta elementul x in sirul v * returneaza pozitia elementului x in v */ int cautaresecventiala(int x, vector& v) { int poz = -1; int i = 0; while (i < v.n && poz == -1) { if (v.e[i] == x) { poz = i; else { i++; return poz;

Căutare secvenţială - Implementare în Pascal function cautsecv(v:vector;x:integer):integer; var poz,i:integer; begin poz:=0; i:=1; while (i<=v.n) and (poz=0) do if (v.e[i]=x) then poz:=i else i:=i+1; cautsecv:=poz;

Analiza complexităţii unui algoritm Putem analiza complexitatea unui algoritm în raport cu: durata de execuție cantitatea de memorie necesară; Timpul necesar executiei unui program depinde de numarul operațiilor ce trebuie executate. calculatorul (hardware), sistemul de operare, limbajul folosit pentru implementare, etc Cand analizam complexitatea ne raportam la numărul de operații executate, acesta depinde de datele de intrare Analiză complexității ne dă ordinul lor de mărime a timpului de execuție (sau spațiului utilizat) în raport cu dimensiunea datelor de intrare Complexitate căutare secvenţială: O(n)

Căutare binară Doar pentru căutare în șir ordonat Ideea: Se determină în ce relaţie se află elementul aflat în mijlocul șirului cu elementul ce se caută. În urma acestei verificări căutarea se continuă doar într-o jumătate a șirului. În acest mod, prin înjumătăţiri succesive se micşorează volumul șirului rămas pentru căutare Exemplu: sir ordonat= 1, 3, 5, 7, 8 x = 3 Rezultat: 1 sir ordonat = 1, 3, 5, 7, 8 x = 4 Rezultat: 2

Căutare binară - Implementare în C /** * cauta x in subsirul [st,dr] */ int cautbinar_rec(vector& v, int x, int st, int dr) { if (st >= dr - 1) { return dr; else { int m = (st + dr) / 2; if (x <= v.e[m]) { return cautbinar_rec(v, x, st, m); else { return cautbinar_rec(v, x, m, dr); /* * v este ordonat crescator * rezultatul e pozitia pe care apare x sau pe care ar trebui inserat x */ int cautbinar(vector& v, int x) { if (x <= v.e[0]) { return 0; if (x > v.e[v.n - 1]) return v.n; else return cautbinar_rec(v, x, 0, v.n - 1);

Căutare binară - Implementare în Pascal function cautbinar_rec(v:vector;x,st,dr:integer):integer; var m:integer; begin if (st>=dr-1) then begin cautbinar_rec:=dr end else begin m:=(st+dr) div 2; if x<=v.e[m] then cautbinar_rec:=cautbinar_rec(v,x,st,m) else cautbinar_rec:=cautbinar_rec(v,x,m,dr); function cautbinar(v:vector;x:integer):integer; {v este ordonat crescator {rezultatul e pozitia pe care apare x sau pe care ar trebui inserat x var poz:integer; begin if (x<=v.e[1]) then poz:=1 else if (x>v.e[v.n]) then poz:=v.n+1 else poz:=cautbinar_rec(v,x,1,v.n); Complexitate: O(log 2 n)

Metode de ordonare Rearanjare a unui șir de elemente aflate în memoria internă astfel încât elementele să fie ordonate crescător (eventual descrescător). Date: un șir de elemente Rezultate: Șirul ordonat crescator (descrescătpor)

Metoda bulelor Ideea: Compară două câte două elemente consecutive iar în cazul în care acestea nu se află în relaţia dorită, ele vor fi interschimbate. Procesul de comparare se va încheia în momentul în care toate perechile de elemente consecutive sunt în relaţia de ordine dorită Exemplu: șir: 4, 1, 6,-1, 2 Rezultat: -1, 1, 2, 4, 6

Metoda bulelor - Implementare în C /** * sortare folosind metoda bulelor */ void sortarebule(vector& v) { bool ordonat = false; while (!ordonat) { ordonat = true; //presupunem sirul este ordonat for (int i = 1; i < v.n; i++) { if (v.e[i - 1] > v.e[i]) { //interschimbam int aux = v.e[i - 1]; v.e[i - 1] = v.e[i]; v.e[i] = aux; ordonat = false;

Metoda bulelor - Implementare în Pascal procedure sortbule(var v:vector); var i,t:integer; ordonat:boolean; begin repeat ordonat:=true; for i:=2 to v.n do if v.e[i-1]>v.e[i] then begin t:=v.e[i-1]; v.e[i-1]:=v.e[i]; v.e[i]:=t; ordonat:=false; until ordonat; Complexitate metoda bulelor: O(n 2 )

Metoda inserţiei Ideea: traversăm elementele, inserăm elementul curent pe poziția corectă în subșirul care este deja ordonat. În acest fel elementele care au fost deja procesate sunt în ordinea corectă. După ce am traversat tot șirul toate elementele vor fi sortate. Exemplu: șir: 4, 1, 6,-1, 2 Rezultat: -1, 1, 2, 4, 6

Metoda inserţiei - Implementare în C /** * sorteaza v */ void sortareinsertie(vector& v) { for (int i = 1; i < v.n; i++) { int ind = i - 1; int x = v.e[i]; while (ind >= 0 && x < v.e[ind]) { v.e[ind + 1] = v.e[ind]; ind--; v.e[ind + 1] = x;

Metoda inserţiei - Implementare în Pascal procedure sortinsertie(var v:vector); var i,j,ind,x:integer; begin for i:=2 to v.n do begin ind:=i-1; x:=v.e[i]; while (ind>0) and (x<v.e[ind]) do begin v.e[ind+1] := v.e[ind]; ind:=ind -1; end end Complexitate: O(n 2 )

Metoda selecţiei Ideea: Se determină poziţia elementului cu valoare minimă (respectiv maximă), după care acesta se va interschimba cu primul element. Acest procedeu se repetă pentru subșirul rămas, până când mai rămâne doar elementul maxim. Exemplu: șir: 4, 1, 6,-1, 2 Rezultat: -1, 1, 2, 4, 6

Metoda selecţiei - Implementare în C /** * sortare folosind metoda selectiei */ void sortareselectie(vector& v) { for (int i = 0; i < v.n - 1; i++) { //selectam minimul din restul sirului int minpoz = i; for (int j = i + 1; j < v.n; j++) { if (v.e[minpoz] > v.e[j]) { minpoz = j; //mutam minimul pe pozitia curenta if (minpoz!= i) { int aux = v.e[minpoz]; v.e[minpoz] = v.e[i]; v.e[i] = aux;

Metoda selecţiei - Implementare în Pascal procedure sortselectie(var v:vector); {selectia minimului var i,j,ind,t:integer; begin for i:=1 to v.n-1 do begin ind:=i; for j:=i+1 to v.n do if v.e[j]<v.e[ind] then ind:=j; if i<ind then begin t:=v.e[i]; v.e[i]:=v.e[ind]; v.e[ind]:=t; Complexitate: O(n 2 )

Metoda numărării Ideea: Se da un sir de elemente distincte. Pentru fiecare element numarăm elementele care sunt mai mici, astfel aflăm poziția elementului în șirul ordonat. Exemplu: șir: 4, 1, 6,-1, 2 Rezultat: -1, 1, 2, 4, 6

Metoda numărării - Implementare în C /** * sorteaza v */ void sortarenumarare(vector& v) { //se face o copie a sirului vector v2 = v; for (int i = 0; i < v.n; i++) { //numaram cate elemente sunt mai mici int nrmaimici = 0; for (int j = 0; j < v.n; j++) { if (v2.e[j] < v2.e[i]) { nrmaimici++; v.e[nrmaimici] = v2.e[i];

Metoda numărării - Implementare în Pascal procedure sortnumarare(var v:vector); var i,k,j,x:integer; v1:vector; begin v1:=v; for i:=1 to v1.n do begin {numar cate elemente sunt mai mici decat v.e[i] k:=0; x:=v1.e[i]; for j:=1 to v1.n do if v1.e[j]<x then k:=k+1; v.e[k+1]:=x; Complexitate: O(n 2 )

Interclasare Fiind date două șiruri de numere, ordonate crescător (sau descrescător), se cere să se obţină un șir care să fie de asemenea ordonat crescător (respectiv descrescător) şi care să fie formată din elementele șirurilor date. Ideea: Șirul rezultat se poate obţine direct (fără o sortare a șirului final) prin parcurgerea secvenţială a celor două șiruri, simultan cu generarea șirului cerut. Prin compararea a două elemente din listele de intrare se va decide care element va fi adăugat în lista de ieşire. Exemplu: șir 1: 1, 3, 4, 5 șir 1:-1, 2, 3 Rezultat: -1, 1, 2, 3, 3, 4, 5

Interclasare - Implementare în C void adaugasf(vector& v, int x) { v.e[v.n] = x; v.n++; void interclasare(vector v1, vector v2, vector& rez) { rez.n = 0; int i = 0; int j = 0; while (i < v1.n && j < v2.n) { if (v1.e[i] <= v2.e[j]) { adaugasf(rez, v1.e[i]); i++; else { adaugasf(rez, v2.e[j]); j++; for (int k = i; k < v1.n; k++) { adaugasf(rez, v1.e[k]); for (int k = j; k < v2.n; k++) { adaugasf(rez, v2.e[k]);

Interclasare - Implementare în Pascal procedure adaugasf(var v:vector;x:integer); begin v.n:=v.n+1; v.e[v.n]:=x; procedure interclasare(v1,v2:vector;var rez:vector); var i,j,k:integer; begin rez.n:=0; i:=1; j:=1; while (i<=v1.n) and (j<=v2.n) do if (v1.e[i]<=v2.e[j]) then begin adaugasf(rez,v1.e[i]); i:=i+1; end else begin adaugasf(rez,v2.e[j]); j:=j+1; for k:=i to v1.n do adaugasf(rez,v1.e[k]); for k:=j to v2.n do adaugasf(rez,v2.e[k]); Complexitate: O(m + n)