Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sda-ab:laboratoare:08 [2021/04/11 17:16]
leonard.necula [Obiective]
sda-ab:laboratoare:08 [2021/05/24 12:59] (current)
leonard.necula [Probleme propuse]
Line 156: Line 156:
    - Implementați metoda de sortare heapsort.    - Implementați metoda de sortare heapsort.
    - Aflați eficient cele mai mari/mici k elemente dintr-un vector folosind un heap.    - Aflați eficient cele mai mari/mici k elemente dintr-un vector folosind un heap.
-    - **Hint**: Nu toate elementele trebuie introduse în heap+    - **Metoda I**: Folositi un min heap de dimensiune k pentru a stoca primele k elemente din vectorul primit ca parametru, apoi parcurgeti restul elementelor din vector. Daca elementul curent este mai mare decat varful heap-ului adaugati elementul in heap in locul varfului. Atentie: Asigurati-va ca dupa ce adaugati elementul refaceti proprietatea de min heap! 
 +    - **Metoda II**: Metoda II: Creati un min heap folosind valorile opuse ale elementelor din vectorul primit ca parametru, eliminati pe rand varful heap-ului de k ori, numerele rezultate vor fi numerele cu semn schimbat ale solutiei.
    - Fie un vector k-sortat de dimensiune n, sortați eficient vectorul k-sortat. Un vector se numeste k-sortat daca fiecăre element se află la maxim k poziții distanță de poziția sa din cadrul vectorului sortat.    - Fie un vector k-sortat de dimensiune n, sortați eficient vectorul k-sortat. Un vector se numeste k-sortat daca fiecăre element se află la maxim k poziții distanță de poziția sa din cadrul vectorului sortat.
-    - **Hint**: ​Se poate mai eficient ​de O(nlogn)+    - **Hint**: ​Creati un min-heap ​de dimensiune k+1, populati-l cu primele k+1 elemente, apoi parcurgeti restul elementelor,​ la fiecare pas stocati varful in vectorul solutie si adaugati urmatorul element din vector in heap. Nu uitati ca la final sa adaugati si elementele ramase in heap in vectorul solutie
    - Fie M vectori sortați de diferite dimensiuni. Interclasați vectorii eficient folosind un heap.    - Fie M vectori sortați de diferite dimensiuni. Interclasați vectorii eficient folosind un heap.
-    - **Hint**: Ce dimensiune ​trebuie să aibă heap-ul? +    - **Metoda I**: Implementati un min heap in care fiecare element este o pereche (valoarea, index_vector). Creati un min heap de acest tip de dimensiune ​M, introduceti primul element din fiecare vector. La fiecare pas din cadrul algoritmului eliminati radacina din heap, introduceti valoarea in vectorul solutie si adaugati in heap urmatorul element din vectorul corespunzator elementului abia eliminat. 
 +    - **Metoda II**: Implementati un min heap (vezi curs), folosind elemente de tip min heap implementati un heap in care fiecare element este un heap de sine statator. Pentru simplitate vom numii heap-ul ​de heap-uri heap global, iar heap-urile din acesta heap-uri interne. Creati un heap global de dimensiune M si populati fiecare heap intern cu cate unul dintre vectorii sortati, aplicati heapify pe toate nodurile interne ale heap-ului global. Cat timp heap-urile interne inca mai au elemente faceti urmatoarele operatii: 
 +      * Extrageti radacina radacinii heap-ului global si stocati valoarea in vectorul solutie 
 +      * Aplicati heapify pe radacina heap-ului global 
 +      * Aplicati heapify pe heap-ul global
  
  
Line 195: Line 199:
     - Tabelă de dispersie cu înlănțuire     - Tabelă de dispersie cu înlănțuire
     - Tabelă de dispersie cu adresare închisă     - Tabelă de dispersie cu adresare închisă
-   - Găsiți toate perechile de mulțimi simetrice dintr-un vector de mulțimi de 2 elemente. Două mulțimi sunt simetrice dacă capătul din stanga al primei mulțimi este egal cu cel din dreapta a celei de-a doua, iar cătul din dreapta al primei este egal cu cel din stanga al celei de-a doua.+   - Găsiți toate perechile de mulțimi simetrice dintr-un vector de mulțimi de 2 elemente. Două mulțimi sunt simetrice dacă capătul din stanga al primei mulțimi este egal cu cel din dreapta a celei de-a doua, iar capătul din dreapta al primei este egal cu cel din stanga al celei de-a doua.
    * **Exemplu**:​ { [10, 20], [20, 10], [1, 11], [1, 10], [10, 1]} => {[10, 20], [1, 10]}    * **Exemplu**:​ { [10, 20], [20, 10], [1, 11], [1, 10], [10, 1]} => {[10, 20], [1, 10]}
    * **Hint**: Se folosește o singură tabelă de dispersie.    * **Hint**: Se folosește o singură tabelă de dispersie.
sda-ab/laboratoare/08.1618150575.txt.gz · Last modified: 2021/04/11 17:16 by leonard.necula
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0