infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva educationala => Subiect creat de: Paul-Dan Baltescu din Ianuarie 06, 2009, 19:38:35



Titlul: 028 Sortare prin comparare
Scris de: Paul-Dan Baltescu din Ianuarie 06, 2009, 19:38:35
Aici puteti discuta despre problema Sortare prin comparare (http://infoarena.ro/problema/algsort) din Arhiva educationala (http://infoarena.ro/arhiva-educationala).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Danci Emanuel Sebastian din Ianuarie 24, 2009, 21:36:58
I need help!!
Am incercat vreo 5-6 sortari pana acuma si cum era de asteptat nu prea merg.
Una ia 100 - Introsortul din STL.
restul in cel mai bun caz 40.
Quicksort`urile pe care le-am incercat se apropie insa tot depasesc timpul la cateva teste.
Am o mica mare nelamurire. Algoritmul din articol (Merge Sort) da raspuns gresit pe testele "aproape sortate". De ce?
Cum se poate rezolva problema?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lucian Boca din Ianuarie 24, 2009, 23:13:09
Am incercat vreo 5-6 sortari pana acuma si cum era de asteptat nu prea merg.
Una ia 100 - Introsortul din STL.
restul in cel mai bun caz 40.
Depinde mult de ce algoritmi ai incercat. Daca sunt neoptimi (Bubble Sort, Insertion Sort, Selection Sort etc) este normal sa nu ia punctaj maxim. Introsort, pe de alta parte, este unul dintre cei mai eficienti algoritmi de sortare cunoscuti si ar trebui sa se comporte cel mai bine.

Quicksort`urile pe care le-am incercat se apropie insa tot depasesc timpul la cateva teste.
Quicksort-urile trebuie implementate atent pentru punctaj maxim. Cu toate acestea, varianta din libraria standard C (functia qsort) obtine 100 de puncte (http://infoarena.ro/job_detail/239877?action=view-source), chiar daca nu este din cate stiu eu (aici s-ar putea sa gresec) cea mai fericita varianta de quicksort. Incearca sa te uiti la prezentarile de care vorbeam in rubrica 'Solutii' si sa imbunatatesti versiunile tale de quicksort.

Am o mica mare nelamurire. Algoritmul din articol (Merge Sort) da raspuns gresit pe testele "aproape sortate". De ce?
Merge Sort-ul din articol ia 100 de puncte daca e implementat atent. O sursa gasesti aici (http://infoarena.ro/job_detail/239878?action=view-source).

Cum se poate rezolva problema?
Cu orice algoritm de aici (http://en.wikipedia.org/wiki/Sorting_algorithm#List_of_sorting_algorithms) care are O(n log n) pe coloana "Worst" :wink:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Luca Eduard din Februarie 07, 2009, 14:46:57
Selection Sort ia numai 40 de pct, e prea incet. Probabil ca si Bubble Sort care e si mai incet.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Bozianu Ana din Februarie 11, 2009, 16:34:59
Am trimis o sursa in care am utilizat un radixsort pe biti. Ulterior am descoperit ca avea o eroare (vezi http://infoarena.ro/job_detail/249770 (http://infoarena.ro/job_detail/249770) la linia 18 ar fi trebuit sa am d=dr-st+2 in loc de d=dr+1). Cu toate acestea sursa "defecta" mi-a scos 100 de puncte.
Nu reusesc sa inteleg de ce. Poate cineva sa se uite un pic pe sursa?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: E1 La5c01 din Februarie 14, 2009, 18:05:33
 :sad:
am si eu o intrebare..
fac un arbore binar si in parcurg in inordine(srd)
cu o sursa in pascal pot sa iau mai mult de 40 pct??
ms  :thumbup:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Paul-Dan Baltescu din Februarie 14, 2009, 18:18:42
Problema ta nu vine de la faptul ca implementezi in Pascal. Complexitatea ta in cazul cel mai defavorabil este O(N^2). Ai putea reduce la O(NlogN) daca ai folosi un arbore binar de cautare echilibrat.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Cosmin Negruseri din Februarie 14, 2009, 21:05:06
De ce ii zice la problema asta "sortare prin comparare directa"? Nu am mai auzit denumirea asta pe nicaieri, si nu cred ca e bine sa inventam noi denumiri.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Andrei Grigorean din Februarie 15, 2009, 08:49:19
Cred ca din cauza ca pentru a sorta compari elementele sirului (in contrast cu radixsort, de exemplu).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Cosmin Negruseri din Februarie 15, 2009, 09:46:04
Pai atunci de ce nu sortare prin comparare. Suna dubios comparare directa.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Radu Zernoveanu din Februarie 18, 2009, 10:35:57
Am facut evalul sa crape. Eroarea provine din faptul ca nu las spatiu la printare. (JOB #261387)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lucian Boca din Februarie 26, 2009, 00:12:54
Am facut evalul sa crape. Eroarea provine din faptul ca nu las spatiu la printare. (JOB #261387)

S-a rezolvat ;)
http://infoarena.ro/job_detail/266726 (http://infoarena.ro/job_detail/266726)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 09, 2009, 13:43:07
functia  qsort() din stdlib.h e mai rapida decat Qsort-ul scris manual ??
Am scris doua  surse  unua cu Qsort() scris de mine, a luat 40 ,aici e sursa (http://infoarena.ro/job_detail/274093), si una cu qsort() din stdlib.h si ia 100 pct,scris aici (http://infoarena.ro/job_detail/274063).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Tandrau Alexandru din Martie 09, 2009, 14:23:31
Incearca sa alegi un pivot random aici:

Cod:
long sort(long st,long dr)  

long x=v[st]; 
while(st<dr) 
    {while(st<dr&&v[dr]>=x) dr--;
...

In loc de v[st] alege un alt element aleator din intervalul [st,dr]. Cel mai simplu ar fi sa interschimbi elementul de pe pozitia st cu un element de pe o pozitie aleatoare din [st,dr] inainte de x = v[st];


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 09, 2009, 16:10:17
Si cum aleg un numar aleatoriu, dau random()?..........


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Tandrau Alexandru din Martie 09, 2009, 16:32:46
Cod:
int poz = st + rand() % (dr - st + 1);
long aux = v[poz]; v[poz] = v[st]; v[st] = aux;

long x = v[st];
while(st < dr)
...
...


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 09, 2009, 17:17:06
Multumesc  ..mai am putin de optimizat ...tot i-au 2 TLE, hm daca afiseaza corect timpul depasesc cu 4ms  :shock:
Poti sa-mi recomanzi o implementare a  intrasort, am cautat pe google dar nu gasesc :(


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Andrei Grigorean din Martie 09, 2009, 17:40:24
Nu implementeaza nimeni introsort de mana, de asta ai STL :)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 09, 2009, 17:55:34
hm ......stiu putine din STL, n-am apucat sa  intru in aprofunzime :(,  imi  poti arata  cum se face plsz. 


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Sima Cotizo din Martie 09, 2009, 18:05:13
Nici nu m-am mai dus pe google, am incercat direct pe wiki si am urmat primul link extern:
http://ralphunden.net/?q=a-guide-to-introsort
Cred ca e destul de bine explicat si are si o implementare din cate vad.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Emanuel Cinca din Martie 09, 2009, 18:07:44
Cod:
#include<algorithm>

using namespace std;

int v[100];

sort(v,v+n);//sau sort(v+1,v+1+n); daca folosesti v-ul de la 1 si nu de la 0


mai poti adauga o functie de comparare pentru a sorta dupa numite valori dintr-o structura de exemplu... dar asta s-a mai discutat aici : http://infoarena.ro/forum/index.php?topic=3706.0


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 09, 2009, 18:50:24
multumesc :D
Din cate vad  qosrt  este mai incet decat sort, vorbind de functiile de sortare :D


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Pripoae Teodor Anton din Martie 09, 2009, 20:28:11
Am implementat eu introsort in c mai demult, cand nu lucram pe c++ (mi-a luat ceva timp si cu copy paste in multe locuri), dar nu am stiut exact sa setez adancimea qsortului, astfel incat imi iese pe 2 teste din timp. Sursa e  aici  (http://infoarena.ro/job_detail/240079).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Florin Marius Popescu din Martie 23, 2009, 06:10:53
Sal ! help miii ! am implementat un quicksort in pascal si din cele 4 grupe de teste nu exista o grupa in care sa raspund corect la toate cele 4 teste/grupa, se incadreaza in timp la toate dar cand iau 0 cand iau 5 pe testuletz => 0 pct total :-k . Sa fie oare de la alegerea elementului de mijloc?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Andrei Grigorean din Martie 23, 2009, 13:43:00
Problema ta provine de la faptul ca atunci cand iti alegi pivotul iti fixezi pozitia lui in vector. Ar trebui sa iti fixezi valoarea. In sursa ta ar trebui sa fie:

Cod:
        i:=s; j:=d; x:=a[(s+d) div 2];
        repeat
          while a[i]<x do i:=i+1;
          while a[j]>x do j:=j-1;

Primeai raspuns gresit din cauza ca in interiorul instructiunii while valoarea de pe pozitia (s+d) div 2 se poate schimba.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Pripoae Teodor Anton din Martie 23, 2009, 14:18:24
Am trimis si eu o sursa in pascal, te poti uita  aici  (http://infoarena.ro/job_detail/286091) daca te intereseaza. Cred ca am implementat-o bine desi nu stiu prea bine pascal :).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Florin Marius Popescu din Martie 23, 2009, 19:52:01
ms mult fratilor  :yahoo: :banana: :banana: :peacefingers:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lazari Mihai din Aprilie 04, 2009, 10:00:35
Eu am implementat MergeSort in pascal si la primele 2 grupe de teste obtin toate punctele; la celelalte primesc mesajul "Non-zero exit status.". Poate cineva sa se uite la sursa (http://infoarena.ro/job_detail/296083 (http://infoarena.ro/job_detail/296083)) si sa-mi spuna ce am gresit?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Paul-Dan Baltescu din Aprilie 04, 2009, 11:05:18
Testele oficiale de la arhiva educationala sunt publice. Le poti descarca de la atasamente si iti poti testa singur. :)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lazari Mihai din Aprilie 04, 2009, 13:18:07
Multumesc. Am gasit greseala: foloseam intr-o procedura tipul integer in loc de longint. Am trimis sursa modificata de 3 ori. Prima data am primit "Time Limit Exceeded" la testul 20, a doua oara - la testul 18, iar a treia - am 100 puncte  :shock:  :yahoo:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Chibici Tiberiu din Aprilie 05, 2009, 13:14:23
Am luat 100 puncte cu CombSort


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: A Cosmina - vechi din Iulie 18, 2009, 22:53:01
La BubbleSort si Insertion Sort iau 40 de puncte.



Cu Rank Sort iau 0. La sortarea asta este o problema si la mine pe calculator la limita. Nu accepta 500 000.  :-k Am incercat si cu #define ,oare ce-ar putea sa fie?

O sa ma straduiesc mai mult pt o sursa de 100.

Edit: Am scos 100 de puncte (http://infoarena.ro/job_detail/332699?action=view-source) cu QSort.  :rastabanana: (ce tare e emoticonul ) .


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Septembrie 17, 2009, 19:11:38
Cu Rank Sort iau 0.
Pai  nu l-ai facut "universal". Varianta pe care ai scriso tu o folosesti cand esti sigura ca nici un element nu se repeta, dar in cazul acesta nu se specifica. Iar in legatura cu limita de memorie, poate fi din cauza ca ide-ul pe care il folosesti nu aloca suficienta memorie. Incearca sa aloci memoria  dinamic ;)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Pripoae Teodor Anton din Septembrie 17, 2009, 21:49:35
Cu Rank Sort iau 0.
Pai  nu l-ai facut "universal". Varianta pe care ai scriso tu o folosesti cand esti sigura ca nici un element nu se repeta, dar in cazul acesta nu se specifica. Iar in legatura cu limita de memorie, poate fi din cauza ca ide-ul pe care il folosesti nu aloca suficienta memorie. Incearca sa aloci memoria  dinamic ;)

Alexandrule, zici prostii :

1. IDE-ul nu are nicio legatura cu alocarea memoriei, cel mult poate limita memoria procesului, dar asta pe windows nu-i chiar asa usor si nici sigur, si oricum nu ar avea de ce sa o faca.

2. Chiar daca aloci memoria dinamic, tot pe heap se aloca, nu e ca in borland.

Mai documenteaza-te putin inainte sa postezi.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: George Popoiu din Decembrie 30, 2009, 20:48:16
cu Quicksort in care iau pivotul primul element iau 40pct, cu mergesort 100.

Este mai rapid sort decat un mergesort sau un quicksort cu pivot random?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Pripoae Teodor Anton din Decembrie 31, 2009, 00:56:16
Da.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Simoiu Robert din Decembrie 31, 2009, 16:00:14
Eu am facut cu qsort si am luat lejer 100 pct. Nu stiu dar eu zic ca e eficient si nu e greu de stiut :D


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: George Popoiu din Decembrie 31, 2009, 16:55:08
Citat
Eu am facut cu qsort si am luat lejer 100 pct. Nu stiu dar eu zic ca e eficient si nu e greu de stiut

Da, dar am citit ca sortu din STL e foarte rapid, e mai rapid decat un QuickSort de manual sigur.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Simoiu Robert din Decembrie 31, 2009, 17:07:20
Uite aici (http://www.fredosaurus.com/notes-cpp/algorithms/sorting/stl-sort-arrays.html) mai multe despre STL sort, daca nu stii deja :D
Uite aici (http://infoarena.ro/job_detail/379285) algoritmul meu cu qsort si aici (http://infoarena.ro/job_detail/379304) cel cu sortul din STL. Da intr-adevar e mai rapid :D si consumator mult mai mic de memorie


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Zabolai Zsolt din Martie 02, 2010, 20:54:02
Am luat 100 pct cu shellsort... e la limita...
http://infoarena.ro/job_detail/404004

Dar spuneti-mi si mie care e smecheria ca de atuncia am mai incercat cu quicksort si tot iau 80 de pct, indiferent cum o fac.... am incercat si sa copiez o sursa de 100 pct si tot 80... am copiat dintro carte un quicksort si tot 80 puncte... am tradus la pascal o sursa de c++ de aci si tot 80 de puncte...  ???  :angry:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Andrei Grigorean din Martie 03, 2010, 01:32:48
Probabil e din cauza ca folosesti Pascal.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Cosmin Negruseri din Martie 03, 2010, 01:57:51
@Andrei mai lasa-ma cu pascalu, tot bagi ideea asta cand nu ii poti ajuta pe pascalisti. E din cauza citirii fara buffere.

@Zsolt foloseste instructiunea settextbuf si incearca mai multe dimensiuni de buffere, cred ca 32000 e o dimensiune buna.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lodoaba Sorin din Martie 03, 2010, 11:38:54
15 960ms 7900kb Time limit exceeded.   :readthis:
bug... timpul e de 1 s


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lepadat Mihai-Alexandru din Martie 03, 2010, 11:45:11
15 960ms 7900kb Time limit exceeded.   :readthis:
bug... timpul e de 1 s
Am patit si eu asa, dar dupa ce-am retrimis sursa mi-a aparut un timp peste timpul limita.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 03, 2010, 12:12:13
15 960ms 7900kb Time limit exceeded.   :readthis:
bug... timpul e de 1 s
Defapt sursa ta chiar depaseste 1s dar timpii afisati in borderou sunt orientativi nu exacti :)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Simoiu Robert din Martie 03, 2010, 12:25:51
Exact, gandestete daca ai o bucla infinita, crezi ca programul sta la infinit sa ruleze? El ti-l opreste dupa limita maxima.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lepadat Mihai-Alexandru din Martie 03, 2010, 12:55:17
Heapsort-ul nu obtine 100 pct? Eu nu reusesc sa iau decat 80.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Simoiu Robert din Martie 03, 2010, 12:56:17
Optimizat s-ar putea ...


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lepadat Mihai-Alexandru din Martie 03, 2010, 13:26:11
Optimizat s-ar putea ...
Ai idee cum sa-l optimizez? :weightlift:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 03, 2010, 13:52:32
Heapsort-ul nu obtine 100 pct? Eu nu reusesc sa iau decat 80.
Ba obtine :P
http://infoarena.ro/job_detail/379339?action=view-source
LE: vad ca lucrezi in pascal, parseaza citirea cu settextbuf ( vezi mai sus )


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lepadat Mihai-Alexandru din Martie 03, 2010, 14:29:53
Am obtinut imbunatatiri semnificative la timpi dar tot la 80 pct am ramas ](*,).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 03, 2010, 14:49:15
Fa functiile iterativ :)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lepadat Mihai-Alexandru din Martie 03, 2010, 15:03:26
Din moment ce recursivitatea nu apeleaza aceeasi functie de 2 ori(pentru a pierde timp), de ce ar merge mai rapid iterativ?:-' In plus e mult mai elegant recursiv. :thumbup:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: George Popoiu din Martie 03, 2010, 15:27:46
@skull prin recursivitate programul lucreaza cu stiva, si de aici s-ar putea sa fie mai incet programul.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Zabolai Zsolt din Martie 03, 2010, 15:28:07
ms mult Cosmin!

Nu stiu cum nu am mai auzit de asta.... dar e foarte fain, a taiat timpul de executie la jumate :D
http://infoarena.ro/job_detail/409234


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Lepadat Mihai-Alexandru din Martie 03, 2010, 15:43:47
Am folosit settextbuf si pt. fisierul de iesire si deja au aparut timpi mult mai buni. Merci Cosmin & Alexandru. :yahoo:

LE: Functia settextbuf "pacaleste" doar compilatorul folosit pe infoarena sau si pe cele de la oji/oni? Ca doar o asemenea imbunatatire de timp poate face diferenta.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Zabolai Zsolt din Martie 03, 2010, 18:42:35
cred ca la oni compilatorul e tot fpc si ar trebui sa mearga :thumbup:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: alexandru din Martie 03, 2010, 19:15:04
Am folosit settextbuf si pt. fisierul de iesire si deja au aparut timpi mult mai buni. Merci Cosmin & Alexandru. :yahoo:

LE: Functia settextbuf "pacaleste" doar compilatorul folosit pe infoarena sau si pe cele de la oji/oni? Ca doar o asemenea imbunatatire de timp poate face diferenta.
IDE-ul de la oji/oni e Free Pascal, deci da :)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Cosmin Negruseri din Martie 03, 2010, 20:40:56
@alexandru free pascal nu e ide, ci e compilator.

settextbuf nu parseaza citirea ci in loc sa citeasca caracter cu caracter citeste o portiune de marimea bufferului, asta face citirea de pe disc mai eficienta.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: etg wea tw din Iunie 26, 2010, 09:45:40
Cod:
#include<stdio.h>
long n,j,i,aux,v[50001];
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld",&v[i]);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(v[j]<v[i])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
for(i=1;i<=n;i++)
printf("%ld ",v[i]);
return 0;
}

 :readthis: Imi da TLE-uri cam pe jumatate din teste!Nu inteleg de ce.... :sad: :wink:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Simoiu Robert din Iunie 26, 2010, 10:07:01
Din cate vad eu acea sortare nu esti "optima" ... Iti trebuie o sortare in O ( N logN ) .


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: George Marcus din Octombrie 25, 2010, 00:15:36
Chiar nu inteleg de ce nu iau 100... sau macar punctaj mai mare.
http://infoarena.ro/job_detail/495408?action=view-source

Edit: Nu conteaza. Construiam heap-ul gresit. Faceam upheap de jos in sus. Stupid, stupid me. #-o ](*,)

P.S.: Quicksort sux !


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Sebastian Crisan din Ianuarie 02, 2011, 21:38:58
La multi ani!

A incercat cineva sortare pe liste inlantuite? Am incercat un Merge sort pe liste simplu inlantuite, dar am luat 80p. Vreo idee cum as putea imbunatati solutia? http://infoarena.ro/job_detail/518727
Mersi!


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Walter Bruce Willis din Ianuarie 02, 2011, 22:29:25
din cate stiu eu nu poti sorta eficient liste.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Paul Herman din Mai 03, 2011, 18:53:50
Ati putea sa-mi spuneti si mie ce s-ar putea optimiza la http://infoarena.ro/job_detail/587011 deoarece nu ia 100p, iar acelasi algoritm scris in Pascal ia punctajul maxim http://infoarena.ro/job_detail/587028 ?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Simoiu Robert din Mai 03, 2011, 20:24:33
In sursa Cpp, incearca sa inlocuiesti unsigned long long cu int si vezi rezultatele ;).


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: c a e n din Decembrie 01, 2011, 20:34:24
Cu qsort-ul din C nu am mai reusit sa iau 100. E in regula, sau ar trebui sa il adaug la lista cu limite care trebuie calibrate?

Job 1: http://infoarena.ro/job_detail/615319 (http://infoarena.ro/job_detail/615319)
Job 2: http://infoarena.ro/job_detail/642627 (http://infoarena.ro/job_detail/642627)


Titlul: Răspuns: Mesaje de eroare
Scris de: Miclescu Laura din Decembrie 30, 2011, 13:29:21
Buna!
Am trimis urmatoarea problema si imi spune ca fisierul de iesire e corupt si o chestie cu killed by signal 11. Imi puteti spune ce nu e in regula?

Cod:
#include <iostream>
#include <fstream>

using namespace std;

int a[100], n;

void interclasare (int i, int m, int j)
{
     int b[100];
     int x=i;
     int k=1;
     int y=m+1;
     while ((x<=m)&&(y<=j))
       if (a[x]<a[y])
           b[k++]=a[x++];
       else
           b[k++]=a[y++];
     while (x<=m)
           b[k++]=a[x++];
     while (y<=j)
           b[k++]=a[y++];
     int t=i;
     for (k=i; k<=(j-i)+1; k++)
          {a[t]=b[k];
           t++;}
}

void div_imp (int i, int j)
{
     if (i<j)
        {int m=(i+j)/2;
         div_imp(i,m);
         div_imp(m+1,j);
         interclasare(i,m,j);}
}

int main()
{
    int a[100], p=0, q=0;
    fstream f("algsort.in", ios::in);
    while (!f.eof())
      {p++;
       f>>a[p];
       q++;}
    for (p=1; p<q; p++)
        cout<<a[p]<<" ";
    f.close();
    div_imp(1,n);              
    fstream g("algsort.out", ios::out);
    for (p=1; p<q; p++)
         g>>a[p];
    g.close();
    return 0;    
}      
                                               

job #654373

Editat de admin: Foloseste tagul "code" cand postezi surse.


Titlul: Răspuns: Răspuns: Mesaje de eroare
Scris de: Simoiu Robert din Decembrie 30, 2011, 13:53:00
Din cate vezi, nu ai 100 elemente, ai 500.000 :P. Pune limita 500005 si e suficient :).


Titlul: Răspuns: Răspuns: Mesaje de eroare
Scris de: Miclescu Laura din Decembrie 31, 2011, 11:22:26
Multumesc, SpiderMan; imi scapase asta. Dar imi spune in continuare ca fisierul de iesire e corupt. Nu inteleg de ce. Vreo sugestie?


Titlul: Răspuns: Răspuns: Mesaje de eroare
Scris de: Simoiu Robert din Decembrie 31, 2011, 11:35:05
Cod:
 for (p=1; p<q; p++)
         g>>a[p];
Aici nu cumva e <= q in for ? Daca nu e asta, o sa iau codul sa ma uit pe el :).


Titlul: Răspuns: Răspuns: Mesaje de eroare
Scris de: Miclescu Laura din Decembrie 31, 2011, 11:40:20
Am modificat si da aceeasi eroare. Ai putea sa te uiti pe ea putin, te rog? :D


Titlul: Răspuns: Răspuns: Mesaje de eroare
Scris de: George Marcus din Decembrie 31, 2011, 13:04:22
- Variabila n ti-e neinitializata (ma rog, e 0, dar nu cred ca asta iti doresti)
- Din cate vad tu introduci in sirul de numere si numarul de pe prima linie a fisierului (adica numarul care ar trebui sa reprezinte numarul de elemente ale sirului). Poti citi acel numar separat si apoi citirea sirului cu un for.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Miclescu Laura din Decembrie 31, 2011, 17:48:50
Multumesc, merge acum :)


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Cretu Bogdan din Iunie 29, 2013, 13:28:02
Deci cel mai eficient algoritm de sortare este 'Merge sort'???  :D


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Alexandru Valeanu din Iunie 29, 2013, 18:42:20
Nu neaparat...gandeste-te ca pe un sir aproape sortat MergeSort-ul e O(NlogN) pe cand BubbleSort-ul e aprope liniar....Nu exista un cel mai bun algoritm de sortare ...toate au cazuri particulare pe care nu sunt cele mai bune

PS: MergeSort-ul este sigur O(NlogN) pe orice tip de sir asa ca da...e destul de bun


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Cretu Bogdan din Iunie 29, 2013, 22:20:34
Mersi ca m-ai luminat! ^_^
 :thumbup:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Rares Cheseli din Iunie 30, 2013, 14:32:57
Din cate stiu eu, BubbleSort-ul are complexitate n^2. Are complexitate liniara doar cand sirul este deja sortat.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: George Marcus din Iunie 30, 2013, 21:47:47
Acelasi lucru l-a zis si Alexandru  ???


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Rares Cheseli din Iunie 30, 2013, 21:50:23
Greseala mea  :oops:. Nu citisem partea aia  :oops:


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Andrei Pavel din Mai 31, 2016, 01:04:35
A reusit cineva sa ia 100 cu un quick sort cu pivot random implementat de mana?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Valeriu Motroi din Mai 31, 2016, 07:48:00
adaugă
Cod:
ios_base::sync_with_stdio(0);
în funcția main
ar trebui să ei 100.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Alexandru Valeanu din Mai 31, 2016, 11:44:20
@contnou Vezi ca nu ai chiar pivot random.
Pentru a folosi rand() ar trebui sa ai si srand(time(...)) pe undeva prin cod.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Andrei Pavel din Iunie 03, 2016, 03:57:09
http://www.infoarena.ro/job_detail/1712585?action=view-source

Am ascultat sfaturile voastre si nu reusesc sa iau 100.

A reusit cineva sa ia 100 cu un quick sort cu pivot random implementat de mana?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Bogdan Pop din August 26, 2016, 21:47:34
La problema asta nu ar trebui sa fie acces liber la surse?E singura din arhiva educationala la care nu sunt sursele vizibile pentru toata lumea


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: andrei din Septembrie 15, 2016, 03:24:58
Am 3 surse cu arbori care pica din cauza memoriei prea mici(au nevoie de aprox 12mb) , oare se poate modifica limita de memorie ca sa se accepte si solutii cu arbori?


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Gafton Mihnea Alexandru din Noiembrie 17, 2016, 10:57:29
Salut, a bagat cineva problema asta cu Shell Sort? Daca da, cu ce valori de gap?
Eu am incercat cu {701, 301, 132, 57, 23, 10, 4, 1} si iau TLE
Multumesc anticipat!


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Alexandru Valeanu din Noiembrie 17, 2016, 15:40:10
Eu am luat punctaje foarte variate cu Shellsort (de la 40p pana la 100p).
100p : http://www.infoarena.ro/job_detail/1477734  | Gaps : 1, 9, 34, 182, 836, 4025, 19001, 90358, 428481
100p : http://www.infoarena.ro/job_detail/1477742  | Gaps : 1, 2, 4, 8, 21, 56, 149, 404, 1098, 2982, 8104, 22027, 59875, 162756, 442414

N.B. Ar trebui sa nu se poata lua 100p cu Shellsort, dar este destul de greu de facut teste pentru toate secvențele 'celebre'.


Titlul: Răspuns: 028 Sortare prin comparare
Scris de: Gafton Mihnea Alexandru din Noiembrie 21, 2016, 21:07:12
Multumesc pentru ajutor !  :D