Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jakie sa możliwości - ograniczenia PHP
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Koshin
chodzi mi dokladnie o to na przykład ile zmiennych moze byc utworzonych, jak duze tablice moga byc utworzone.

jak to wszystko ma sie do szybkosci przetwarzania danych w tych tablicach zawartych.

na przyklad napisalem skrypt, ktory generuje ciagi licz 5 cyfrowych, i jest problem z wyswietleniem ponad 6000 tysiecy tych wartosci, i nie wiem czy to wina serwera, czy tez skryptu, czy na przyklad ograniczen innych, o ktorych nie wiem.
bamboos
Witam!!
to chyba zalezy od wielu czynnikow, ale glownie od servera i jego mozliwosci, a takze ustawien w php.ini
a jaki blad, komunikat Ci wyrzuca podczas wyswietlania 6000 liczb
Koshin
przekroczono limit czasu 30 sekund.

gdy robie bez wyswietlania na ekran, to dotarlem do wygenerowania troche ponad 430000 liczb.. ale to wciaz za malo dla mnie...
Zepco
Po co wogóle Ci tyle ciągów liczb 5 cyfrowych :?:
Jabol
ehm, ehm.. to chyba nie na pro.
ps. php.ini i do roboty.
ps2. to nie wina php tylko slabosci serwerka i nieprzepustowosci lacza.
maggot
a jakisz masz algorytm tworzenia tych liczb??
kiedys nad tym myslalem, i tylko cos takiego wykombinowalem

http://forum.php.pl/viewtopic.php?t=3544
Koshin
po pierwsze, wydawalo mi sie to jak najbardziej na pro.. ale ok nie protestuje, sa tu madrzejsze niz moja glowa

po drugie, do czego mi tyle liczb? a chocby do tworzenia permutacji odpowiedniej ilosc liczb, do tworzenia wyrazow z zadanej liczby liter.. zastosowan jest kilka...

po trzecie... co do serwerka (przepustowosc odpada, bo robie to lokalnie) to jest to athlon XP 1700+, 256 MB DDR, wiecej chyba nic nie wplywa na wydajnosc?? (dysk segate barracuda 7200 obr.)


po czwarte algorytm, jak zawsze nie mam go przy sobie, ale ogolnie sklada sie z kilku czesci, generowana jest czesc tych liczb, stosujac metode przestawiania pary cyfr miejscami, poprzez cala dlugosc liczby, zastosowano funkcje rekurencyjna, w wyniku otrzymuje polowe wynikow koncowych, druga polowe otrzymuje poprzez lustrzane odbicie tych liczb, wydaje mi sie dosyc optymalny ten algorytm, postaram sie nastepnym razem go tutaj zademonstrowac.

ilosc liczb jaka chce obsluzyc to najwieksza mozliwa wartosc silni ktora w wyniku daje liczbe integer, czyli dziesietna, bez zapisu rozszerzonego.
Jabol
Cytat
po pierwsze, wydawalo mi sie to jak najbardziej na pro.. ale ok nie protestuje, sa tu madrzejsze niz moja glowa
Może i byłby na pro ( miałem dylemat ), ale zszedł na złą stronę. Jeżeli coś dołożycie ciekawego to zawsze mogę go cofnąć.
Koshin
no sie postaralem i dotarlem tu z kodem...
tylko musze go jeszcze odczytac... i hate kafejki .. smile.gif) ktore nie maja total commandera smile.gif

[php:1:f7565c3faa]<?php


class lusterko
{
function lustro($el)
{

$ile = count($el);

for ($i=0;$i<$ile;$i++)
{
$el[$i+$ile]=strrev($el[$i]);
}
return $el;
}
}
class silnia
{
function licz($i)
{
if ($i==0) {return 1;}
else {return $i * $this->licz($i-1);}
}
}

class permut
{


function perm($b,$element)
{
$el = $this ->przebieg($b,$element);

$lus = new lusterko;

$el = $lus ->lustro($el);

return $el;
}

function zamien($napis,$ktory)
{
if ($ktory ==0)
{
$napis1=$napis[$ktory+1].$napis[$ktory];
if (strlen($napis)>$ktory+1)
{
$napis1.=substr($napis,2,strlen($napis)-1);
}
}
if (($ktory >0) and ($ktory<strlen($napis)))
{
$napis1=substr($napis,0,$ktory).$napis[$ktory+1].$napis[$ktory];
if (strlen($napis)>$ktory+1)
{
$napis1.=substr($napis,$ktory+2,strlen($napis)-$ktory);
}
}
return $napis1;
}

function przebieg($b,$element)
{

$silnia = new silnia;
$ile_razy = $silnia ->licz($cool.gif/2;
$mniej = $b-1;
if ($mniej>1) {$element=$this ->przebieg($mniej,$element);}
$pierwszy = count($element);
for ($i=0;$i<$pierwszy;$i++)
{$el[$i].=$element[$i].$b;$c++;}
if ($mniej==1) {$el[$i] = $this ->zamien($el[0],0);}
if ($mniej!=1)
{
$gdzie =$mniej;
for ($i;$i<$ile_razy;$i++)
{
if($i%$pierwszy==0) {$gdzie -=1;}
$el[$c] = $this->zamien($el[$c-$mniej],$gdzie);
$c++;
}
}
return $el;
}


}






$permutacja = new permut;
$sila = new silnia;

$ile = 4;

$el = $permutacja -> perm($ile,"1");
if ($ile<7){ while(list($k,$l)=each($el))
{$k++;
echo "nr.$k element: $l<br>";
}}

else {echo "Elementow w tablicy: ".count($el);}

?>[/php:1:f7565c3faa]

to jest kod, klasy silnia i lusterko powiny byc w klasie permutacji ale to tylko drobiazg... podalem takze przyklad wywolania.
Jabol
czy to ma sens dzielic to na tyle klas ?
Koshin
ja bym raczej powiedzial, ze nie ma sensu tego dzielic, lecz nie chcialo mi sie polaczyc tego w jedna, uzywalem gotowych rozwiazan swoich, ale to chyba nie jest przeszkoda, a przede wszystkim nie jest to meritum sprawy.
cagrET
Cytat
ja bym raczej powiedzial, ze nie ma sensu tego dzielic, lecz nie chcialo mi sie polaczyc tego w jedna, uzywalem gotowych rozwiazan swoich, ale to chyba nie jest przeszkoda, a przede wszystkim nie jest to meritum sprawy.


to jest meritum sprawy
narzekasz ze cos za wolno dziala
uzywasz obiektow w algorytmie wiec sie nie dziw
stworzenie 50 tys obiektow moze trwac kilka minut/godzin
a zrobienie tego samego za pomoca funkcji/zmiennych globalnych zajmie pare sekund
Koshin
mi sie wydaje ze robie to za pomoca zmiennych i funckji, obiektem jest jedynie glowna funkcja (obliczanie silni, rowniez uzywam jako funckji)

mozesz powiesz jak to zrobic inaczej aby dzialalo sprawniej ?
wojtas077
Jesli chodzi o te 30 sekund to ustawienia serwera.
W php.ini masz czas wykonywania skryptu i domyslnie jest 30 sekund.
max_execution_time = 30
Zmien na 3600 i juz skrypt bedzie ci generowal twoje liczby przez godzine.
Chyba ze chesz jeszcze wiecej to podaj wiecej.:-)
Pozdrowionka.
Bakus
[php:1:ce7dd5fc9a]<?php
set_time_limit(0);
?>[/php:1:ce7dd5fc9a]
Powyższy wiersz wklej na początku swojego skryptu... Dzięki temu skrypt będzie działał zą do skutku...
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.