Jump to content
php.lv forumi

Range value


cucumber

Recommended Posts

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 by cucumber
Link to comment
Share on other sites

Otrs variants ir lens, kad ir liels cikla skaititajs. // 1000 000

Link to comment
Share on other sites

Ja sanak ar soli 1000000

for

~1.05 sec

while

~0.95 sec

Link to comment
Share on other sites

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

bubu variants, laikam, ar deres.

Link to comment
Share on other sites

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

Kapec otrajam vajadzes " 2*n milisekundes ", tur tak ari divas rindinas?

Bet while vs for.

Edited by cucumber
Link to comment
Share on other sites

×
×
  • Create New...