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

Documente similare
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

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

Diapositive 1

Lucrarea nr. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

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

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.

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

Programarea şi utilizarea calculatoarelor

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Ingineria Sistemelor de Programare

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

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

Slide 1

Microsoft Word - CarteC.doc

Laborator 3

L7

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

E_d_Informatica_sp_MI_2015_bar_02_LRO

Top

Microsoft Word - Algoritmi genetici.docx

1

E_d_Informatica_sp_SN_2014_bar_10_LRO

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

Slide 1

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

Object Oriented Programming

SUBPROGRAME

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

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

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

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

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

Procesarea Imaginilor Laborator 3: Histograma nivelurilor de intensitate 1 3. Histograma nivelurilor de intensitate 3.1. Introducere În această lucrar

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Paradigme de Programare

PROGRAMARE ORIENTATA PE OBIECTE

Subiectul 1

Paradigme de programare

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Microsoft Word - PCLP2_Curs_4_2019.doc

PCLPII-C16(9)

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

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

CURS

Laborator Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate r

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

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

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

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

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

ALGORITHMICS

Metode de programare Proiectarea algoritmilor

Declararea variabilelor

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

Ingineria Sistemelor de Programare

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

Programarea şi utilizarea calculatoarelor

Analiză statică Analiza fluxului de date 23 octombrie 2014

Microsoft Word - CarteC.doc

OPERATII DE PRELUCRAREA IMAGINILOR 1

PROIECT DIDACTIC Clasa a VII-a Informatică și TIC

proiectarea bazelor de date

Microsoft Word - Curs1.docx

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

Limbaje de Programare Curs 6 – Functii de intrare-iesire

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

-

Secţiunea 9-10 avansaţi Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 TEXT 100 puncte Un text este format din una sau mai multe propoz

Slide 1

Tema laborator TS.NET 2019 Vom simula (partial, in scop didactic) activitatea unui service auto. Pentru aceasta vom considera urmatoarele tipuri: Clie

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

Manual de Informatică pentru licenţă iulie și septembrie 2018 Specializarea Informatică Tematica generală: Partea 1. Algoritmică şi programare 1. Căut

Școala: Clasa a V-a Nr. ore pe săptămână: 4 Profesor: MATEMATICĂ Clasa a V-a Aviz director PLANIFICARE CALENDARISTICĂ ORIENTATIVĂ Nr. crt. Unitatea de

SSC-Impartire

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

Microsoft Word - lab4.doc

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Programarea şi utilizarea calculatoarelor

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

PowerPoint Presentation

Slide 1

INSTITUTUL DE DEZVOLTARE A SOCIETĂŢII INFORMAŢIONLE

-

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

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

Instructiuni licenta - 2

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

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

Inteligență artificială Laboratorul 8 Perceptronul și rețele de perceptroni în Scikit-learn Stanga :multimea de antrenare a punctelor 3d; Dreapta : mu

Tablouri (continuare)

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

PPSD

Facultatea de Automatică și Calculatoare

Ministerul Educaț iei al Republicii Moldova Universitatea de Stat Alecu Russo din Bălț i Facultatea Ș tiinț e Reale, Economice ș i ale Mediului Catedr

Transcriere:

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou într-o ordine precisă. Cele mai folosite tipuri de date în cadrul acestor metode de sortare sunt tipul de ordin numeric şi tipul lexicografic. Eficienta metodelor de sortare este importantă deoarece se pune un mare accent pe optimizarea altor algoritmi (cum sunt algoritmii de căutare) care necesită sortarea tablourilor cu care lucrează, devenind astfel mai eficienti. Dacă un algoritm realizează o sortare prin procedee complexe el poate avea o comportare avantajoasă, comportare mulţumitoare sau o comportare dezavantajoasa. Prin complexitatea metodei (calcului) se întelege efectuarea operaţiilor de comparare a valorii unui termen oarecare din tabloul de marime n, cu celelelte n valori ale termenilor prezenţi în cadrul aceluiaşi tablou. Pentru algoritmii de sortare eficienţi funcţia de comportare va fi O(n logn), iar cea mai dezavantajoasă comportare poate fi în cazul în care funcţia de comportare este de O(n 2 ). Comportarea ideală pentru un algoritm de sortare este O(n). Dintre cei mai cunoscuiti algoritmi de sortare putem enumera: 1. Heap sort 2. Sortare prin numarare 3. Sortare prin inserare 4. Metoda Shell 5. Metoda bulelor - Bubble Sort 6. Quicksort 7. Sortare prin selectie 8. Sortare prin interclasare 9. Bucket sort (bin sort) 10. Radix sort In cadrul acestei lucrari vor fi abordati cativa dintre acesti algoritmi, realizandu-se totodata si o scurta prezentare a principiului de sortare specific respectivului algoritm prezentat. I. Algoritmul Bubble Sort Regulile acestui algoritm sunt extrem de simple: 1. Sunt comparate 2 valori. 2. Dacă cea din stânga este mai mare decât cea din dreapta se inversează locul lor. 3. Se continuă algoritmul cu o pozitie la dreapta. O reprezentare grafica a acestui algoritm, relativ la o mulţime de persone este exemplificată în imaginile următoare:

Se reia compararea de N-1 ori, în cazul în care şirul are N locaţii. Aplicatie. Creaţi un proiect nou BubbleSort şi introduceţi următoarele două clase: class CreareSir private double[] a; private int NrElmts; public CreareSir(int max) a = new double[max]; NrElmts = 0; public void introduelement(double value) a[nrelmts] = value; NrElmts++; public void afiseaza() for(int j=0; j<nrelmts; j++) System.out.print(a[j] + " "); System.out.println(""); public void bubblesort() int out, in; for(out=nrelmts-1; out>1; out--) for(in=0; in<out; in++) if( a[in] > a[in+1] ) inverseazapozitii(in, in+1); private void inverseazapozitii(int one, int two) double temp = a[one]; a[one] = a[two]; a[two] = temp; class BubbleSortProgram public static void main(string[] args) int maxsize = 100; CreareSir vector = new CreareSir(maxSize); vector.introduelement(77);

vector.introduelement(99); vector.introduelement(44); vector.introduelement(55); vector.introduelement(22); vector.introduelement(88); vector.introduelement(11); vector.introduelement(00); vector.introduelement(66); vector.introduelement(33); System.out.println("Sirul initial neordonat are urmatoarea forma"); vector.bubblesort(); System.out.println("Sirul ordonat are urmatoarea forma"); Numărul total de comparaţii realizate în cadrul programului, pentru vectorul cu 10 componente este: 9+8+7+6+5+4+3+2+1. În general, daca N este numărul de elemente al vectorului support pentru componente, atunci numărul total de comparatii este: (N 1) + (N 2) + (N 3) +... + 1 = N*(N 1)/2 Aproximând destul de bine, putem considera că algoritmul face un total de N 2 /2 comparaţii (acel -1 nu are mare importanţă dacă N este destul de mare). II. Sortarea prin selecţie Explicatiile legate de acest algorim, vor fi prezentate cu referire directa la realizarea sortarii prin selectie pentru a aranja elementele dintr-un sir (array) in ordine crescatoare. Algoritmul functioneaza astfel: In cadrul colectiei de date care urmeaza a fi sortate (initial, intreaga structura), gaseste cel mai mic articol; Plaseaza acest articol in prima pozitie (a structurii nesortate), inlocuind orice element care se afla deja acolo si muta elementul inlocuit la pozitia celui mai mic articol; Sectiunea nesortata contine acum un element mai putin (articolul tocmai considerat a fi cel mai mic si prin urmare, mutat); Continua plasarea celui mai mic element nesortat in prima pozitie pana cand toate datele au fost sortate. Aplicatie: Creaţi un proiect nou SelectionSort şi implementaţi următoarele clase. class CreareSir private double[] a; private int NrElmts; public CreareSir(int max) a = new double[max]; NrElmts = 0;

public void introduelement(double value) a[nrelmts] = value; NrElmts++; public void afiseaza() for(int j=0; j<nrelmts; j++) System.out.print(a[j] + " "); System.out.println(""); public void selectionsort() int out, in, min; for(out=0; out< NrElmts -1; out++) min = out; for(in=out+1; in< NrElmts; in++) if(a[in] < a[min] ) min = in; inverseazapozitii(out, min); private void inverseazapozitii(int one, int two) double temp = a[one]; a[one] = a[two]; a[two] = temp; class SelectionSortProgram public static void main(string[] args) int maxsize = 100; CreareSir vector = new CreareSir(maxSize); vector.introduelement(77); vector.introduelement(99); vector.introduelement(44); vector.introduelement(55); vector.introduelement(22); vector.introduelement(88); vector.introduelement(11); vector.introduelement(00); vector.introduelement(66); vector.introduelement(33); System.out.println("Sirul initial neordonat are urmatoarea forma"); vector.selectionsort(); System.out.println("Sirul ordonat are urmatoarea forma"); Chiar dacă această metodă utilizează pentru comparare acelaşi număr de proceduri ca şi sortarea bubble sort: N*(N 1)/2, avantajul acestei metode rezidă din faptul că numărul de schimbări de locuri, între

termenii şirului este mult mai mic decât în cazul anterior. Pentru cazul în care N este foarte mare, această din urmă metodă este net superioară din punct de vedere al reducerii timpului de execuţie. III. Sortarea prin inserare Sortarea prin insertie este un algoritm caracteristic procedurilor de sortare care opereaza cu tablouri cu un numar mic de elemente. Principial algoritmul opereaza astfel: - tabloul este divizat in doua parti - o parte sortata si o parte nesortata - initial, partea sortata contine doar primul element al tabloului, iar partea nesortata contine restul tabloului. - cu fiecare pas, algoritmul ia primul element din partea nesortata si il insereaza in locul potrivit al partii sortate. Cand partea nesortata nu mai are nici un element, algoritmul se opreste. Aplicatie: Creaţi un nou proiect InsertionSort şi implementaţi următoarele clase: class CreareSir private double[] a; private int NrElmts; public CreareSir(int max) a = new double[max]; NrElmts = 0; public void introduelement(double value) a[nrelmts] = value; NrElmts++; public void afiseaza() for(int j=0; j<nrelmts; j++) System.out.print(a[j] + " "); System.out.println(""); public void insertionsort() int in, out; for(out=1; out<nrelmts; out++) double temp = a[out]; in = out; while(in>0 && a[in-1] >= temp) a[in] = a[in-1]; --in; a[in] = temp; private void inverseazapozitii(int one, int two) double temp = a[one]; a[one] = a[two];

a[two] = temp; class InsertionSortProgram public static void main(string[] args) int maxsize = 100; CreareSir vector = new CreareSir(maxSize); vector.introduelement(77); vector.introduelement(99); vector.introduelement(44); vector.introduelement(55); vector.introduelement(22); vector.introduelement(88); vector.introduelement(11); vector.introduelement(00); vector.introduelement(66); vector.introduelement(33); System.out.println("Sirul initial neordonat are urmatoarea forma"); vector.insertionsort(); System.out.println("Sirul ordonat are urmatoarea forma"); Aplicatie: Creaţi un proiect nou SortarePersoane şi implementaţi următoarele clase. class Persoana private String Prenume; private String Nume; private int varsta; public Persoana(String last, String first, int a) Prenume = last; Nume = first; varsta = a; public void afisarepersoana() System.out.print(" Pren. persoanei: " + Prenume); System.out.print(",Numele persoanei: " + Nume); System.out.println(", Varsta: " + varsta); public String preiaprenume() return Prenume; class CreareLista private Persoana[] a; private int nelems; public CreareLista(int max) a = new Persoana[max];

nelems = 0; public void inserarepersoana(string last, String first, int varsta) a[nelems] = new Persoana(last, first, varsta); nelems++; public void afisare() for(int j=0; j<nelems; j++) a[j].afisarepersoana(); System.out.println(""); public void Sortare() int in, out; for(out=1; out<nelems; out++) Persoana temp = a[out]; in = out; while(in>0 && a[in-1].preiaprenume().compareto(temp.preiaprenume())>0) a[in] = a[in-1]; --in; a[in] = temp; class SortarePersoane public static void main(string[] args) int maxsize = 100; CreareLista arr = new CreareLista(maxSize); arr.inserarepersoana("ionescu", "Alin", 24); arr.inserarepersoana("ionescu", "Aladin", 59); arr.inserarepersoana("silvestru", "Vasile", 37); arr.inserarepersoana("anrdeescu", "Ivan", 37); arr.inserarepersoana("stamate", "Dan", 43); arr.inserarepersoana("popescu", "Ion", 21); arr.inserarepersoana("popescu", "Ionut", 29); arr.inserarepersoana("popescu", "Liviu", 72); arr.inserarepersoana("anghelescu", "Lucia", 22); arr.inserarepersoana("constantin", "Lavinia", 18); System.out.println("Inainte de sortare:"); arr.afisare(); arr.sortare(); System.out.println("Dupa sortare:"); arr.afisare();

Probleme propuse Pentru proiectul BubbleSort 1. Modificaţi programul BubbleSort astfel încât să puteţi calcula media aritmetică a elementelor şirului. Pentru proiectul SelectionSort 1. Modificaţi programul SelectionSort astfel încât să puteţi calcula media aritmetica a primei jumataţi a şirului ordonat, apoi media aritmetică a celei de-a doua jumătăţi a şirului ordonat. Pentru proiectul InsertionSort 1. Comentaţi acest program. 2. Ce rol are fiecare metodă introdusă? 3. Ce avantaje are această metodă de sortare comparativ cu celelalte? 4. Modificaţi programul astfel încât din folosirea ca argument a unei litere să puteţi realiza sortarea prin una din cele 3 metode. Afişarea va fi diferită pentru fiecare din metodele de sortare utilizate. Pentru proiectul SortarePersoane 1. Ce metodă de sortare foloseşte acest program? 2. Modificaţi programul utilizând toate celelalte metode de sortare.