10 случайных, неповторяющихся чисел

HraKK

Мудак
Команда форума
WP
Когда у тебя закончится детский максимализм? Вроде же и не глупый местами. Не ужели ты не понимаешь чего с тебя смеются? Или ты думаешь что ты настолько одарен и твою гениалность не понимают другие. Это коплекс непризнаного гения. Задуймайся, пожалуйста об этом. Мне отвечать не надо.

Дальше.

Не существует ЕДИНСТВЕННО правильного кода! Выучил? - молодец.

сравнение моего кода с твоим
PHP:
<?php
function getnumbers($m,$n) 
{ 
 if ($m < $n-1) {return FALSE;} 
 $ns = array(); 
 for ($i = 0; $i < $n;) 
 { 
  $r = rand(0,$m); 
  if (!in_array($r,$ns)) {$ns[] = $r; ++$i;} 
 } 
 return $ns; 
}
$start = microtime(1);
for ($i=0;$i<100000;$i++)
{
getnumbers(9,10);
}
print microtime(1)-$start;
print '<BR>';
$max= 9; 
$iteration=10; 
$increace= $max/$iteration; 
$start = microtime(1);
for ($i=0;$i<100000;$i++)
{
$step=1;
$array[0]=rand(0,$increace); 
while($step<10) 
{ 
$array[$step]=rand($array[$step-1]+1,$array[$step-1]+$increace); 
++$step; 
}
}
print microtime(1)-$start;

?>
Результ:
4.61032795906 - Твой
0.963845014572 - Мой.
 

WP

^_^
HraKK
И чего? Алгоритмы разные.

-~{}~ 09.07.08 15:17:

Твой код вывел в $array:
PHP:
/* array(10) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [4]=>
  int(4)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
  [8]=>
  int(8)
  [9]=>
  int(9)
}
*/
 

HraKK

Мудак
Команда форума
WP
Моё решение единственное верное, и самое быстрое.
Вот этого. Или мой код не верный? Или он уступает твоему по скорости а не выигрывает в 2-5 раз?

-~{}~ 09.07.08 14:20:

WP
shuffle() забыл. Но принципиально не меняет.
 

WP

^_^
Чтобы сравнивать две реализации по скорости, они должны приводить к равнозначному результату.
Давай сравним твой код и
PHP:
2+2;
!
PHP:
2+2;
же быстрее отработает =))
 

HraKK

Мудак
Команда форума
WP
Софистика.
Задача - сгенерировать 10 случайных чисел в диапазоне от 0 до N.
Наши решения решают их. А вот скорость разная, что говорит о преимуществе одного решения над другим.
 

WP

^_^
HraKK
Я тебе уже показал что выводит твой код. Кстати, случайных чисел не бывает, бывают псевдослучайные.
 

HraKK

Мудак
Команда форума
От жешь.
PHP:
<?php 
function getnumbers($m,$n)  
{  
 if ($m < $n-1) {return FALSE;}  
 $ns = array();  
 for ($i = 0; $i < $n;)  
 {  
  $r = rand(0,$m);  
  if (!in_array($r,$ns)) {$ns[] = $r; ++$i;}  
 }  
 return $ns;  
} 
$start = microtime(1); 
for ($i=0;$i<100000;$i++) 
{ 
getnumbers(9,10); 
} 
print microtime(1)-$start; 
print '<BR>'; 
$max= 9;  
$iteration=10;  
$increace= $max/$iteration;  
$start = microtime(1); 
for ($i=0;$i<100000;$i++) 
{ 
$step=1; 
$array[0]=rand(0,$increace);  
while($step<10)  
{  
$array[$step]=rand($array[$step-1]+1,$array[$step-1]+$increace);  
++$step;  
}
shuffle($array); 
} 
print microtime(1)-$start; 
?>
Так лучше?

Конечно не бывает. и твой и мой генерирует псевдослучайные числа.

-~{}~ 09.07.08 14:26:

Зы читай тему
HraKK wroute:
Смысл данного кода что он генерирует псевдослучайные числа и без повторений.
 

WP

^_^
Если в
PHP:
$increace = 100;
$array[0]=rand(0,$increace);
, $array[0] примет значение например 45, то все последующие раунды не будут иметь шанса принять значение меньшее чем 46. Это противоречит условию диапазона.

-~{}~ 09.07.08 15:35:

buratino era stupido))
 

HraKK

Мудак
Команда форума
Если в
PHP:
$r = rand(0,$m);
Будет выпадать всегда одно и тоже число твой код не закончиться.

А где покажи такое надуманное условие было написанно, что вторая итерация ДОЛЖНА принимать значение меньше предыдущей и et cetera. А может еще там написано что нельзя использовать операнды ++ и while например? Чего уж, сразу нельзя вообще никакое другое решение кроме написанное WP? Ах, нету? Жалко. Мой скрипт, ТЕОРИТИЧЕСКИ может выдать все числа в дииапазоне от 0 до N.
А как это реализуеться уже не важно, не находишь? Тем более что моя реализация лучше быстрее и не имеет критической уязвимости как твоя.
 

dimagolov

Новичок
HraKK, ты намеренно не замечаешь замечания vovanium, что твой код никак не может сгенерировать числа от 1 до N ? я же подправил твой алгоритм уже, чтобы это исправить, а ты продолжаешь спорить приводя ошибочный алгоритм...
 

HraKK

Мудак
Команда форума
dimagolov
Это не существенно. У меня просто падает шанс.
 

WP

^_^
maxwell
+1

HraKK
> не закончиться.
без ь.
Да, и что дальше? Приведи такой seed в котором не будет выпадать какое-то число ;)
> А где покажи такое надуманное условие было написанно, что вторая итерация ДОЛЖНА принимать значение меньше предыдущей и et cetera.
Кажется, ты просто глупый, извини уж за прямоту. Псевдослучайное число в диапазоне от 0 до N подразумевает равновероятностную выборку. Давай вообще сделаем
rand(0,100000) == 0?rand(0,100):rand(0,50)
Разве это будет эквивалентно rand(0,100)?
Если процитировать твою детскую формулировку, то данный код будет "теоретически" (епт, слово-то какое) выдавать числа от 0 до 100.

-~{}~ 09.07.08 17:10:

з.ы. я хз как тебе права модера дали.
 

HraKK

Мудак
Команда форума
maxwell
Приведенный код dimagolov решает эту проблему. Я просто ее не отражаю в полной мере, потому что я показал ход мыслей. А не законченную реализацию.



WP
>написанно
с одной н.
В какой-то мере ты прав, мой алгоритм(в редакции dimagolov) не дает полной псевдослучайной картины, как и твой. Любой генератор п.с.ч. не совершенен, априори. На этот счет есть хороший афоризм:
Псевдослучайные числа порой более случайны, чем случайные числа.
Если докопаться будет неравномерность на отрезке 0..N
Но ты думаешь rand генерирует п.с.ч. в теоретической трактовке? Нет, он приближен к ней. Зато решает задачу получения неопределенного числа.

Так и мой алгоритм намного лучше справляется, твоего, по задаче:
Помогите пожалуйста куском скрипта, который выдает 10 случайнх, не повторяющихся чисел на промежутке от 0 до определенного значнеия.
З.Ы. когда кажется креститься надо.
 

kruglov

Новичок
Тэк, давайте уже что ли кто-нить поразит конкурентов сбалансированным бинарным деревом? Или докажет, что идеальная балансировка тут неэффективна? А то чой-то уже и скушно.

А вообще, эти "10 случайных" по какому закону распределяются, это к автору вопрос.
 

HraKK

Мудак
Команда форума
kruglov
Я думаю автор уже в тихом аху.. ой офигивании.
 
Сверху