Nu aveti permisiuni pentru a descarca fisierul grader_test17.in
Diferente pentru problema/sdo intre reviziile #35 si #43
Nu exista diferente intre titluri.
Diferente intre continut:
== include(page="template/taskheader" task_id="sdo") ==
A $i$-a'statistică de ordine':http://en.wikipedia.org/wiki/Order_statistic a unei mulţimi este al $i$-lea cel mai mic element al mulţimi. Fiind date o mulţime de numere naturale $A$, de $N$ elemente şi un număr natural $K$, să se determine a $K$-a statistică de ordine a mulţimii.
'A $i$-a statistică de ordine':http://en.wikipedia.org/wiki/Order_statistic a unei mulţimi este al $i$-lea cel mai mic element al mulţimi. Fiind date o mulţime de numere naturale $M$, de $n$ elemente şi un număr natural $k$, să se determine a $k$-a statistică de ordine a mulţimii.
h2. Date de intrare
Fişierul de intrare $sdo.in$ conţine pe prima linie $N$ şi $K$, iar pe a doua linie $N$ numere naturale, reprezentând elementele mulţimii $A$.
Fişierul de intrare $sdo.in$ conţine pe prima linie $n$ şi $k$, iar pe a doua linie $n$ numere naturale, reprezentând elementele mulţimii $M$.
h2. Date de ieşire
În fişierul de ieşire $sdo.out$ se va afla un singur număr natural, reprezentând a $K$-a statistică de ordine a mulţimii.
În fişierul de ieşire $sdo.out$ se va afla un singur număr natural, reprezentând a $k$-a statistică de ordine a mulţimii.
h2. Restricţii
* $1 ≤K≤N≤ 3 000 000$ * Toate cele $N$ elemente ale mulţimii $A$ sunt din intervalul $[1, 10^9^]$
* $1 ≤ k ≤ n ≤ 3 000 000$. * Toate cele $n$ elemente ale mulţimii $M$ sunt din intervalul $[1, 10^9^]$.
h2. Exemplu
h3. Explicaţie
În exemplu, se observă că elementele aranjate în ordine crescătoare sunt: $1 4 **6** 7 10 11 13 14$, prin urmare al 3-lea cel mai mic element este 6.
În exemplu, se observă că elementele aranjate în ordine crescătoare sunt: $1 4 **6** 7 10 11 13 14$, prin urmare al $3$-lea cel mai mic element este $6$.
Oprimă 'soluţie':job_detail/370055?action=view-source, care numără pentru fiecare element câte elemente sunt maimicidecâtel, având complexitatea de <tex>O(N^2)</tex>, şi artrebui să obţină $10$ puncte.
h2. Indicaţii de rezolvare
O altă'soluţie':job_detail/371158?action=view-source careselecteazăcele mai mici$K$elemente, având complexitatea <tex>O(N*K)</tex> obţineîn jur de$20$ puncte.
'Soluţia':job_detail/370055?action=view-source ce numără pentru fiecare element câte elemente sunt mai mici decât el, având complexitatea de <tex> O(n^2) </tex>, ar trebui să obţină $10$ puncte.
Altă'soluţie':job_detail/369661?action=view-sourcecaresorteazăelementeleîn ordinecrescătoareşiare complexitatea <tex>O(Nlog_{2}N)</tex> artrebuisăobţină$50$ puncte.
Dacă modificăm algoritmul de 'sortare prin selecţie':http://en.wikipedia.org/wiki/Selection_sort pentru a selecta cele mai mici $k$ elemente, obţinem complexitatea <tex> O(nk) </tex>. Această 'soluţie':job_detail/371158?action=view-source obţine în jur de $20$ puncte.
Oaltă 'soluţie':job_detail/369662?action=view-source,cucomplexitatea<tex>O(Nlog_{2}K)</tex>,care foloseşteun heap pentruamenţine cele maimici$K$ elementeartrebuisă obţină$60$puncte.O'soluţie':job_detail/371237?action=view-sourcecareobţinetot $60$ de puncte este cea de complexitate <tex>O(N+Klog_{2}K)</tex>. Deşi complexitatea este teoretic maibună,ease comportămai slabdecât cea menţionatăanterior,datorită folosiriiunei structuri carerulează mai încet, $priority_queue$.
Una din îmbunătăţiri constă în 'sortarea':problema/algsort elementelor în complexitate <tex> O(n log_{2}n) </tex> şi selectarea valorii căutate în $O(1)$. 'Soluţia':job_detail/369661?action=view-source ar trebui să obţină $50-60$ puncte.
O 'soluţie':job_detail/371166 care sorteazăelementeleîn timpaproape liniar,folosindradixsort artrebuisăobţinăînjur de$70$depuncte.
O altă 'soluţie':job_detail/369662?action=view-source, cu complexitatea <tex> O(n log_{2}k) </tex>, foloseşte un 'heap':problema/heapuri pentru a menţine cele mai mici $k$ valori. Aceasta ar trebui să obţină $60$ puncte, fiind o îmbunătăţire faţă de soluţia anterioară. În continuare, dacă construim un heap în complexitate <tex> O(n) </tex> iar pe acesta realizăm o 'parcurgere în lăţime':problema/bfs ajungem la 'soluţia':job_detail/371237?action=view-source ce obţine acelaşi punctaj de complexitate <tex> O(n+klog_{2}k) </tex>. Deşi complexitatea este teoretic mai bună, ea se comportă mai slab decât cea menţionată anterior, datorită folosirii unei structuri de date ce încetineşte uşor, $priority_queue$.
'Soluţia':cea mai eficientă foloseşte funcţiadepartiţionare a quicksort-ului pentruadetermina a $K$-a statistică deordine. Practic, acest algoritmestefoarteasemănător quicksort-ului, doar că în locsă sesorteze totşirul se vor sorta doar anumite porţiuni careajută ladeterminareasoluţiei. Însă aceastăsoluţie obţine $90$ de puncte. Pentru $100$ de puncte sevafolosi un pivotrandom, în loc de un pivot fixat. Complexitateaacestui algoritmeste înmedie<tex>O(N)</tex>,însăteoreticîn cel mai defavorabil caz poateatinge<tex>O(N^2)</tex> pentru că amputea fi extrem de nenorocoşisă partiţionămîn jurulceluimai mare element rămas. Dardeoarecealgoritmuleste aleator, nu există datedeintrareparticulare caresă provoace comportamentul celuimaidefavorabil caz, acesta fiindmotivul pentru care algoritmulcareselecteazăpivotulrandom estemai eficient decât cel careselecteazăun pivotfixat. Acestalgoritm este implementatşiînSTL, funcţia 'nth_element':http://cplusplus.com/reference/algorithm/nth_element/găsindu-seînheaderul'algorithm':http://cplusplus.com/reference/algorithm/.O sursă demonstrativă segăseşte'aici':job_detail/369659?action=view-source.Există şiun algoritmteoreticcegarantează <tex>O(N)</tex>pe cel maidefavorabil caz,caresepoate găsiîn Cormenlacapitolul "Statistici de Ordine".
O 'soluţie':job_detail/371166?action=view-source care foloseşte proprietatea că valorile sunt numere întregi, sortează elementele în timp liniar cu algoritmul 'radix sort':http://en.wikipedia.org/wiki/Radix_sort. Această sursă ar trebui să obţină în jur de $70$ de puncte. Motivele acestui punctaj constau în dimensiunea mare a datelor de intrare şi memoria suplimentară folosită.
h3. Aplicaţii
'Soluţia':/job_detail/372622?action=view-source cea mai eficientă foloseşte funcţia de partiţionare a quicksort-ului pentru a determina a $k$-a statistică de ordine. Practic, acest algoritm este asemănător algoritmului 'Quicksort':http://en.wikipedia.org/wiki/Quicksort, cu deosebirea că se vor sorta doar anumite porţiuni care ajută la determinarea soluţiei. Însă, această soluţie obţine $90$ de puncte. În 'sursa':job_detail/372623?action=view-source de $100$ de puncte se va folosi un pivot ales aleator, în locul unui pivot fixat. Complexitatea acestui algoritm este în medie <tex> O(n) </tex>, însă, teoretic, în cel mai defavorabil caz poate atinge <tex> O(n^2) </tex> pentru că am putea fi extrem de nenorocoşi să partiţionăm în jurul celui mai mare element rămas. Dar, deoarece algoritmul este aleator, nu există date de intrare particulare care să provoace comportamentul celui mai defavorabil caz. Iată motivul pentru care algoritmul ce selectează pivotul random este mai eficient decât cel care selectează un pivot fixat. Acest algoritm este implementat şi în STL: funcţia 'nth_element':http://cplusplus.com/reference/algorithm/nth_element/ găsindu-se în headerul 'algorithm':http://cplusplus.com/reference/algorithm/. O sursă demonstrativă se găseşte 'aici':job_detail/369659?action=view-source. Există şi un algoritm teoretic ce garantează <tex> O(n) </tex> pe cel mai defavorabil caz, şi se poate găsi în cartea '„Introducere în algoritmi”':http://zhuzeyuan.hp.infoseek.co.jp/ita/toc.htm la capitolul '„10. Statistici de Ordine”':http://zhuzeyuan.hp.infoseek.co.jp/ita/chap10.htm. h2. Aplicaţii
* 'Toys':problema/toys * 'Geometrie':problema/geom
Nu exista diferente intre securitate.
Diferente intre topic forum:
4353