This shows you the differences between two versions of the page.
|
sda-ab:laboratoare:03 [2021/01/12 21:08] marina.ciocirlan [4. EXercitii] |
sda-ab:laboratoare:03 [2021/03/08 12:46] (current) andreea.udrea [3. Algoritmi de sortare] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Laboratorul 03: Algoritmi de cautare si sortare ===== | + | ===== Laboratorul 2: Algoritmi de cautare si sortare ===== |
| ====== 1. Obiectivele laboratorului ====== | ====== 1. Obiectivele laboratorului ====== | ||
| Line 13: | Line 14: | ||
| * Quick Sort | * Quick Sort | ||
| + | Cerinta si structura laboratorului se gaseste in **[[https://github.com/sda-ab/lab-02-tasks|acest link.]]** | ||
| ====== 2. Introducere ====== | ====== 2. Introducere ====== | ||
| Line 20: | Line 22: | ||
| **Algoritm** - o procedura / o secventa de pasi care rezolva o problema data intr-un mod repetabil si cu resurse (timp si memorie) finite; primeste un set de date de intrare si returneaza o solutie – set de date de iesire | **Algoritm** - o procedura / o secventa de pasi care rezolva o problema data intr-un mod repetabil si cu resurse (timp si memorie) finite; primeste un set de date de intrare si returneaza o solutie – set de date de iesire | ||
| + | |||
| + | [[https://en.citizendium.org/wiki/Complexity_of_algorithms]] | ||
| ====== 2.1 Calculul complexităţii algoritmilor ====== | ====== 2.1 Calculul complexităţii algoritmilor ====== | ||
| Line 241: | Line 245: | ||
| În cazul sortării prin interclasare, vectorii care se interclasează sunt două secvenţe ordonate din acelaşi vector. Sortarea prin interclasare utilizează metoda Divide et Impera: se împarte vectorul în secvenţe din ce în ce mai mici, astfel încât fiecare secvenţă să fie ordonată la un moment dat şi interclasată cu o altă secvenţă din vector corespunzătoare. Practic, interclasarea va începe când se ajunge la o secvenţă formată din două elemente. Aceasta, odată ordonată, se va interclasa cu o alta corespunzătoare(cu 2 elemente). Cele două secvenţe vor alcătui un subşir ordonat din vector mai mare(cu 4 elemente) care, la rândul lui, se va interclasa cu un subşir corespunzător(cu 4 elemente) ş.a.m.d. | În cazul sortării prin interclasare, vectorii care se interclasează sunt două secvenţe ordonate din acelaşi vector. Sortarea prin interclasare utilizează metoda Divide et Impera: se împarte vectorul în secvenţe din ce în ce mai mici, astfel încât fiecare secvenţă să fie ordonată la un moment dat şi interclasată cu o altă secvenţă din vector corespunzătoare. Practic, interclasarea va începe când se ajunge la o secvenţă formată din două elemente. Aceasta, odată ordonată, se va interclasa cu o alta corespunzătoare(cu 2 elemente). Cele două secvenţe vor alcătui un subşir ordonat din vector mai mare(cu 4 elemente) care, la rândul lui, se va interclasa cu un subşir corespunzător(cu 4 elemente) ş.a.m.d. | ||
| + | |||
| + | Subvectorii sortaţi sunt interclasaţi succesiv, ı̂n ordinea inversă divizarii, obţinând ı̂n final vectorul sortat. | ||
| + | Iată un exemplu pentru vectorul [38, 27, 43, 3, 9, 82, 10]: | ||
| + | |||
| + | {{ :sda-ab:laboratoare:screenshot_from_2021-01-12_21-59-59.png?450 |}} | ||
| **3.5 Quick sort** | **3.5 Quick sort** | ||
| Line 254: | Line 263: | ||
| * alegerea unui element pe post de pivot | * alegerea unui element pe post de pivot | ||
| - | * parcurgerea vectorului din două părţi(de la stânga la pivot, de la dreapta la pivot, ambele în acelaşi timp) | + | * mutarea elementelor cu valori mai mici decat pivotul inaintea acestuia si a celor mai mari dupa pivot; stabilirea pozitiei finale a pivotului |
| - | * interschimbarea elementelor care se află pe „partea greşită“ a pivotului(mutăm la dreapta pivotului elementele mai mari, la stânga pivotului elementel mai mici) | + | * după ce mutăm elementele pe „partea corectă“ a pivotului, avem 2 subşiruri de sortat, pentru fiecare repetam procedura de mai sus. |
| - | * divizarea algoritmului: după ce mutăm elementele pe „partea corectă“ a pivotului, avem 2 subşiruri de sortat, iar pivotul se află pe poziţia bună. | + | |
| - | ====== 4. Exercitii ====== | + | ====== 4. Exercitii propuse====== |
| 1. Alegeţi un algoritm A(dintre Bubble, Insertion şi Selection) şi un algoritm B(dintre Merge şi Quick). Introduceţi variabile globale cu care să contorizaţi numărul de comparaţii pentru algoritmii A şi B. Comparaţi rezultatele pentru un vector de întregi de lungime n = 20. | 1. Alegeţi un algoritm A(dintre Bubble, Insertion şi Selection) şi un algoritm B(dintre Merge şi Quick). Introduceţi variabile globale cu care să contorizaţi numărul de comparaţii pentru algoritmii A şi B. Comparaţi rezultatele pentru un vector de întregi de lungime n = 20. | ||
| 2. Implementaţi un algoritm(dintre Bubble, Insertion şi Selection) pentru sortarea unui vector cu n cuvinte de maxim 4 litere fiecare. | 2. Implementaţi un algoritm(dintre Bubble, Insertion şi Selection) pentru sortarea unui vector cu n cuvinte de maxim 4 litere fiecare. | ||
| - | 3. Implementaţi un algoritm(dintre Merge şi Quick) pentru sortarea unui vector de structuri, unde fiecare structură reprezintă un moment de timp(int ora,min,sec). | + | 3. Implementaţi un algoritm(dintre Merge şi Quick) pentru sortarea unui vector de cu inregistrari de tip ora_exacta, unde structura ora_exacta are campurile intregi: ora, min,sec. |
| + | 4. Considerăm un pachet de cărţi. Extragem random n cărţi. Sortaţi aceste cărţi folosind metoda inserţiei. | ||
| + | 5. Scrieţi un program eficient care să afişeze primele k cele mai mari elemente dintr-un vector. Elementele nu | ||
| + | sunt ordonate, ci ordinea lor este una aleatoare. De exemplu dat vectorul v = [1, 23, 12, 9, 30, 2, 50], dacă k = 3, vrem cele mai mari 3 elemente care sunt 50, 30, 23 | ||