Afişează mesaje
|
Pagini: [1]
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 009 Algoritmul lui Dijkstra
|
: Aprilie 08, 2011, 16:57:52
|
Eu am facut cu priority_queue si a intrat in timp. M-am uitat pe sursa ta... Incearca sa citesti cu fstream pentru ca merge mai bine pe infoarena uneori  Am optimizat toate maruntisurile si nu trece. La sursele mele prostia e ca vreau sa modific costul unui element din heap si sa-i mut pozitia in heap. Asta inseamna sa urmaresc pozitia tuturor elementelor in heap si sa folosesc cand trebuie sa le mut pozitia. La sursa ta vad ca pur si simplu adaugi acelas nod dar cu alt cost. Daca are distanta mica atunci ajunge in varful heapului, daca nu, se pierde si nu ajunge sa-l procesezi vreodata. O sa incerc make_heap cu idea ta sa vad ce iese. Multumesc!
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: parcurgere pe coloane
|
: Decembrie 14, 2008, 21:04:32
|
In primul caz matricea are 10 linii si 10^6 coloane, cand face parcurgere pe coloane cred ca sare din 10^6 in 10^6 locatii de memorie, iar in al doilea caz are 10^6 linii, 10 coloane si sare din 10 in 10 locatii de memorie. Nu stiu cum functioneaza linia de cache, dar m-as astepta sa se strice la fel de rau in ambele cazuri, sau atunci cand sare din 10 in 10 sa mearga mai repede daca face prefetch la mai multe locatii secventiale. Am observat ca parcurgerea pe linii(pt ambele matrici, normala si transpusa) dureaza aproximativ la fel de mult ca si cea pe coloane cand matricea are 10 linii si 10^6 coloane.
|
|
|
10
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / parcurgere pe coloane
|
: Decembrie 14, 2008, 16:54:02
|
programul ... face o parcurgere pe coloane, dureaza 0.21s. Daca inversez sa fie N 1000000 si M 10 dureaza 0.36s. de unde vine diferenta, nu face la fel de multe salturi si pentru matricea transpusa? #define M 1000000 #define N 10 int a[N][M]; int main () {long i,j; for (i=0;i<M;i++) {for (j=0;j<N;j++) {a[j][i]=1; } } return 0; }
|
|
|
|