•sir_icemaster
Strain
Karma: -2
Deconectat
Mesaje: 9
|
|
« : Aprilie 16, 2007, 17:09:48 » |
|
Am auzit ca e mai recomandat ++i decat i++, beneinteles, cand ambele optioni sunt disponibile. E mai rapid sau e doar o chestie de design?
|
|
« Ultima modificare: Aprilie 16, 2007, 17:14:07 de către George Guraliuc »
|
Memorat
|
|
|
|
•CezarMocan
|
|
« Răspunde #1 : Aprilie 16, 2007, 17:11:26 » |
|
E mai rapid.
|
|
|
Memorat
|
|
|
|
•marcelcodrea
|
|
« Răspunde #2 : Aprilie 16, 2007, 17:43:26 » |
|
S-a mai discutat despre asta aici : http://infoarena.ro/forum/index.php?topic=683.0Mircea Pasoi zicea ca se indoieste ca s-ar simti diferenta ....nu stiu ce parere aveti voi, dar eu il cred ! Totusi e util pentru a-ti da colegii "pe spate" atunci cand implementezi la tabla !
|
|
|
Memorat
|
|
|
|
•Florian
|
|
« Răspunde #3 : Aprilie 16, 2007, 18:41:30 » |
|
Ai dreptate! Iar dak mai pun un "int main()" si un "return 0" deja incep sa creada k scriu tampenii =))
|
|
|
Memorat
|
|
|
|
•wefgef
|
|
« Răspunde #4 : Aprilie 16, 2007, 19:45:51 » |
|
Chiar e mai rapid ++i. Mie mi s-a intamplat sa iau 90 cu i++, sa modific in ++i si sa iau 100.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•Florian
|
|
« Răspunde #5 : Aprilie 16, 2007, 20:42:30 » |
|
Interesanta faza... .. De akum o sa incep sa lucrez si eu cu ++i..nu am nimik de pierdut...poate am kiar de castigat... Totusi cred k ai avut norok..de obicei testele nu sunt concepute pt a face programul sa pice din cauza a doi de "+" si a unui "i"...orikum..dak ai norok..
|
|
|
Memorat
|
|
|
|
•wefgef
|
|
« Răspunde #6 : Aprilie 16, 2007, 21:13:21 » |
|
Era chiar la limita sursa si cum aveam un for destul de mare (nu mai stiu exact... oricum era ceva gen 100.000) s-a simtit diferenta.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•marcelcodrea
|
|
« Răspunde #7 : Aprilie 16, 2007, 22:33:24 » |
|
Am facut o mica sursa pentru a analiza timpii de executie: #include<stdio.h> #include<time.h> long long i,j,t1,t2,k; int main() { freopen("","r",stdin); freopen("","w",stdout); for(k=1;k<=10;k++) { t1=clock(); scanf("%lld",&j); for(i=1;i<=j;i++);//sau ++i t2=clock(); printf("%.6f\n",(t2-t1)/18.2); } return 0; }
Pentru fisierul de intrare care contine numerele : 1000000000 1500000000 2000000000 20000 50000000 200000000 2500000000 450000000 500000000 900000000
Timpii de executie pentru ++i 46.153846 69.230769 92.032967 0.000000 2.197802 9.340659 115.109890 20.879121 23.076923 41.483516
Timpii de executie pentru i++ 48.626374 72.802198 96.978022 0.000000 2.197802 9.890110 121.703297 21.978022 24.175824 43.956044
|
|
|
Memorat
|
|
|
|
•sir_icemaster
Strain
Karma: -2
Deconectat
Mesaje: 9
|
|
« Răspunde #8 : Aprilie 17, 2007, 16:10:06 » |
|
Deci ++i e putin mai rapid. Inseamna ca se merita sa folosesti ++i.
|
|
|
Memorat
|
|
|
|
•Florian
|
|
« Răspunde #9 : Aprilie 17, 2007, 16:21:04 » |
|
Asa e! pe situatii de acestea ff mari se simte diferenta din plin.. dupa kum am putut observa...
|
|
|
Memorat
|
|
|
|
•domino
|
|
« Răspunde #10 : Aprilie 17, 2007, 16:22:33 » |
|
Din cate vad eu, prima diferenta se face pe la 200.000.000 de iteratii , desi este o diferenta foarte mica (cam de 5%). Chiar nu cred ca se poate spune ca se merita sa folosesti ++i in ideea de a obtine timpi de rulare mai mici , mai ales la problemele de algoritmica. Later edit: Asa e! pe situatii de acestea ff mari se simte diferenta din plin.. dupa kum am putut observa... Din plin? Diferenta este cam de 5%. Nu prea am vazut probleme cu limita de timp peste cateva secunde.. iar pana in 20 de secunde diferenta este aproape insesizabila.
|
|
« Ultima modificare: Aprilie 17, 2007, 19:32:07 de către Bogdan Tataroiu »
|
Memorat
|
|
|
|
•silviug
|
|
« Răspunde #11 : Aprilie 17, 2007, 20:10:32 » |
|
Intr-adevar e mai rapid "++i". E drept, diferenta este insesizabila daca i este int.
Recomandarea mea: obisnuiti-va sa scrieti "++i" pentru ca diferentele pot fi majore daca i nu este de tip intreg. De exemplu, in cazul iteratorilor diferenta incepe sa fie sesizabila. Asta sa nu mai discutam daca va definiti voi un obiect mare pe care supraincarcati operatorii astia si copierea e costisitoare (de exemplu, clasa de numere mari).
Silviu
|
|
|
Memorat
|
"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
|
|
|
•wickedman
|
|
« Răspunde #12 : Aprilie 18, 2007, 13:41:23 » |
|
Vis-a-vis de exemplul cu int-uri de mai sus, daca mai si faci ceva in bucla aia, timpul castigat per numar de iteratii e mult mai mic.
|
|
|
Memorat
|
|
|
|
•svalentin
|
|
« Răspunde #13 : Aprilie 19, 2007, 17:14:04 » |
|
Repet ce a zis si Silviu, daca i nu este int, ci alt tip de date, diferenta poate fi majora. De exemplu pentru "rope" din STL se recomanda sa folosesti de cate ori este posibil pre-incrementation fata de post-incrementation. Iterators are on the order of a dozen words in size. This means that copying them, though not tremendously expensive, is not a trivial operation. Avoid postincrementing iterators; use preincrement whenever possible.
|
|
|
Memorat
|
|
|
|
|