Diferente pentru problema/interclas intre reviziile #8 si #14

Nu exista diferente intre titluri.

Diferente intre continut:

== include(page="template/taskheader" task_id="interclas") ==
Se dau doua siruri de numere intregi ordonate crescator, $A$ si $B$ de lungime $N$, respectiv $M$. Se cere afisarea unui sir de numere ordonate crescator, obtinut prin concatenarea sirurilor A si B.
Se dau doua siruri de numere intregi ordonate crescator, $A$ si $B$ de lungime $N$, respectiv $M$. Se cere afisarea unui sir de numere ordonate crescator, care contine elemente atat din sirul $A$, cat si din $B$.
h2. Date de intrare
h2. Restricţii si precizari
* $1 ≤ N, M ≤ 900 000$
* $N+M ≤ 1 000 000$
* Elementele din sirurile $A$ si $B$ nu vor depasi $20 000 000$.
* Elementele din sirurile $A$ si $B$ sunt pozitive si nu vor depasi $20 000 000$.
* Elementele din sirurile $A$ si $B$ se pot repeta.
h2. Exemplu
h3. Indicatii de rezolvare
O prima solutie ar presupune citirea datelor intr-un acelasi sir si apoi sortarea acestuia. Complexitatea $O((N+M)log(N+M))$ nu este insa optima.
O prima solutie ar presupune citirea datelor intr-un acelasi sir si apoi sortarea acestuia. Complexitatea $O((N+M)log(N+M))$ nu este insa optima si ar obtine aproximativ 70 de puncte ( o implementare puteti gasi 'aici':job_detail/268730?action=view-source ).
Abordarea problemei presupune interclasarea celor doua siruri, operatie ce are complexitatea $O(N+M)$. Vom parcurge sirurile $A$ si $B$ simultan, cu doi iteratori - $i$ si $j$. La fiecare pas vom introduce in sirul $C$ (cerut de problema) elementul minim dintre $A[i]$ si $B[j]$, avand grija ca iteratorii sa nu fi trecut de numarul de elemente din sir.
Abordarea problemei presupune interclasarea celor doua siruri, operatie ce are complexitatea $O(N+M)$. Vom parcurge sirurile $A$ si $B$ simultan, cu doi iteratori - $i$ si $j$. La fiecare pas vom introduce in sirul $C$ (cerut de problema) elementul minim dintre $A[i]$ si $B[j]$, avand grija ca iteratorii sa nu fi trecut de numarul de elemente din sir.
Pentru exemplul problemei, primii pasi ai algoritmului pot fi urmatorii:
|_. Pas 1 |_. Pas 2 |_. Pas 3 |
|!problema/interclas?p1.JPG!
|!problema/interclas?p1.jpg!
Introduc pe $A[i]$, deci $C = (1)$
|!problema/interclas?p2.JPG!
|!problema/interclas?p2.jpg!
Introduc pe $B[j]$, deci $C = (1,2)$
|!problema/interclas?p3.JPG!
|!problema/interclas?p3.jpg!
Introduc pe $A[i]$, deci $C = (1,2,3)$|
|_. Pas 4 |_. Pas 5 |_. Pas 6 |
|!problema/interclas?p4.jpg!
Introduc pe $B[j]$, deci
$C = (1,2,3,4)$
|!problema/interclas?p5.jpg!
Introduc pe $A[i]$, deci
$C = (1,2,3,4,5)$
|!problema/interclas?p6.jpg!
Introduc pe $B[i]$, deci
$C = (1,2,3,4,5,6)$|
|_. Pas 7 |_. Pas 8 |_. Pas 9 |
|!problema/interclas?p7.jpg!
Introduc pe $A[i]$, deci
$C = (1,2,3,4,5,6,9)$
|!problema/interclas?p8.jpg!
Cum toate elementele din A au fost parcurse,
il introduc pe $B[j]$, deci $C = (1,2,3,4,5,6,9,10)$
|!problema/interclas?p9.jpg!
Introduc pe $B[j]$, deci
$C = (1,2,3,4,5,6,9,10,12)$ - raspuns final|
Sursa de 100 de puncte se gaseste 'aici':http://infoarena.ro . De asemenea, o implementare mai scurta a algoritmului se poate gasi 'aici':http://infoarena.ro .
Trebuie avuta in vedere necesitatea memoriei suplimentare la implementare. O prima varianta ar fi declararea sirul $C$ separat, cu $N+M$ elemente si "umplerea" acestuia pe parcurs ( cu sursa 'aici':http://infoarena.ro ). Se poate folosi insa numai $max(N,M)$ memorie suplimentara, considerand ca sirul $A$ are $N+M$ elemente ( o implementare 'aici':http://infoarena.ro ) sau $min(N,M)$ memorie daca se va avea in vedere marirea capacitatii sirului cu mai multe elemente ( cu implementarea 'aici':http://infoarena.ro )
 
O sursa de 100 de puncte care nu foloseste memorie suplimentara se gaseste 'aici':job_detail/261348?action=view-source . De asemenea, o implementare mai scurta a algoritmului se poate gasi 'aici':job_detail/261349?action=view-source .
 
Interclasarea este folosita in cadrul algoritmului merge-sort. Ideea de baza a acestui algoritm este ca un sir de un element este intotdeauna sortat, iar un sir cu lungimea mai mare decat 1 poate fi impartit in jumatati, sortat recursiv si apoi folosit algoritmul de interclasare pentru cele doua jumatati sortate. Puteti incerca rezolvarea 'problemei':problema/algsort din arhiva educationala.
== include(page="template/taskfooter" task_id="interclas") ==

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.