Diferente pentru problema/algsort intre reviziile #13 si #25

Diferente intre titluri:

Sortare prin comparare directa
Sortare prin comparare

Diferente intre continut:

table(example).
|_. algsort.in |_. algsort.out |
| 5
| 6
4 1 7 5 1 3 | 1 1 3 4 5 7 |
h2. Observatii
Limitele de timp si memorie folosite va ofera posibilitatea de a studia comparativ diverse implementari ale diversilor algoritmi de sortare intalniti.
 
In analiza comportamentului surselor evaluate trebuie sa tineti cont de faptul ca cea mai mare parte a timpului de executie va fi ocupata de citirea si scrierea datelor in fisier (pentru testele maxime, intre $400$ si $600 ms$ vor fi ocupate de operatiile de intrare/iesire). *Nu* este necesara folosirea functiilor specializate de citire a blocurilor de caractere (parsarea citirii) pentru a obtine punctajul maxim, insa recomandam folosirea stream-urilor C++, care se comporta mai bine in mediul de evaluare decat functiile de citire din libraria standard C.
h3. Structura testelor
Structura problemei cere implementarea unui 'algoritm de sortare pe baza de comparatii':http://en.wikipedia.org/wiki/Comparison_sort. Exista, de asemenea, algoritmi de sortare care nu compara explicit elementele si care au performante mai bune pentru anumite cazuri particulare ale structurii datelor de intrare; acestia nu se preteaza insa cerintelor impuse in cazul de fata.
Orice algoritm de sortare bazat pe comparatii trebuie sa efectueze, pentru a putea distinge corect toate cele <tex>N!</tex> permutari posibile ale sirului de valori, <tex>\Omega \left( N \cdot \log N \right)</tex> comparatii (o justificare a acestui rezultat se afla 'aici':http://www.cs.utexas.edu/~vlr/s07.357/notes/lb-apr5.pdf). Din aceasta perspectiva, algoritmi precum 'Merge Sort':http://en.wikipedia.org/wiki/Merge_sort, 'Heapsort':http://en.wikipedia.org/wiki/Heapsort sau 'Introsort':http://en.wikipedia.org/wiki/Introsort sunt optimi, executand <tex>\Theta \left( N \cdot \log N \right)</tex> operatii in cazul cel mai defavorabil. Dintre acestia, Merge Sort foloseste <tex>\mathit{O}\left( N \right)</tex> memorie suplimentara in implementarea clasica, deci nu se va incadra in restrictiile problemei.
Orice algoritm de sortare bazat pe comparatii trebuie sa efectueze, pentru a putea distinge corect toate cele <tex>N!</tex> permutari posibile ale sirului de valori, <tex>\Omega \left( N \cdot \log N \right)</tex> comparatii (o justificare a acestui rezultat se afla 'aici':http://www.cs.utexas.edu/~vlr/s07.357/notes/lb-apr5.pdf). Din aceasta perspectiva, algoritmi precum 'Merge Sort':http://en.wikipedia.org/wiki/Merge_sort, 'Heapsort':http://en.wikipedia.org/wiki/Heapsort sau 'Introsort':http://en.wikipedia.org/wiki/Introsort sunt optimi, executand <tex>\Theta \left( N \cdot \log N \right)</tex> operatii in cazul cel mai defavorabil. Dintre acestia, Merge Sort foloseste <tex>\mathit{O}\left( N \right)</tex> memorie suplimentara in implementarea clasica.
Un alt algoritm de sortare foarte popular este 'Quicksort':http://en.wikipedia.org/wiki/Quicksort. Desi complexitatea sa pentru cazul cel mai defavorabil este <tex>\mathit{O}\left( N^2 \right)</tex>, in practica se comporta foarte bine si cunoaste multe imbunatatiri (detalii in prezentarea profesorului Robert Sedgewick 'aici':http://www.sorting-algorithms.com/static/QuicksortIsOptimal.pdf si a profesorului Jon Bentley 'aici':blog/three-beautiful-quicksorts).
Pentru mai multe detalii si un studiu comparativ al algoritmilor de sortare vizitati 'pagina Wikipedia dedicata acestui subiect':http://en.wikipedia.org/wiki/Sorting_algorithm.
h2. Aplicatii
 
Sortarea datelor apare ca subproblema sau etapa intermediara intr-o larga varietate de probleme si algoritmi, fiind considerata astfel una dintre temele principale de studiu in informatica teoretica. Diverse strategii greedy cu aplicatii in planificarea activitatilor, determinarea 'arborilor partiali de cost minim':problema/apm ({'algoritmul lui Kruskal':http://en.wikipedia.org/wiki/Kruskal's_algorithm}) sau constructia 'codurilor Huffman':http://en.wikipedia.org/wiki/Huffman_coding, implica o prima etapa de sortare a datelor. De asemenea, in geometria computationala intalnim sortarea punctelor dupa unghiul polar pentru determinarea 'infasuratorii convexe':problema/infasuratoare sau metoda 'dreptei de baleiere':http://en.wikipedia.org/wiki/Sweep_line, care presupune sortarea punctelor-eveniment dupa anumite criterii.
 
Alte probleme in care este folosita (intr-o forma sau alta) sortarea datelor:
 
* 'Loto':problema/loto
* 'Reactivi':problema/reactivi
* "Akbardin’s Roads":http://acm.timus.ru/problem.aspx?space=1&num=1178
* 'Granita':problema/granita
* 'Lungimi de interval':problema/linterv
* 'Sport':problema/sport
* "Rooks":http://acm.sgu.ru/problem.php?contest=0&problem=269
* 'Cai':problema/cai
* "Inversions":http://acm.sgu.ru/problem.php?contest=0&problem=180
* 'Cutii':problema/cutii
* 'Invsort':problema/invsort
* 'Mexc':problema/mexc
* 'Demolish':problema/demolish
* "Wolves and Sheep":http://acm.sgu.ru/problem.php?contest=0&problem=349
* "Antenna":http://www.hsin.hr/ceoi2006/tasks/day1/antenna.pdf, _CEOI 2006_
* "Sails":http://hsin.hr/ioi2007/tasks/day1/sails.pdf, _IOI 2007_
 
== include(page="template/taskfooter" task_id="algsort") ==

Nu exista diferente intre securitate.

Diferente intre topic forum:

3513
3547