Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]losowe dane
Forum PHP.pl > Forum > PHP
Thaal
Witam,

znajomy dostał niedano zadanie: napsać skrypt w php, który wygeneruje plik o wielkości równej 15 MB zapełniony losowymi danymi.. niby nic trudnego, ładna pętla generująca losowe znaki z tablicy asci... powtórzeń będzie tylko... 15728640 :|... po chwili mielenia komp wypluwa że upłynął czas 30 sekund... a czas ma pozostać nieruszony - liczy się algorytm i koniecznie realizowany za pomocą php.

drugie podejście: usatlić dwie liczby m i n, gdzie m * n = 15728640, wylosować jak poprzednio łańcuch m znaków i wprowadzić go do pliku n razy... niby działa o wiele szybciej, ale tym razem nie są to w pełni losowe dane - następuje powtórzenie pewnego m-wyrazowego ciągu.

najlepiej by było za kazdym wywołaniem pętli n w jakiś sposób 'zadziałać' na ciągu, ale jak?? za każdym przebiegiem próbowałem zamieniać losowo wybrany znak w ciągu innym losowo wybranym, ale znowu to nie to - część łancucha dalej się powtarzała, a obliczone prawdopodobieństwo wystąpienia takiego zjawiska było bardzo małe... za bardzo...

czy ktoś ma może pomysł jak coś takiego zrobić??
rafkam
Jak masz dostęp do php.ini - moze wydłuż czas wykonywania skryptu.

Pzdr.
Thaal
jednym z warunków poprawnego wykonania zadania jest właśnie to, iż skrypt ma się wykonać w domyślnym czasie (czyli 30 sek), tak więc zmiana php.ini odpada...
vala
nie ma bata zebys to wygenerowal w mniej niz 30s chyba ze masz jakas mega mazsyna:0
albo jakies mieszanie gotowych blokow po 1 mega czy cus


edit.
a moze jest bat:))
jeszcze testuje:)
jono
Sprawdź to - generuje losowe ciągi po 2000 znaków... 15 MB na mojej nie za szybkiej maszynie (Duron 1300) to nie była nawet sekunda... a powtarzalność jest bardzo niska smile.gif
  1. <?php
  2.  
  3. $czas = microtime();
  4.  
  5. $fp = fopen('15.mb', 'w');
  6.  
  7. $i = 15728640;
  8. while($i > 0){
  9. $str = sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255))).sha1(chr(rand(0,255)));
  10. fputs($fp, $str);
  11. $i = $i-2000;
  12. }
  13.  
  14. echo microtime()-$czas;
  15.  
  16.  
  17. ?>
SongoQ
Wszystko kwestia algorytmu, dobry algotyrm dobry czas - zly algorytm ........
Thaal
biggrin.gif
vala
od maszyny tez duzo zalezy
skryptem jono udalo mi sie wykrecic 22 mega
SongoQ
Cytat
od maszyny tez duzo zalezy
No oczywiscie ze tak, bardziej mi chodzilo o to ze dobry algorytm to 90% sukcesu.
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.