Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Instrukcja warunkowa spowalniajaca wykonywanie scryptu
Forum PHP.pl > Forum > Przedszkole
malpiszon
Witam!

Odrazu wkleje kod:

  1. for($i = 0; $i < 435; $i++)
  2. {
  3. $a = $i;
  4. $liczba[$i] = rand(0, 29);
  5. $liczba2[$i] = rand(0, 29);
  6.  
  7. if($liczba[$i] == $liczba2[$i])
  8. $i--;
  9.  
  10. else
  11. {
  12. for($j = 0; $j < $i; $j++)
  13. {
  14. if(($liczba[$j] == $liczba[$i] && $liczba2[$j] == $liczba2[$i]) || ($liczba[$j] == $liczba2[$i] && $liczba2[$j] == $liczba[$i]))
  15. {
  16. $i--;
  17. break;
  18. }
  19. }
  20.  
  21. if($a == $i) // ta instrukcja spowalnia wykonywanie scryptu
  22. {
  23. if($i % 15)
  24. {
  25. if($b != 0)
  26. {
  27. for($k = $i - $b; $k < $i; $k++)
  28. {
  29. if($liczba[$i] == $liczba[$k] || $liczba2[$i] == $liczba2[$k] || $liczba[$i] == $liczba2[$k] || $liczba2[$i] == $liczba[$k])
  30. {
  31. $i--;
  32. $b--;
  33. break;
  34. }
  35. }
  36. }
  37. }
  38. else
  39. {
  40. $b = 0;
  41. }
  42.  
  43. if($a == $i)
  44. {
  45. echo $i.". ".$liczba[$i]." - ".$liczba2[$i]."<br>";
  46. }
  47.  
  48. $b++;
  49. }
  50. }
  51. }


Moj problem polega na tym ze instrukcja warunkowa zaznaczona w tym tekscie komentarzem spowalnia wykonywanie scryptu lecz musi ona byc zeby scrypt sie poprawnie wykonal. Prosil bym was zebyscie znalezli jakis bład (o ile jakis jest) lub powiedzieli mi jak zrobic to zeby nie spowalnialo wykonywana scryptu.
Z góry dziekuje smile.gif;
Fifi209
Fajnie jakbyś pisał po polsku lub po angielsku wink.gif tj. skrypt wink.gif ew. script (w tej wersji pisz wszystko po ang)

Napisz co ten kod ma robić w założeniu i skąd wiesz, że akurat w tym miejscu zwalnia
malpiszon
Powiem inaczej jak go przekształcic zeby działał szybko?

Ten algorytm losuje 2 liczby na jedno obejscie fora i te liczby nigdy nie moga byc takie same (tzn. kazda z kazda musza byc) i jedna liczba moze wystapic raz na 15 powtórzen petli.
peter13135
Myślisz, że informatołki są takie pracowite, że będą analizować Twój kod ? tongue.gif
Powiedz konkretnie jaki skrypt potrzebujesz, to może ktoś Ci napisze optymalniejszą wersję.
malpiszon
Jezeli sie troche na tym znasz to raczej bedziesz wiedzial po przeczytaniu tego scryptu o co w nim chodzi..
A jezeli zaawansowany to bedziesz wiedzial gdzie jest bład.. tylko jestes leniem i nie chce cie sie nawet tego przeczytac.
A po za tym nie musisz wymyslac nowego tylko poprostu napisz krotko co zrobilem zle ze scrypt sie laguje.
d3ut3r
krótko mówiąc masz nieoptymalny algorytm. Sorry ale sam chciałeś smile.gif

Cytat
tylko poprostu napisz krotko co zrobilem zle ze scrypt sie laguje.


a teraz poważniej napisz normalnie co chcesz osiągnąć to ktoś Ci coś poradzi. Nie wymagaj od ludzi żeby analizowali twój kod.
malpiszon
Algorytm ma losowac 2 liczby (liczba1 i liczba2) te dwie liczby nie moga byc takie same nigdy czyli kazda z kazda ma "byc". Jeszcze jakakolwiek liczba nie moze sie powtózyc w "15-sce" czyli od 0 do 14 od 14 do 29 (w tych 15 miejscach moze byc tylko raz)
shinuexx
Nie mogłem się w twoim algorytmie połapać. Wydukałem coś takiego. Generuje się bardzo szybko:
  1. $liczba = array();
  2. $liczba2 = array();
  3.  
  4. $max = 30;
  5. for( $x = 0; $x < $max; $x++){
  6. $pos = floor($x/15);
  7. do{
  8. $rand = rand(0,29);
  9. }
  10. while(in_array($rand,array_slice($liczba,$pos*15,15)) || in_array($rand,array_slice($liczba2,$pos*15,15)));
  11. $liczba[] = $rand;
  12. do{
  13. $rand2 = rand(0,29);
  14. }
  15. while(in_array($rand2,array_slice($liczba,$pos*15,15)) || in_array($rand2,array_slice($liczba2,$pos*15,15)));
  16. $liczba2[] = $rand2;
  17.  
  18. echo $x.". ".$liczba[$x]." - ".$liczba2[$x].PHP_EOL;
  19. }


Generowane w około : 0.0238 [s]
O to ci chodziło??
malpiszon
Mozna powiedziec ze prawie o to smile.gif pare rzeczy tylko trzeba poprawic zeby bylo to co chce.
Dzieki ci wielki!
gothye
usleep

// wait for 2 seconds
usleep(2000000);
malpiszon
Cytat(shinuexx @ 14.03.2012, 20:17:11 ) *
Nie mogłem się w twoim algorytmie połapać. Wydukałem coś takiego. Generuje się bardzo szybko:
  1. $liczba = array();
  2. $liczba2 = array();
  3.  
  4. $max = 30;
  5. for( $x = 0; $x < $max; $x++){
  6. $pos = floor($x/15);
  7. do{
  8. $rand = rand(0,29);
  9. }
  10. while(in_array($rand,array_slice($liczba,$pos*15,15)) || in_array($rand,array_slice($liczba2,$pos*15,15)));
  11. $liczba[] = $rand;
  12. do{
  13. $rand2 = rand(0,29);
  14. }
  15. while(in_array($rand2,array_slice($liczba,$pos*15,15)) || in_array($rand2,array_slice($liczba2,$pos*15,15)));
  16. $liczba2[] = $rand2;
  17.  
  18. echo $x.". ".$liczba[$x]." - ".$liczba2[$x].PHP_EOL;
  19. }


Generowane w około : 0.0238 [s]
O to ci chodziło??


Borykam sie z jeszcze jednym problemem bo jezeli chce aby kazda liczba była w parze z inną liczba (bo w tym scrypcie powtarzaja sie pary) to znowu mi zamula algorytm. Poczytalem troche na necie jeszcze o tych wszystkich funkcjach do losowania i tablic i nie moge za nic wymyslec jak to zrobic. Moze tobie cos do głowy przyjdzie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.