Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> losowanie bez powtórzeń
ktosia
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.04.2006

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


Witam
Mam problem z napisaniem skryptu, który losowałby liczby bez powtórzeń
Tzn. chodzi o to że mam tablice np. 50 elementową, której zawartością mają być losowo wybrane liczby z przedziału (1,500) tak aby się nie powtarzały …
Domyślam się ze powinnam losować z tablicy i wyrzucać wcześniej wylosowane elementy ... ale nie wiem jak to zrobić ... :/ na razie wymęczyłam takie coś:

  1. <?php
  2. $tablica = array();
  3. srand ((double) microtime() * 1000000);
  4. for ($i=0; $i<20; $i++)
  5. {
  6.  $p=1;//poczętek zakresu
  7.  $k=500;//koniec zakresu
  8.  $z = rand($p,$k);
  9.  $tablica[$i]=$z; 
  10.  }
  11. print_r ($tablica);
  12.  
  13. ?>


Bardzo proszę o pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


  1. <pre>
  2. <?php
  3.  
  4. $arrTable = array();
  5.  
  6. while( count( $arrTable ) < 50 )
  7. {
  8. $intItem = rand( 1, 500 );
  9.  
  10. if( ! in_array( $intItem, $arrTable ) )
  11. {
  12. $arrTable[] = $intItem;
  13. }
  14.  
  15. }
  16.  
  17. print_r( $arrTable );
  18.  
  19. ?>
  20. </pre>
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A jaka to ma zlozonosc obliczeniowa? Jaka mam gwarancje ze skrypt sie zakonczy?

Cytat
<?php

$N = 500;
$i = 50;

$numbers = array_keys( array_fill( 1, $N, 0 ) ); // $N nie 50 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
print_r( $numbers );
$drawnNumbers = array_rand( $numbers, $i );
print_r( $drawnNumbers );
?>
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(dr_bonzo @ 2006-04-04 20:41:56)
A jaka to ma zlozonosc obliczeniowa?
Dużą. Za dużą. Ale jest to naprostsze podejście do tematu (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat(dr_bonzo @ 2006-04-04 20:41:56)
Jaka mam gwarancje ze skrypt sie zakonczy?
O ile losujesz X elementów ze zbioru o mocy Y i X<=Y to się skończy zawsze (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Ale masz do czynienia prawdopodobienstwem: od wynikow losowan bedzie zalezalo jak dlugo skrypt bedzie sie wykonywal -- przeciez mozesz nigdy nie dostac np. 50tej innej liczby (male sa na to szanse ale trzeba ta okolicznosc uwzglednic).

: D
Go to the top of the page
+Quote Post
ktosia
post
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.04.2006

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


ooo dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
wszystko ładnie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 23.12.2025 - 17:42