Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Równomierny rozkład wylosowanych wartości
belwarg
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.01.2013

Ostrzeżenie: (0%)
-----


Witam!
Mam pewien problem i utknąłem w jednym punkcie.

Mam 20 unikalnych wartości (np. id obiektu), każdą z tych wartości muszę wybrać dokładnie 15 razy. Daje mi to 300 elementów do przydzielenia do 60 "kontenerów" (liczba kontenerów jest ustalona z góry).

Każdy kontener ma 8 miejsc, z czego tylko jedno musi być wypełnione, pozostałe miejsca będą wypełniane według podanych parametrów (np. 4 kontenery z 1 elementem, 5 kontenerów z 2 elementami, 7 kontenerów z 3 elementami etc.)

Problem pojawia się w tym punkcie - muszę zadbać o to by rozłożenie elementów do kontenerów było w miarę unikalne tzn. żeby nie było takiej sytuacji że elementy o id=1 oraz id=2, trafią 12 razy do wspólnego kontenera itp.

Wszelkie pomysły jak to rozwiązać mile widziane.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


"rozłożenie elementów do kontenerów było w miarę unikalne"

co oznacza 'w miarę'?

jeśli chcesz je losowo rozmieścić w swoich kontenerach:
najpierw mieszamy tablicę:
  1. for($i=0;$i<60;$i++){
  2. $losowe[$i]=losuj();
  3. }
  4. $już_wykorzystane[-1]=True;
  5. function losuj(){
  6. global $już_wykorzystane;
  7. $los=-1;
  8. while($już_wykorzystane[$new]){
  9. $los=mt_rand(0,59)
  10. }
  11. $już_wykorzystane[$los]=True;
  12. return $los;
  13. }


a potem wrtzucasz w pętlach do kontenerków:
  1. $licznik=0;
  2. $wielkości_kontenerów=Array(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,.....);
  3. for($i=0;$i<60;$i++){
  4. for($j=0;$j<$wielkości_kontenerów[$i];$j++){
  5. $kontener[$i][$j]=$losowe[$licznik];
  6. $licznik++;
  7. }
  8. }

pisałem z ręki więc mogą być błędy, ale idea dobra.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 09:56