cucumber Posted May 31, 2007 Report Share Posted May 31, 2007 (edited) Man vajaga uzzinat konkreta diapazona katra elementa vertibu un to summu, ka to izdarit, lai stradatu pareizi un atri. Variants 1 strada atrak par otro, bet vienmer radis konkretu skaitli 60, 260 etc Varins 2 strada lenak, bet rada precizi vajadzigo diapazona vertibu. Piem. 100 elementi; diapazons 1-3? //var 1 (int)$value = 0; $rndnum = rand(1,30); echo $value=100*(0.1*$rndnum); //--------------- echo "<br />"; //var 2 (int)$value = 0; for($i=1;$i<101;$i++){ $rndnum = rand(1,3); $value+=$rndnum; } echo $value; //--------------- Edited May 31, 2007 by cucumber Link to comment Share on other sites More sharing options...
andrisp Posted May 31, 2007 Report Share Posted May 31, 2007 Neiebraucu, ko tu tur dari. Lai ko tu arī tur dari, vai tad tas otrais variants ir tik lēns ? PS. No šāda pieraksta (typecasting izmantošanas) nav īsti jēgas: (int)$value = 0; Link to comment Share on other sites More sharing options...
cucumber Posted May 31, 2007 Author Report Share Posted May 31, 2007 Otrs variants ir lens, kad ir liels cikla skaititajs. // 1000 000 Link to comment Share on other sites More sharing options...
andrisp Posted May 31, 2007 Report Share Posted May 31, 2007 Nedaudz patjūnēju. Šis izpildas diezgan fiksi salīdzinot ar for. <?php $value = 0; $i = 0; while($i < 1000000){ $value += rand(1,3); $i++; } echo $value; ?> Link to comment Share on other sites More sharing options...
cucumber Posted May 31, 2007 Author Report Share Posted May 31, 2007 Ja sanak ar soli 1000000 for ~1.05 sec while ~0.95 sec Link to comment Share on other sites More sharing options...
andrisp Posted May 31, 2007 Report Share Posted May 31, 2007 Točna, atšķirības nav. Man laikam, izmēģinot for, kompis aizrijās, tāpēc izpildījās daudz ilgāk. Link to comment Share on other sites More sharing options...
bubu Posted May 31, 2007 Report Share Posted May 31, 2007 Protams, ka otrais būs lēnāks. Tā sarežģītība ir O(n), taču pirmā sarežģītība ir O(1). Pasaki vēlreiz, ko tu tur centies izskaitļot? Gribi randoma skaitļus no 1 līdz 3 saskaitīt kopā 100 reizes? Tad jau vienkārši - minimālā summa ir 100, maksimālā summa ir 300. Attiecīgi vajag uzģenerēt raundom skaitli no 100 līdz 300: rand(100, 300); Link to comment Share on other sites More sharing options...
andrisp Posted May 31, 2007 Report Share Posted May 31, 2007 Tā sarežģītība ir O(n), taču pirmā sarežģītība ir O(1). bubu, ko tas nozīmē ? Link to comment Share on other sites More sharing options...
cucumber Posted May 31, 2007 Author Report Share Posted May 31, 2007 bubu variants, laikam, ar deres. Link to comment Share on other sites More sharing options...
bubu Posted May 31, 2007 Report Share Posted May 31, 2007 bubu, ko tas nozīmē ? Ar lielo O novērtē algoritmu sarežģītību. Aptuveni no kā ir atkarīgs algoritma izpildes laiks. Ja piemēram tev ir algoritms A, kurš ir O(n) sarežģīts, un ir algoritms B, kurš ir O(n^2) sarežģits. Tad B algoritms būs lēnāks, jo tā izpildes laiks būs atkarīgs no elementu skaita kvadrātā, taču A algorithma izpildes laiks mainīsies tikai lineāri atkarībā no elementu skaita. http://en.wikipedia.org/wiki/Big_O_notation http://www.nist.gov/dads/HTML/bigOnotation.html Vēl par to var domāt šādi. Pieņem, ka visas funkcijas/operācijas/rindiņas izpildās vienādā laika sprīdī - 1 milisekundē. Tad pirmajam algoritmama vienmēr vajadzēs 2 milisekundes (jo divas rindiņas). Taču otrajam - 2*n milisekundes (kur n ir tas iterāciju skaits). Attiecīgi no šejienes ir arī dabūjami tie O(1) un O(n), lineārās konstantes tur met ārā. Jo vairāk elementi būs, jo lielāka starpība būs laika ziņā. Tas pats arī salīdzinot O(n) ar O(n*logn), O(n*logn) ar O(n^2), O(c^n) ar O(n!), utt.. Otrais viemēr būs lēnāks pie noteikta iterāciju skaita. Link to comment Share on other sites More sharing options...
cucumber Posted May 31, 2007 Author Report Share Posted May 31, 2007 (edited) Kapec otrajam vajadzes " 2*n milisekundes ", tur tak ari divas rindinas? Bet while vs for. Edited May 31, 2007 by cucumber Link to comment Share on other sites More sharing options...
bubu Posted May 31, 2007 Report Share Posted May 31, 2007 Tur ir divas rindas iekš cikla, kurš izpildās n reižu. Tāpēc 2+2+2+..+2 (n reižu) = 2*n Link to comment Share on other sites More sharing options...
Recommended Posts