Спустя 5 минут, 28 секунд (2.02.2012 - 14:40) sergeiss написал(а):
1. Сгенерировать одно случайное число. Записать в массив.
2. Сгенерировать другое случайное число.
3. Если числа из п.2 еще нет в массиве, то записать в массив.
4. Если размер массива достаточен, то завершить набор данных, иначе - перейти к п.2.
Где-то так...
2. Сгенерировать другое случайное число.
3. Если числа из п.2 еще нет в массиве, то записать в массив.
4. Если размер массива достаточен, то завершить набор данных, иначе - перейти к п.2.
Где-то так...
Спустя 3 минуты, 3 секунды (2.02.2012 - 14:43) twin написал(а):
$a = range(1, 8);
shuffle($a);
$b = array_slice($a, 5);
echo implode(',', $b);
Спустя 12 минут, 17 секунд (2.02.2012 - 14:55) Игорь_Vasinsky написал(а):
$allDigits = array();
for($i=0; $i<30; $i++)
{
$digit = rand(1,8);
if(!in_array($digit, $allDigits))
$allDigits[] = $digit;
if(sizeof($allDigits) == 3)
break;
}
echo '<pre>' . print_r($allDigits, 1) . '</pre>';
:huh:
Спустя 3 минуты, 16 секунд (2.02.2012 - 14:59) nugle написал(а):
а почему for ? почему бы не вставлять значение массива до тех пор, пока исчезнут совпадения? может все через while лучше?
Спустя 2 минуты, 34 секунды (2.02.2012 - 15:01) Игорь_Vasinsky написал(а):
:D :lol:
:P
<?php
$s = microtime(1);
$allDigits = array();
for($i=0; $i<30; $i++)
{
$digit = rand(1,8);
if(!in_array($digit, $allDigits))
$allDigits[] = $digit;
if(sizeof($allDigits) == 3)
break;
}
$e = microtime(1);
//Время
echo $e-$s.'<br/>';
echo '<pre>' . print_r($allDigits, 1) . '</pre>';
$s = microtime(1);
$a = range(1, 8);
shuffle($a);
$b = array_slice($a, 5);
$e = microtime(1);
//Время
echo $e-$s.'<br/>';
echo implode(',', $b);
?>
Мой код - 1.5974044799805E-5
Array
(
[0] => 4
[1] => 6
[2] => 3
)
Твин - 5.9604644775391E-6
7,2,8
:P
Спустя 12 минут, 41 секунда (2.02.2012 - 15:14) tvix написал(а):
спсибо!!!
Спустя 36 секунд (2.02.2012 - 15:15) Игорь_Vasinsky написал(а):
погоди.всё тока начинается
![wink.gif](http://phpforum.ru/html/emoticons/wink.gif)
Спустя 1 минута, 7 секунд (2.02.2012 - 15:16) twin написал(а):
У меня так твой отработал
Цитата |
5.793571472168E-5 Array ( [0] => 5 [1] => 8 [2] => 3 ) 2.288818359375E-5 1,6,3 |
и чё? Мерять нужно в цикле.
Спустя 53 секунды (2.02.2012 - 15:17) neadekvat написал(а):
Игорь_Vasinsky, для вывода времени используй printf:
Меня точность до шести знаков устраивает, а там уж как кому удобнее.
$start_time = microtime(1);
// code
printf('%.6f', microtime(1) - $start_time);
Меня точность до шести знаков устраивает, а там уж как кому удобнее.
Спустя 1 минута, 34 секунды (2.02.2012 - 15:18) nugle написал(а):
мне кажется так вернее будет
<?php
$s = microtime(1);
$allDigits2 = array();
for($i=0; $i<3; $i++)
{
$size1 = sizeof($allDigits2);
$size2 = sizeof($allDigits2);
while($size2 != $size1 + 1)
{
$n = rand(1,8);
if(!in_array($n, $allDigits2))
$allDigits2[] = $n;
else
$n = rand(1,8);
$size2 = sizeof($allDigits2);
}
}
$e = microtime(1);
echo $e - $s;
var_dump($allDigits2);
Спустя 34 секунды (2.02.2012 - 15:19) Игорь_Vasinsky написал(а):
Цитата |
Мерять нужно в цикле. |
для чё? цикл закончиться как массив наберёт 3 элемента - вывел время со старта и до формирования массива. зачем мне в цикле?
Спустя 1 минута, 52 секунды (2.02.2012 - 15:21) neadekvat написал(а):
Мой вариант:
Или так:
$min = 1;
$max = 8;
$count = 3;
$arr = array();
while(1)
{
$num = rand($min, $max);
if ( ! in_array($num, $arr))
$arr[] = $num;
if (count($arr) == $count)
break;
}
print_r($arr);
Или так:
$min = 1;
$max = 8;
$count = 3;
$arr = array();
while(count($arr) != $count)
{
$num = rand($min, $max);
if ( ! in_array($num, $arr))
$arr[] = $num;
}
print_r($arr);
Спустя 2 минуты, 50 секунд (2.02.2012 - 15:23) twin написал(а):
Я имею ввиду, что код нужно повторить раз 1000. В цикле. Тогда будет примерная картина. А ты меряешь всего один запуск. Погрешность такова, что ничего ты не узнаешь.
Вообще я не люблю грязный код. Пусть не 30, пусть 3000 ты поставишь. Это все равно грязно. Ничтожная вероятность того, что не получится 3 чисел все равно существует. А это уже непрофессионально.
neadekvat
Зачем бесконечный цикл то?)) Есть же do... while
Вообще я не люблю грязный код. Пусть не 30, пусть 3000 ты поставишь. Это все равно грязно. Ничтожная вероятность того, что не получится 3 чисел все равно существует. А это уже непрофессионально.
neadekvat
Зачем бесконечный цикл то?)) Есть же do... while
Спустя 1 минута (2.02.2012 - 15:24) neadekvat написал(а):
Цитата (twin @ 2.02.2012 - 16:23) |
Зачем бесконечный цикл то?)) Есть же do... while |
А можно и do...while.
Но у меня один хрен быстрее - потому что кода меньше
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 1 минута, 16 секунд (2.02.2012 - 15:26) Игорь_Vasinsky написал(а):
я -0.000071
Array
(
[0] => 2
[1] => 7
[2] => 5
)
твин -0.000006
Array
(
[0] => 7
[1] => 3
[2] => 1
)
nugle -0.000010
Array
(
[0] => 4
[1] => 7
[2] => 5
)
<?php
//Я
$s = microtime(1);
$allDigits = array();
for($i=0; $i<30; $i++)
{
$digit = rand(1,8);
if(!in_array($digit, $allDigits))
$allDigits[] = $digit;
if(sizeof($allDigits) == 3)
break;
}
$e = microtime(1);
printf('%.6f', microtime(1) - $s).'<br />';
echo '<pre>' . print_r($allDigits, 1) . '</pre>';
//Twin
$s = microtime(1);
$a = range(1, 8);
shuffle($a);
$b = array_slice($a, 5);
printf('%.6f', microtime(1) - $s).'<br />';
echo '<pre>' . print_r($b, 1) . '</pre>';
//Nugle
$s = microtime(1);
$allDigits2 = array();
for($i=0; $i<3; $i++)
{
$size1 = sizeof($allDigits2);
$size2 = sizeof($allDigits2);
while($size2 != $size1 + 1)
{
$n = rand(1,8);
if(!in_array($n, $allDigits2))
$allDigits2[] = $n;
else
$n = rand(1,8);
$size2 = sizeof($allDigits2);
}
}
printf('%.6f', microtime(1) - $s).'<br />';
echo '<pre>' . print_r($allDigits2, 1) . '</pre>';
?>
всё равно быстрей ;)
neadekvat
не поверишь вообще не юзал printf('%.6f', .... вообще :D
твин я проверил 10 раз - картина (отрыв) похожий.
Цитата |
вообще я не люблю грязный код. Пусть не 30, пусть 3000 ты поставишь. Это все равно грязно. Ничтожная вероятность того, что не получится 3 чисел все равно существует. А это уже непрофессионально. |
а чем он грязен? тем что быстрее работает? всё. не завидуй. дорогу молодёже!
Спустя 1 минута, 32 секунды (2.02.2012 - 15:27) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 2.02.2012 - 16:26) |
а чем он грязен? тем что быстрее работает? |
Нет, тем, что у тебя с потолка взято число 30.
Спустя 6 минут, 5 секунд (2.02.2012 - 15:33) Игорь_Vasinsky написал(а):
почему - я - создовая алгортм для своего кода - не смогу взять этуц 30ку для условия? считай эту переменная высчитанная из теории вераятности с расчётом вероятности повтора 3*10 (не обаснованно). я бы увеличилд для этого интервала бы до 100 (тоже с потолка) - для своего алгоритма.
Спустя 4 минуты, 25 секунд (2.02.2012 - 15:38) Игорь_Vasinsky написал(а):
торможу
Спустя 7 минут, 1 секунда (2.02.2012 - 15:45) sergeiss написал(а):
...ждём-с версию с классами и полноценным ООП...
![wink.gif](http://phpforum.ru/html/emoticons/wink.gif)
Спустя 1 минута, 7 секунд (2.02.2012 - 15:46) Игорь_Vasinsky написал(а):
Свернутый текст
так не честно
Спустя 17 минут, 55 секунд (2.02.2012 - 16:04) twin написал(а):
Игорь_Vasinsky
Ты не понял. Нельзя мерять один запуск. Нужно мерять 1000 или 10000. Только тогда будет картина. Вот такая:
Ты не понял. Нельзя мерять один запуск. Нужно мерять 1000 или 10000. Только тогда будет картина. Вот такая:
Цитата |
twin: 0.153170 Игорь_Vasinsky: 0.432071 nugle: 0.707807 neadekvat: 0.455379 |
А вот тест, если интересно:
<?php
$start_time = microtime(1);
for($j = 0; $j < 10000; ++$j)
{
$a = range(1, 8);
shuffle($a);
$b = array_slice($a, 5);
}
printf('twin: %.6f<br>', microtime(1) - $start_time);
$start_time = microtime(1);
for($j = 0; $j < 10000; ++$j)
{
$allDigits = array();
for($i=0; $i<30; $i++)
{
$digit = rand(1,8);
if(!in_array($digit, $allDigits))
$allDigits[] = $digit;
if(sizeof($allDigits) == 3)
break;
}
}
printf('Игорь_Vasinsky: %.6f<br>', microtime(1) - $start_time);
$start_time = microtime(1);
for($j = 0; $j < 10000; ++$j)
{
$allDigits2 = array();
for($i=0; $i<3; $i++)
{
$size1 = sizeof($allDigits2);
$size2 = sizeof($allDigits2);
while($size2 != $size1 + 1)
{
$n = rand(1,8);
if(!in_array($n, $allDigits2))
$allDigits2[] = $n;
else
$n = rand(1,8);
$size2 = sizeof($allDigits2);
}
}
}
printf('nugle: %.6f<br>', microtime(1) - $start_time);
$start_time = microtime(1);
for($j = 0; $j < 10000; ++$j)
{
$min = 1;
$max = 8;
$count = 3;
$arr = array();
while(count($arr) != $count)
{
$num = rand($min, $max);
if ( ! in_array($num, $arr))
$arr[] = $num;
}
}
printf('neadekvat: %.6f<br>', microtime(1) - $start_time);
Спустя 1 минута, 39 секунд (2.02.2012 - 16:05) nugle написал(а):
Игорь_Vasinsky
тут вероятность не 1/10, а 1/8
тут вероятность не 1/10, а 1/8
Спустя 5 минут, 4 секунды (2.02.2012 - 16:11) Игорь_Vasinsky написал(а):
nugle
я предномеренно увеличил (с запасом)
Лан... бронза... эх,
twin: 0.026475
neadekvat: 0.042067
Vasinsky: 0.045620
nugle: 0.063306
я предномеренно увеличил (с запасом)
Лан... бронза... эх,
twin: 0.026475
neadekvat: 0.042067
Vasinsky: 0.045620
nugle: 0.063306
Спустя 5 минут, 1 секунда (2.02.2012 - 16:16) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 2.02.2012 - 16:33) |
считай эту переменная высчитанная из теории вераятности |
Без обид, но если бы действительно ее знал, то не назвал бы "теория вероятности" в то время, как это "теория вероятностей". К тому же, она много сложнее, чем ты изложил.
И последнее - теория вероятностей может использоваться для придания элементов искусственного интеллекта своему коду, но никак не для подсчета необходимого количества итерация в счетчике, который предназначен для других задач. Т.е. ты использовал не тот инструмент.
Спустя 1 минута, 45 секунд (2.02.2012 - 16:17) twin написал(а):
Игорь_Vasinsky
нифа у тебя тачка....
нифа у тебя тачка....
Свернутый текст
Ушел в магазин за железом.
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 14 минут, 35 секунд (2.02.2012 - 16:32) inpost написал(а):
twin: 0.016278
neadekvat: 0.023078
Игорь_Vasinsky: 0.025218
nugle: 0.036619
Спустя 13 секунд (2.02.2012 - 16:32) TMake написал(а):
sergeiss
по твоей просьбе :lol:
по твоей просьбе :lol:
Свернутый текст
Цитата |
0.000122 ObjQ Object ( [_result:ObjQ:private] => Array ( [0] => 7 [1] => 4 [2] => 6 ) ) |
class RandNum{
private static $_var = false;
public static function obj(){
if(!self::$_var)
self::$_var = new ObjQ();
return self::$_var;
}
public function getArr(){
return range(1, 8);
}
}
class ObjQ extends RandNum{
private $_result = array();
public function __construct(){
for($i = 0; $i < 3; $i++)
$this->shufflePop($this->getArr());
return $this->_result;
}
private function shufflePop($array){
shuffle($array);
$this->_result[] = array_pop($array);
}
}
$s = microtime(1);
$var = RandNum::obj();
printf('%.6f', microtime(1) - $s).'<br />';
echo '<pre>' . print_r($var, 1) . '</pre>';
Спустя 23 минуты, 40 секунд (2.02.2012 - 16:56) twin написал(а):
stepan
А ссылка в синглтоне зачем?
А ссылка в синглтоне зачем?
Спустя 4 минуты, 1 секунда (2.02.2012 - 17:00) TMake написал(а):
Цитата (twin @ 2.02.2012 - 17:56) |
А ссылка в синглтоне зачем? |
да тупанул не туда пхнул ее
Спустя 2 минуты, 23 секунды (2.02.2012 - 17:02) TMake написал(а):
там ссылка вообще не кместу
Спустя 9 минут, 25 секунд (2.02.2012 - 17:12) sergeiss написал(а):
Цитата (stepan @ 2.02.2012 - 17:32) |
sergeiss по твоей просьбе |
Не... Не годиЦЦа!
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
"Ну я так не играю!" (с) Карлсон
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 3 минуты, 17 секунд (2.02.2012 - 17:15) TMake написал(а):
sergeiss ну ты же не сказал в каком виде тебе это нужно, домой приду зделаю если ни кто не опередит, да в принципе какая разница сделаю - бегемотика из мухи
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Спустя 23 минуты, 13 секунд (2.02.2012 - 17:38) Игорь_Vasinsky написал(а):
Цитата |
нифа у тебя тачка.... |
да эт DELL с i3 тока))
Спустя 18 минут, 19 секунд (2.02.2012 - 17:56) nugle написал(а):
Игорь_Vasinsky
ты цикл на 10000 ставил?
ты цикл на 10000 ставил?
Спустя 1 минута, 14 секунд (2.02.2012 - 17:58) Игорь_Vasinsky написал(а):
ну твиновский, со 2й страницы - без именений скопипастил...
не стал ни чё проверять, твина то давно знаю
не стал ни чё проверять, твина то давно знаю
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Спустя 3 минуты, 57 секунд (2.02.2012 - 18:02) nugle написал(а):
моя i7 и то в 2 раза меленнее
Спустя 1 минута, 59 секунд (2.02.2012 - 18:04) inpost написал(а):
nugle
У меня i5, я показал свои результаты ранее. И это ещё на самом медленном винчестере, а у меня их 3
У меня i5, я показал свои результаты ранее. И это ещё на самом медленном винчестере, а у меня их 3
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 12 минут, 6 секунд (2.02.2012 - 18:16) nugle написал(а):
inpost
на хороший винт я еще не заработал) моему года 2) самый низкий показатель даёт среди всего железа)
на хороший винт я еще не заработал) моему года 2) самый низкий показатель даёт среди всего железа)
Спустя 4 минуты, 35 секунд (2.02.2012 - 18:20) Игорь_Vasinsky написал(а):
гоню.. это на работе же комп...там не помню что....
мой i3 вот (правда фотошоп открыт и около 30 вкладок в хроме)
twin: 0.042215
Vasinsky: 0.070927
nugle: 0.100645
neadekvat: 0.062816
мой i3 вот (правда фотошоп открыт и около 30 вкладок в хроме)
twin: 0.042215
Vasinsky: 0.070927
nugle: 0.100645
neadekvat: 0.062816
Спустя 2 часа, 11 минут, 22 секунды (2.02.2012 - 20:32) neadekvat написал(а):
Цитата |
twin: 0.034532 Игорь_Vasinsky: 0.050512 nugle: 0.071272 neadekvat: 0.048830 |
Celeron, нах.
Спустя 29 минут, 52 секунды (2.02.2012 - 21:01) Игорь_Vasinsky написал(а):
Свернутый текст
да хоть калькулятор
Спустя 2 часа, 6 минут, 14 секунд (2.02.2012 - 23:08) TMake написал(а):
sergeiss как и обещал ;)
Цитата |
0.000558 Array ( [0] => 12 [1] => 4 [2] => 19 [3] => 7 [4] => 18 ) |
/**
* Класс случайных чисел
*/
class RandNum{
private static $_var = false;
private $_rangeVar = array(1, 8);
private $_forVar = 3;
/**
* Синглатон объекта ObjQ
* @return object
*/
public static function obj(){
if(!self::$_var)
self::$_var = new ObjQ();
return self::$_var;
}
/**
* Создание числового диапазона
* @return array
*/
public function getArr(){
return range($this->_rangeVar[0], $this->_rangeVar[1]);
}
/**
* Установка промежутка
* числового диапазона
* @param int $num_big начало диапазона
* @param int $num_end конец диапазона
* @return void
*/
public function setArr($num_big, $num_end){
$this->_rangeVar = array((int)$num_big, (int)$num_end);
}
/**
* Количество возвращаемых цифр
* @return array
*/
public function getForVar(){
return $this->_forVar;
}
/**
* Установка количество возвращаемых цифр
* @param int $num количество цифр
* @return void
*/
public function setForVar($num){
$this->_forVar = (int)$num;
}
}
/**
* Модель случайных чисел
*/
class ObjQ extends RandNum{
private $_result = array();
/**
* Возвращение результата выполнения
* @return array
*/
public function getResult(){
for($i = 0; $i < $this->getForVar(); $i++)
$this->shufflePop($this->getArr());
return $this->_result;
}
/**
* Перемешиваем и выводим последний символ массива
* @param array $array массив чисел
* @return void
*/
private function shufflePop($array){
shuffle($array);
$this->_result[] = array_pop($array);
}
}
$s = microtime(1);
$obj = RandNum::obj();
$obj->setForVar(5);
$obj->setArr(1, 20);
$var = $obj->getResult();
printf('%.6f', microtime(1) - $s).'<br />';
echo '<pre>' . print_r($var, 1) . '</pre>';
Спустя 3 часа, 41 секунда (3.02.2012 - 02:08) UnWind написал(а):
Етить твою за ногу)
Даже и не знаю чем дополнить!
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Даже и не знаю чем дополнить!
![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)