$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
как его перенабрать так, чтобы получилось
0, 9, 1, 8, 2, 7, 3, 6, 4, 5
свой вариант
$j = 0;
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
for($i=1; $i<count($array)+1; $i++)
{
$arr[$i] = $array[$j];
$array = array_reverse($array);
if($i%2==0) $j++;
}
print_r($arr);
Спустя 41 минута, 53 секунды (12.07.2010 - 15:30) KaFe написал(а):
правила, которым должен будет удовлетворять результат, перечисли.
Спустя 3 минуты, 21 секунда (12.07.2010 - 15:33) tmt0086 написал(а):
KaFe
одно число первое, второе последнее и тд
одно число первое, второе последнее и тд
Спустя 6 минут, 23 секунды (12.07.2010 - 15:40) linker написал(а):
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$len = count($array); // Лучше один раз высчитать длину массива, чем каждый раз в цикле
$max = $len - 1; // Тоже самое, фактически (сокращаем кол-во операций, выигрываем в скорости)
$result_array = array();
for($pos = 0; $pos < $len; $pos ++, $max --)
{
if ($pos > $max) { break; }
$result_array[] = $array[$pos];
if ($pos == $max) { break; }
$result_array[] = $array[$max];
}
print_r($result_array);
Спустя 22 минуты, 8 секунд (12.07.2010 - 16:02) KaFe написал(а):
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10,11,12 );
$ar=count($array)-1;$ar;$arr=($ar/2);$v=-1;
for ($x=0;$x<$arr;$x++)
{
$v++;
$g[$v]=$array[$x];
$v++;
$g[$v]=$array[$ar-$x];
}
if ($ar%2==0) {$v++;$g[$v]=$array[$arr];}
print_r($g);
Спустя 1 час, 25 минут, 47 секунд (12.07.2010 - 17:27) qpayct написал(а):
мда.....
всегда казалось, что мало кода - лучше
теперь убедился, что нет
за это вам спасибо и +1
всегда казалось, что мало кода - лучше
теперь убедился, что нет
за это вам спасибо и +1
Спустя 19 минут, 48 секунд (12.07.2010 - 17:47) KaFe написал(а):
Я считаю, что мой понятнее всех для новичка. Но у linker красиво выгладит, , и работает также по скорости как и у меня .
я завидую
До мне наконец дотюкала фраза
я завидую
До мне наконец дотюкала фраза
Цитата (qpayct @ 12.07.2010 - 14:27) |
всегда казалось, что мало кода - лучше теперь убедился, что нет |
после того когда запустил тест на производительность
Спустя 22 минуты, 35 секунд (12.07.2010 - 18:10) qpayct написал(а):
Цитата (KaFe @ 12.07.2010 - 16:47) |
Я считаю, что мой понятнее всех для новичка |
это ты так пошутил в стиле "моё лучше и ниипёт"?
а вот и коктейль "новых знаний"
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);немного лучше, но всёравно отстаёт в среднем на 30%.... обидно
$carr = count($array);
$j = $carr - 1;
for($i=0; $i<$carr; $i++, $j --)
{
$array = array_reverse($array);
$arr[$i] = $array[$j];
unset($array[$j]);
}
print_r($arr);
и это не смотря на то что кода якобы на 2 строки меньше и без условий(экономит пару операций в пользу array_reverse())
что скажите?
Спустя 21 минута, 23 секунды (12.07.2010 - 18:31) KaFe написал(а):
qpayct лучше используй код linker'a .
Цитата (KaFe @ 12.07.2010 - 14:47) |
в стиле "моё лучше и ниипёт"? |
Именно
Спустя 55 минут, 53 секунды (12.07.2010 - 19:27) qpayct написал(а):
Цитата (KaFe @ 12.07.2010 - 17:31) |
qpayct лучше используй код linker'a |
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);победила дружба!
$c = count($array);
$j = $c - 1;
$c = $c / 2;
$arr = array();
for($i=0; $i<$c; $i++,$j-- )
{
if($i == $j) break;
$arr[] = $array[$i];
$arr[] = $array[$j];
}
print_r($arr);
Спустя 2 часа, 8 минут, 2 секунды (12.07.2010 - 21:35) linker написал(а):
qpayct
Ну во-первых, array_reverse() жутко тормозит, а делается это при каждой итерации цикла. Во-вторых, unset в массиве, по которому идет цикл, не всегда кузяво.
Мой код, тоже не блещет идеалом, два брейка в цикле режут глаза таки.
p.s., кстати последний вариант не работает в случае если количество элементов в массиве нечетное количество.
Спустя 58 минут, 10 секунд (12.07.2010 - 22:33) Basili4 написал(а):
может уже позно и я чего то не понимаю но помоему проще всего так
<?php
$arr=array(1,2,3,4,5,6,7,8,9,0);
$max=count ($arr);
$len =$max/2;
echo $max;
$itog=array();
for ($i=0;$i<$len;$i++)
{
$itog[]=$arr[$i];
$itog[]=$arr[$max-$i-1];
}
print_r($itog);
?>
Спустя 1 час, 30 минут, 27 секунд (13.07.2010 - 00:04) qpayct написал(а):
linker
опять накосячил не там бреак поставил
Basili4
опять накосячил не там бреак поставил
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$c = count($array);
$j = $c - 1;
$c = $c / 2;
$arr = array();
for($i=0; $i<$c; $i++,$j-- )
{
$arr[] = $array[$i];
if($i == $j) break;
$arr[] = $array[$j];
}
print_r($arr);
Basili4
Цитата (linker @ 12.07.2010 - 20:35) |
не работает в случае если количество элементов в массиве нечетное количество. |
как быть с этим?
кстати полюбому можно ещё лучше. достаточно ведь просто переставить местами ключи массива
кстати полюбому можно ещё лучше. достаточно ведь просто переставить местами ключи массива
Спустя 23 минуты, 8 секунд (13.07.2010 - 00:27) sergeiss написал(а):
А вот ишшо вариант... Сначала получаем все ключи массива в виде отдельного массива, а потом "тупо" вызываем по очереди нужные элементы и упаковываем их в новый массив. Вроде бы, нормально работает и с четным, и с нечетным количеством элементов. И пофиг , какие индексы у массива - числовые или символьные.
PS. После отправки немного скорректировал код, т.к. отправил сначала не самый последний вариант.
$array = array(0, 1, 2, 3, 4, 5, 6, 'new'=>7, 8, 9, 10);
$keys=array_keys( $array );
$c=count( $array );
$new_arr=array();
for( $i=0; $i<($c/2.); $i++)
{
$new_arr[ $i*2 ] =$array[ $keys[$i] ];
if( $i < $c-$i-1 )
$new_arr[ $i*2+1 ]=$array[ $keys[$c-$i-1] ];
}
echo '<pre>'; var_dump( $new_arr ); echo '</pre>';
PS. После отправки немного скорректировал код, т.к. отправил сначала не самый последний вариант.
Спустя 22 минуты, 13 секунд (13.07.2010 - 00:49) qpayct написал(а):
sergeiss
Цитата |
$len = count($array); // Лучше один раз высчитать длину массива, чем каждый раз в цикле $max = $len - 1; // Тоже самое, фактически (сокращаем кол-во операций, выигрываем в скорости) |
и зачем вот тут точка интересно? ($c/2.)
Спустя 8 часов, 12 минут, 34 секунды (13.07.2010 - 09:02) sergeiss написал(а):
qpayct - а я тоже не понял Цитата чья-то, а вопрос ко мне
Объясняю: точку я поставил на всякий случай, дабы не заморачиваться - целочисленное будет деление или вещественный результат. Посреди ночи не хотелось мозги нагружать особо-то
Самое главное - рабочий алгоритм или как?
Объясняю: точку я поставил на всякий случай, дабы не заморачиваться - целочисленное будет деление или вещественный результат. Посреди ночи не хотелось мозги нагружать особо-то
Самое главное - рабочий алгоритм или как?
Спустя 1 час, 20 минут, 35 секунд (13.07.2010 - 10:22) KaFe написал(а):
Цитата (sergeiss @ 13.07.2010 - 06:02) |
Самое главное - рабочий алгоритм или как? |
самое главное чтобы было все в шоколаде
! | [mod][/mod]sergeiss |
Предупреждение за флуд в тематическом разделе.
Спустя 32 минуты, 55 секунд (13.07.2010 - 10:55) Wird_34 написал(а):
Еще немного откорректировал код linker'а:
И свой написал:
$array = array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
$array_size = count( $array );
$j = $array_size - 1;
$result_array = array();
for ( $i = 0; $i < $j; $i++, $j-- ) {
$result_array[] = $array[$i];
$result_array[] = $array[$j];
}
if ( $array_size % 2 ) {
$result_array[] = $array[$j];
}
print_r($result_array);
И свой написал:
$array = array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
$array_size = count( $array );
$i = 0;
$j = $array_size - 1;
$result_array = array();
for ( $k = 0; $k < $array_size; $k++ ) {
if ( $k % 2 == 0 ) {
$result_array[] = $array[$i];
$i++;
} else {
$result_array[] = $array[$j];
$j--;
}
}
print_r($result_array);
Спустя 1 минута, 33 секунды (13.07.2010 - 10:57) tomash написал(а):
$array1 = array(0, 1, 2, 3, 4, 5, 6, 7, 8,9);
$cnt = count($array1);
for ($i = 0; $i < $cnt/2; $i++)
{
$array2[] = $array1[$i];
$array2[] = $array1[$cnt - $i - 1];
}
if ($cnt%2) array_pop($array2);
Спустя 23 минуты, 27 секунд (13.07.2010 - 11:20) Basili4 написал(а):
tomash
был такой вариант я писал недостаток не льзя использовать с массмвами с нечетным количество элементов как вариант доюовлять моссив до четности и и если был добавлен в конце сносить левые значения
был такой вариант я писал недостаток не льзя использовать с массмвами с нечетным количество элементов как вариант доюовлять моссив до четности и и если был добавлен в конце сносить левые значения
Спустя 1 минута, 2 секунды (13.07.2010 - 11:21) linker написал(а):
Еще более быстрый вариант от меня
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$len = ceil(count($array)/2);
$max = count($array) - 1;
$result_array = array();
for($pos = 0; $pos < $len; $pos ++, $max --)
{
$result_array[] = $array[$pos];
if ($pos <> $max) $result_array[] = $array[$max];
}
Спустя 19 секунд (13.07.2010 - 11:22) sergeiss написал(а):
Цитата (tomash @ 13.07.2010 - 11:57) |
$array1 =array(0, 1, 2, 3, 4, 5, 6, 7, 8,9); $cnt = count($array1); for ($i = 0; $i < $cnt/2; $i++) { $array2[] = $array1[$i]; $array2[] = $array1[$cnt - $i - 1]; } if ($cnt%2) array_pop($array2); |
tomash - ты взял мой код и упростил его (да ещё и копирайт не указал ). При этом ты его сделал НЕУНИВЕРСАЛЬНЫМ (!). Потому что в твоём коде подразумевается (как во многих других языках и есть), что индексы массива цифровые и идут подряд, без пропусков. Но в ПХП это не так. Поэтому "твой" код очень ограничен.
Я для того и вводил массив $keys в своём коде, чтобы учесть именно эту особенность ПХП.
linker - та же фигня, ты подразумеваешь, что индексы массива чисто числовые, идут подряд, начинаются с нуля (но это только частный случай!!!).
Спустя 12 минут, 38 секунд (13.07.2010 - 11:34) linker написал(а):
sergeiss, ну такое условие было , вот вариант "ключе-независимый"
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
$len = ceil(count($array)/2);
$max = count($array) - 1;
$keys = array_keys($array);
$result_array = array();
for($pos = 0; $pos < $len; $pos ++, $max --)
{
$result_array[] = $array[$keys[$pos]];
if ($pos <> $max) $result_array[] = $array[$keys[$max]];
}
Спустя 8 минут, 57 секунд (13.07.2010 - 11:43) sergeiss написал(а):
linker - да, это лучше намного смотрится. Хотя, в конце ключик 'link_error' был бы более в тему
Я почему говорю насчет универсальности... Потому что много раз было уже тут на форуме: человек спросил что-то, частный случай. А ему надо, на самом деле, более универсальное решение. И он опять продолжает задавать тот же вопрос, но уже "с вариациями".
Я почему говорю насчет универсальности... Потому что много раз было уже тут на форуме: человек спросил что-то, частный случай. А ему надо, на самом деле, более универсальное решение. И он опять продолжает задавать тот же вопрос, но уже "с вариациями".
Спустя 36 минут, 27 секунд (13.07.2010 - 12:20) igovet написал(а):
$array->arr_tmp = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$array->count = count($array->arr_tmp) - 1;
for($i=0, $j=$array->count; $i<$array->count; $i++, $j--)
{
if($array->arr_tmp[$i] >= $array->arr_tmp[$j]) break;
$array->arr[$i] = $array->arr_tmp[$i];
$array->arr[$j] = $array->arr_tmp[$j];
}
var_dump($array->arr);
Спустя 4 минуты, 19 секунд (13.07.2010 - 12:24) qpayct написал(а):
sergeiss
я не делаю замечаний, а просто интересно почему так. комментарии цитировал ибо их автор - Линкер и мне вот интересно может я чего то не понимаю или же он был прав и это относится к моему, а теперь и вашему коду?
по поводу универсальности согласен, хоть и не понимаю зачем перестраивать ассоциативный массив пирамидой? числовой для проверки кода, для парсинга и т.п. а ассоциативный разве чтобы ёлочку из стринга рисовать
linker
ceil() работает быстрее чем round() прикольно
Wird_34
всё это уже пробовали. работает, но можно и лучше
igovet
у вас прокрутка в цикле вдважды больше....
я не делаю замечаний, а просто интересно почему так. комментарии цитировал ибо их автор - Линкер и мне вот интересно может я чего то не понимаю или же он был прав и это относится к моему, а теперь и вашему коду?
по поводу универсальности согласен, хоть и не понимаю зачем перестраивать ассоциативный массив пирамидой? числовой для проверки кода, для парсинга и т.п. а ассоциативный разве чтобы ёлочку из стринга рисовать
linker
ceil() работает быстрее чем round() прикольно
Wird_34
всё это уже пробовали. работает, но можно и лучше
igovet
у вас прокрутка в цикле вдважды больше....
Спустя 5 минут, 37 секунд (13.07.2010 - 12:30) igovet написал(а):
qpayct
Она останавливается тогда, когда нужно, это ничему не мешает.
Она останавливается тогда, когда нужно, это ничему не мешает.
Спустя 6 минут, 4 секунды (13.07.2010 - 12:36) qpayct написал(а):
igovet
ага, и всё что в цикле нужно умножить на 2, чтобы получить конечный итог выполняемых операций. мало того! ко всему ещё и классом зачем-то....
взяли мой "коктейль" и переименовали переменные да ещё и цикл увеличили вдважды. а толку?
ага, и всё что в цикле нужно умножить на 2, чтобы получить конечный итог выполняемых операций. мало того! ко всему ещё и классом зачем-то....
взяли мой "коктейль" и переименовали переменные да ещё и цикл увеличили вдважды. а толку?
Спустя 3 минуты, 22 секунды (13.07.2010 - 12:39) twin написал(а):
Нате вам.
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
$i = 0;
while(count($array))
$arr[] = !(++$i%2)?array_pop($array):array_shift($array);
print_r($arr);
Спустя 7 минут, 24 секунды (13.07.2010 - 12:46) igovet написал(а):
qpayct
Зачем умножать на 2, ты код мой хоть понимаешь? Какая разница какое значение в цикле, пусть хоть 1 000 000, он выполниться с той же скоростью что и с цифрой 4, а знаешь почему? Потому что на цифре 4, мой цикл закончит работу.
if($array->arr_tmp[$i] >= $array->arr_tmp[$j]) break;
Чем плохо писать классом?
Зачем умножать на 2, ты код мой хоть понимаешь? Какая разница какое значение в цикле, пусть хоть 1 000 000, он выполниться с той же скоростью что и с цифрой 4, а знаешь почему? Потому что на цифре 4, мой цикл закончит работу.
if($array->arr_tmp[$i] >= $array->arr_tmp[$j]) break;
Чем плохо писать классом?
Спустя 3 минуты, 18 секунд (13.07.2010 - 12:50) qpayct написал(а):
twin
а работает то в 10 раз медленее
пример лаконичности или как там?
igovet
твой код !?
насчёт брэйка это да. торможу
а работает то в 10 раз медленее
пример лаконичности или как там?
igovet
твой код !?
насчёт брэйка это да. торможу
Спустя 58 секунд (13.07.2010 - 12:51) KaFe написал(а):
twin глупости какие 0,399 секунд за 10000 оборотов, когда у linker 0.220
Спустя 1 минута, 50 секунд (13.07.2010 - 12:52) sergeiss написал(а):
Кстати, насчет скорости. "Мой" код как? Я его не сравнивал с другими, а автор темы, наверное, сравнил?
Спустя 3 минуты, 19 секунд (13.07.2010 - 12:56) twin написал(а):
Ну я не мерял. Просто при решении задачи привык оперировать очевидными вещами. Впрочем, скорость тут падает из за цикла. Вот так к примеру будет быстрее:
Можно еще помудрить, если так критично.
$c = count($array);
for($i = 0; $i < $c; ++$i)
$arr[] = !($i%2)?array_pop($array):array_shift($array);
Можно еще помудрить, если так критично.
Спустя 1 минута, 57 секунд (13.07.2010 - 12:58) qpayct написал(а):
sergeiss
а как же? но сравнивать не буду у вас совсем по другим условиям код(ассоциативные массивы) а это конечно тормозит процесс
twin
а как же? но сравнивать не буду у вас совсем по другим условиям код(ассоциативные массивы) а это конечно тормозит процесс
twin
$array=array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);вот так будет ваще прикольно
$c = count($array);
for($i = $c; $i > 0; --$i)
$arr[] = !($i%2) ? array_pop($array) : array_shift($array);
print_r($arr);
Спустя 3 минуты, 25 секунд (13.07.2010 - 13:01) DedMorozzz написал(а):
к слову о птичках - вайл быстрее фора
Спустя 1 минута, 41 секунда (13.07.2010 - 13:03) qpayct написал(а):
DedMorozzz
мои замерки в данном коде гооврят против вас....
мои замерки в данном коде гооврят против вас....
Спустя 1 минута, 2 секунды (13.07.2010 - 13:04) Basili4 написал(а):
twin
Я думаю что несовсем удачный вариант пробегать весь массив
может
лучше так
Я думаю что несовсем удачный вариант пробегать весь массив
может
лучше так
$c=count($array) ;
$f=$c%2;
$c=($c /2)-$f;
for($i = 0; $i < $c; ++$i)
{
$arr[] = array_pop($array);
$arr[] =array_shift($array);
}
if ($f==1) $arr[] = array_pop($array);
Спустя 1 минута, 25 секунд (13.07.2010 - 13:05) linker написал(а):
Цитата |
Чем плохо писать классом? |
Тем, что оно тут не нужно в принципе. Да и реализация объектами неправильная, необходимость класса когда пишешь только:
print_r($Array->reSet());
Спустя 1 минута, 6 секунд (13.07.2010 - 13:06) DedMorozzz написал(а):
qpayct
дык возьми самое простое действие, к примеру инкримент. И пропусти через фор 10к раз. И пропусти через вайл. Измерь время и сравни. Вайл быстрее
дык возьми самое простое действие, к примеру инкримент. И пропусти через фор 10к раз. И пропусти через вайл. Измерь время и сравни. Вайл быстрее
Спустя 4 минуты, 9 секунд (13.07.2010 - 13:11) qpayct написал(а):
Цитата (qpayct @ 13.07.2010 - 12:03) |
DedMorozzz мои замерки в данном коде гооврят против вас.... |
я и не спорю, а уточняю
Спустя 2 минуты, 3 секунды (13.07.2010 - 13:13) linker написал(а):
DedMorozzz, в данном случае while или for не имеет значения, производительность гробят цикличные вызовы функций array_pop() и array_shift()
Спустя 4 минуты, 5 секунд (13.07.2010 - 13:17) linker написал(а):
Вот еще пример, работает вдвое быстрее моего предыдущего
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
$result_array = array();
$len = ceil(count($array)/2);
$max = count($array) - 1;
$keys = array_keys($array);
$pos = 0;
while($pos < $len)
{
$result_array[] = $array[$keys[$pos]];
if ($pos <> $max) $result_array[] = $array[$keys[$max]];
$pos ++;
$max --;
}
Спустя 5 минут, 36 секунд (13.07.2010 - 13:22) KaFe написал(а):
По вникал в суть дела, и вот так свой переделал
$array = array( 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10,11,12,'a'=>50);
$array=array_values ($array);
$ar=count($array)-1;$ar;$arr=($ar/2);
for ($x=0;$x<$arr;$x++)
{
$g[]=$array[$x];
$g[]=$array[$ar-$x];
}
if ($ar%2==0) $g[]=$array[$arr];
}
Спустя 2 минуты, 1 секунда (13.07.2010 - 13:24) Wird_34 написал(а):
А разве программист не должен стремиться к балансу между понятностью кода и его эффективностью. Одно дело предлагать разные варианты решения, но другое переписывать его в более непонятный, но при этом работающий на 5 наносекунд быстрее. Может другие задачи порешаем?
Спустя 4 минуты, 47 секунд (13.07.2010 - 13:29) KaFe написал(а):
linker ваш последний код имеет показатели 0.240 сек., мой последний код 0.205 сек. за 10000 обращений:lol:
Спустя 28 секунд (13.07.2010 - 13:30) igovet написал(а):
linker
Писать классом как написал я, это удобно для визуального восприятия, так как в большом коде когда пишешь, есть основной объект, а в нём уже хранится всё что тебе нужно, нет путаницы в переменных.
Необходимость класса бывает очень разной, узко мыслим.
Писать классом как написал я, это удобно для визуального восприятия, так как в большом коде когда пишешь, есть основной объект, а в нём уже хранится всё что тебе нужно, нет путаницы в переменных.
Необходимость класса бывает очень разной, узко мыслим.
Спустя 2 минуты, 1 секунда (13.07.2010 - 13:32) KaFe написал(а):
Цитата (sergeiss @ 13.07.2010 - 09:52) |
Кстати, насчет скорости. "Мой" код как? Я его не сравнивал с другими, а автор темы, наверное, сравнил? |
0.285 сек. за 10000 обращений
Спустя 1 минута, 30 секунд (13.07.2010 - 13:33) twin написал(а):
Вот наверно самый лаконичный и читабельный код:
хотя по скорости уступает последнему от linker
Вообще при разработке нужно учитывать все параметры. Если предполагается обработка больших массивов или их много, то стоит задуматься о скорости. А если такой, какой в примере, то выигрыш в пару десятитысячных секунды не стоит таких заморочек в ущерб прозрачности.
igovet
$c = count($array);
while($c)
$arr[] = (--$c % 2) ? array_shift($array) : array_pop($array);
хотя по скорости уступает последнему от linker
Вообще при разработке нужно учитывать все параметры. Если предполагается обработка больших массивов или их много, то стоит задуматься о скорости. А если такой, какой в примере, то выигрыш в пару десятитысячных секунды не стоит таких заморочек в ущерб прозрачности.
igovet
Цитата |
Писать классом как написал я, это удобно для визуального восприятия |
Спустя 15 секунд (13.07.2010 - 13:33) linker написал(а):
KaFe, ну не знаю, проверил у себя, ваше время:
5.79357147217E-5 сек.
против моего
1.31130218506E-5 сек.
у меня получается быстрее в 2.67 раза быстрее
5.79357147217E-5 сек.
против моего
1.31130218506E-5 сек.
у меня получается быстрее в 2.67 раза быстрее
Спустя 30 секунд (13.07.2010 - 13:34) KaFe написал(а):
igovet ......
! | [mod][/mod]sergeiss |
решать такую задачу классами, чтобы букф больше больше?
от sergeiss: тут было "неправильное" слово. Второе и последнее предупреждение автору сообщения (в данном случае за ответ, которым может быть рассмотрен как оскорбительный).
от sergeiss: тут было "неправильное" слово. Второе и последнее предупреждение автору сообщения (в данном случае за ответ, которым может быть рассмотрен как оскорбительный).
Спустя 55 секунд (13.07.2010 - 13:35) sergeiss написал(а):
Цитата (KaFe @ 13.07.2010 - 14:32) |
0.285 сек. за 10000 обращений |
А ты учел, кстати, что в моём коде 11 элементов в массиве, а у большинства - 10 элементов? То, что там ассоциативный ключ - это хорошо А вот количество элементов лучше, чтоб одинаковое было.
Спустя 44 секунды (13.07.2010 - 13:35) KaFe написал(а):
linker входные данные одинаковые??? sergeiss да я учитывал данный факт.Результаты проверял на три раза, могу сказать одно.
While в два раза требовательнее for
P.S: На счет предупреждения! За что???
While в два раза требовательнее for
P.S: На счет предупреждения! За что???
Спустя 4 минуты (13.07.2010 - 13:39) linker написал(а):
KaFe, абсолютно одинаковые и там и там
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
Спустя 4 минуты, 35 секунд (13.07.2010 - 13:44) KaFe написал(а):
Я все еще раз перепроверил, у меня цифры правильные, покажите как вы проверяете
Спустя 8 минут, 26 секунд (13.07.2010 - 13:52) sergeiss написал(а):
Цитата (KaFe @ 13.07.2010 - 14:35) |
P.S: На счет предупреждения! За что??? |
Предупреждения пока устные, без занесения в трудовую книжку Но оба они нарушают Правила форума http://phpforum.ru/index.php?act=boardrules (ссылка вверху страницы есть):
1. За флуд (в начале этой темы).
2. За высказывание, которое может быть расценено как оскорбительное другим участником форума.
А бан на данном этапе ты не получил только потому, что другие твои высказывания в теме были по делу. Потому пока только предупреждения.
И третье нарушение, кстати Публичное обсуждение действий модератора....
Спустя 1 минута, 58 секунд (13.07.2010 - 13:54) linker написал(а):
KaFe, да банально проверяю
$start = microtime(1);
... // Ваш код
$subtime1 = microtime(1) - $start;
$start = microtime(1);
... // Мой код
$subtime2 = microtime(1) - $start;
if ($subtime1 > $subtime2)
{
echo "У меня быстрее в " . ($subtime1/$subtime2) . " раза";
}
Спустя 16 минут, 44 секунды (13.07.2010 - 14:11) KaFe написал(а):
KaFe удивительное рядом, поменяйте местами код (первый будет ваш, а второй мой).
Я поменял, выдало
Я поменял, выдало
Цитата |
уменя быстрее в 2.53947368421 раза |
Кстати мой метод
$t = explode(" ",microtime());$start_t=$t[1]+$t[0];
//Здесь тестируем код, при том каждый код тестируется по отдельности, дабы ...
$t = explode(" ",microtime());$end_t=$t[1]+$t[0];
echo ($end_t-$start_t);
Спустя 22 минуты, 19 секунд (13.07.2010 - 14:33) qpayct написал(а):
дык ясный пень вариант линкера самый, что ненаесть оптимальный . Убираем асс.массивы и вообще просто чудо оптимизации. Ладно, думаю тема исчерпала себя.
З.Ы. Удивлюсь, если в конкурсе Твина в номинации 'самый оптимальный код' победит не Линкер
З.Ы. Удивлюсь, если в конкурсе Твина в номинации 'самый оптимальный код' победит не Линкер
Спустя 22 часа, 35 минут (14.07.2010 - 13:08) qpayct написал(а):
ещё одно важное разоблачение пхп5.
(за пример возьму код Линкера т.к. он самый шустрый)
(за пример возьму код Линкера т.к. он самый шустрый)
выведет
$array = array(0,1,2,3,4,5,6,7,8,9);
$arr = array();
$max = count($array) - 1;
$len = $max/2;
$pos = 0;
//$keys = array_keys($array);
while($pos < $len)
{
$arr[] = $array[$pos];
if ($pos == $max) break;
$arr[] = $array[$max];
$pos ++;
$max --;
}
$arr[3] = 'ok';
print_r($array);
Цитата |
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 ) |
так что несмотря на то что это пхп 5.3.1 всёодно надо прописывать
вот такие дела
$array = array(0,1,2,3,4,5,6,7,8,9);
$arr = array();
$max = count($array) - 1;
$len = $max/2;
$pos = 0;
//$keys = array_keys($array);
while($pos < $len)
{
$arr[] = &$array[$pos];
if ($pos == $max) break;
$arr[] = &$array[$max];
$pos ++;
$max --;
}
$arr[3] = 'ok';
print_r($array);
Спустя 1 час, 23 минуты, 10 секунд (14.07.2010 - 14:32) qpayct написал(а):
самый быстрый(пока) вариант
$array = array(0,1,2,3,4,5,6,7,8,9);
$pos = 0;
$max = count($arr) - 1;
$len = $max / 2;
$arr = array();
while($pos < $len)
{
$arr[] = &$array[$pos];
if ($pos == $max) break;
$arr[] = &$array[$max];
$pos++;
$max--;
}
Спустя 14 минут, 13 секунд (14.07.2010 - 14:46) sergeiss написал(а):
Я бы порекомендовал не гоняться за скоростью, а делать так, как понятнее и логичнее
Вот подсчитай. Тут мелькали цифры типа 0.28 сек за 10 тыс циклов. Теперь делим и получаем 2.8е-6 сек на одну итерацию цикла. И пусть там будет даже в 10 раз дольше время, 2.8е-5 сек. Ты лично это заметишь?
Вот подсчитай. Тут мелькали цифры типа 0.28 сек за 10 тыс циклов. Теперь делим и получаем 2.8е-6 сек на одну итерацию цикла. И пусть там будет даже в 10 раз дольше время, 2.8е-5 сек. Ты лично это заметишь?
Спустя 3 минуты, 54 секунды (14.07.2010 - 14:50) qpayct написал(а):
sergeiss
нет конечно , но дело в другом я учусь изначально правильно строить. вот еслиб я не задался этим вопрсом разве узнал бы о таких тонкостях пхп5?
нет конечно , но дело в другом я учусь изначально правильно строить. вот еслиб я не задался этим вопрсом разве узнал бы о таких тонкостях пхп5?