Реклама на сайте Advertise with us

Подскажите как правильно

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 16:18       Ответить с цитатойцитата 

Lexikon писал:
ненужно тут ругаться.

Да никто не ругается, милые бранятся - только тешатся. smail101.gif

Lexikon писал:
Код работал 97.00127196312с.

97 секунд? Да, ты охуел. smail101.gif

Элементарная оптимизация и это время сокращается почти в 1000 раз.

txt.dat - 101Кб, 10240 строк, 0-5 слов sex в строчке.
Код:
public function bench_yacc() {
    $path = APPPATH.'test\\yacc\\';
    $file = $path.'txt.dat';
    $ch = array( 'vch.txt', 'sch.txt', 'nch.txt' );
    $r = array( '', '', '' );
    $file_array = file( $file );
    $fl = count( $file_array );
    $rl = count( $ch );
    if( is_array( $file_array ) AND $fl > 0 ) {
        for( $i = 0; $i < $fl; $i++ ) {
            $n_word = str_word_count( $file_array[ $i ] );
            $j = ( $n_word == 3 OR $n_word == 4 ) + 2 * ( $n_word > 4 );
            $r[ $j ] .= $file_array[ $i ];
        }
        for( $i = 0; $i < $rl; $i += 1) {
            file_put_contents( $path.$ch[ $i ], $r[ $i ] );
        }
    }
    else {
        echo( "Error Opening The File!" );
    }
}



Кто быстрее? smail101.gif

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 16:23       Ответить с цитатойцитата 

Lexikon писал:
Посоветуйте что почитать для развития знаний

Говна тебе сейчас насоветуют. icon_smile.gif

Поставь кохану - читай код.

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 16:27       Ответить с цитатойцитата 

у меня наверно что то не подключено ибо
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Warning: Unknown: Failed opening 'H:\www\_test\28\mx_script\script.php' for inclusion (include_path='.;C:\php5\pear') in Unknown on line 0

icon_confused.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 16:34       Ответить с цитатойцитата 

В переменной $path содержится путь до папки, в которой лежат необходимые файлы.

6
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 19:33       Ответить с цитатойцитата 

Цитата:
Код работал 2.2578520774841с. - второй код

Предсказуемо, так как создавался отдельный файл для каждого количества слов. Алгоритм по сути тот же, что и у последнего варианта Yacc. Только качество кода у него страдает и расход памяти двукратный. icon_smile.gif

Должно быть как-то так.

Код:
<?php

$filenames = array('vch.txt', 'sch.txt', 'nch.txt');
$string_list = file('txt.dat', FILE_SKIP_EMPTY_LINES);
$content = array_fill_keys($filenames, '');

while ($string = array_shift($string_list)) {
   $word_count = str_word_count($string);
   if ($word_count <= 2) {
      $content['vch.txt'] .= $string;
   } else if ($word_count == 3 || $word_count == 4) {
      $content['sch.txt'] .= $string;
   } else {
      $content['nch.txt'] .= $string;
   }
}

foreach ($content as $filename => $content_string) {
   file_put_contents($filename, $content_string);
}

Но самый правильный вариант - мой первый, т.к. может работать с файлами любых размеров.

Yacc писал:
Кто быстрее? smail101.gif

Ну ты бы все варианты прогнал, чтобы сравнить. Или мы тут меряемся конфигами?

ВОСТОРГ ЗНАЧИТ BMW

6
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 19:43       Ответить с цитатойцитата 

Lexikon писал:
Посоветуйте что почитать для развития знаний smail54.gif


PHP 5 в подлиннике - Котеров Д.

ВОСТОРГ ЗНАЧИТ BMW

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/11/11 в 19:48       Ответить с цитатойцитата 

ох ебать, ну вы нашли где письки оголять smail101.gif
в случае задачи у ТС пох на скорость и расход памяти, главное чтоб было максимально понятно, потому что он изучает рнр trollface.png

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 19:49       Ответить с цитатойцитата 

samedi писал:
Ну ты бы все варианты прогнал, чтобы сравнить. Или мы тут меряемся конфигами?

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/11/11 в 20:03       Ответить с цитатойцитата 

Yacc писал:


а что за бенч? icon_smile.gif

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 20:06       Ответить с цитатойцитата 

6
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 20:36       Ответить с цитатойцитата 

Не ожидал, что array_shift работает так медленно. Подправил.

yacc_1 0.153630018234 sec
yacc_2 0.0126509666443 sec
samedi_1 0.0351898670197 sec
samedi_2 0.0109429359436 sec

Мой вариант стабильно на 0.002 быстрее. smail101.gif

Полный код теста прикладываю.

Код: [развернуть]


Ну и как бы это, простоту и читаемость тоже учитываем. icon_cool.gif

ВОСТОРГ ЗНАЧИТ BMW

7
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 30/11/11 в 20:44       Ответить с цитатойцитата 

мля пхп-шное дрочерство какое-то icon_smile.gif по 0.002 секунды выжимать....
тогда и мои 5 капель задротства. foreach - самый медленный из циклов. писалось неоднократно. меняйте. перемеривайте свои писькомерки icon_biggrin.gif

5
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 21:54       Ответить с цитатойцитата 

samedi писал:
Мой вариант стабильно на 0.002 быстрее.

Типичный (лучший для тебя) результат:



Код:
public function bench_yacc2() {
    $path = APPPATH.'test\\yacc\\';

    $ch = array( 'vch.txt', 'sch.txt', 'nch.txt' );
    $r = array( '', '', '' );
    $f = file( $path.'txt.dat' );

    foreach( $f as $s ) {
        $w = str_word_count( $s );
        $r[ 1 - ( $w < 3 ) + ( $w > 4 ) ] .= $s;
    }

    $i = 0;
    foreach( $r as $s ) {
        file_put_contents( $path.$ch[ $i++ ], $s );
    }
}


Нормально мы тс-у код оптимизировали. smail101.gif

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/11/11 в 22:07       Ответить с цитатойцитата 

samedi писал:
Не ожидал, что array_shift работает так медленно. Подправил.

Мой вариант стабильно на 0.002 быстрее. smail101.gif

Код:
<?php

function samedi_2() {
    $filenames = array('vch.txt', 'sch.txt', 'nch.txt');
    $string_list = file('dat.txt', FILE_SKIP_EMPTY_LINES);
    $content = array_fill_keys($filenames, '');

    foreach ($string_list as $string) {
      $word_count = str_word_count($string);
      if ($word_count <= 2) {
         $content['vch.txt'] .= $string;
      } else if ($word_count == 3 || $word_count == 4) {
         $content['sch.txt'] .= $string;
      } else {
         $content['nch.txt'] .= $string;
      }
   }

   foreach ($content as $filename => $content_string) {
      file_put_contents($filename, $content_string);
   }
}


Ну и как бы это, простоту и читаемость тоже учитываем. icon_cool.gif


можно выиграть еще пару сотых миллисек на больших объемах, если сделать условие таким образом trollface.png
Код:

       if ($word_count <= 2) {
          $content['vch.txt'] .= $string;
       } else if ($word_count > 4) {
          $content['nch.txt'] .= $string;
       } else {
          $content['sch.txt'] .= $string;
       }

7
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 22:20       Ответить с цитатойцитата 

1000 прогонов каждой функции
yacc_3 11.9272489548 sec
samedi_3 11.7874038219 sec
ibiz_1 11.8154919147 sec

trollface.png

Код:
function samedi_3() {
    $string_list = file('dat.txt');
    $content = array('vch.txt' => '', 'sch.txt' => '', 'nch.txt' => '');

    foreach ($string_list as $string) {
      $word_count = str_word_count($string);
      if ($word_count > 4) {
         $content['nch.txt'] .= $string;
      } else if ($word_count > 2) {
         $content['sch.txt'] .= $string;
      } else {
         $content['vch.txt'] .= $string;
      }
   }

   foreach ($content as $filename => $content_string) {
      file_put_contents($filename, $content_string);
   }
}


Yacc писал:
Нормально мы тс-у код оптимизировали. smail101.gif


Продолжать смысла нет, так как каждый запуск - другие результаты.

ТС, ну ты понял, да? smail101.gif

ВОСТОРГ ЗНАЧИТ BMW

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 22:32       Ответить с цитатойцитата 

smail54.gif да, спасибо. smail101.gif
вобще походу вариантов может быть дохренище, сидя по этому топику, это как почерки в оффе.
У меня тут готовится база кеев, примерно миллион строк с ключевиками различной длины. Вот тут для себя задался мыслей обработать эту базу. Убрать лишнее, поудалять повторения и т.д.
Буду обращаться если что smail101.gif

на данный момент понимаю что регулярки это просто прелесть и без них не обойтись в таких скриптах, ну или обойтись, но будет геморно. Но немогу до конца понять всё это дело.
Как допустим с помощью регулярок
удалить символы +-.,
или
заменить одни символы или группу символов на другие.
Вроде всё просто и в тоже время порой как то всё по разному каждый раз. icon_confused.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

2
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 22:35       Ответить с цитатойцитата 

Lexikon писал:
Буду обращаться если что smail101.gif


Конечно! Принимаем паксум, вмз, пейпал. smail101.gif

ВОСТОРГ ЗНАЧИТ BMW

7
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 30/11/11 в 22:41       Ответить с цитатойцитата 

smail54.gif
это самый простой вариант для меня. smail101.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

2
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 30/11/11 в 22:42       Ответить с цитатойцитата 

samedi писал:
Принимаем паксум, вмз, пейпал

Я вмз не принимаю. smail101.gif

Lexikon писал:
Как допустим с помощью регулярок
удалить символы +-.,
или
заменить одни символы или группу символов на другие.

На будущее: не выдёргивай задачи из контекста - пиши тз полностью. Чаще всего есть решение без регулярок и оно всегда будет быстрее.

6
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 30/11/11 в 22:53       Ответить с цитатойцитата 

Lexikon писал:
Как допустим с помощью регулярок
удалить символы +-.,
или
заменить одни символы или группу символов на другие.

str_replace работает значительно быстрее любых регулярных выражений.

NB. Прежде чем выдумывать и писать свою функцию, нужно посмотреть мануал, возможно такая уже есть (например, подсчет слов). Родные функции всегда будут работать быстрее, так как написаны на си и являются частью ядра php.

ВОСТОРГ ЗНАЧИТ BMW

7
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 30/11/11 в 23:02       Ответить с цитатойцитата 

с str_replace не все так просто, например для него "А" и "а" имеют различия, а для str_ireplace нет trollface.png
и все таки под миллион строк лучше использовать базу данных, и делать нужные тебе выборки, например сразу со стоп словами trollface.png

7
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 02/12/11 в 12:21       Ответить с цитатойцитата 

Есть скрипт генерации файла по шаблону. Если его запустить он переберет весь список файлов и сгенерирует их. Нужно чтоб скрипт сработал в определенное время или срабатывал через заданный промежуток времени и генерировал только один файл потом сново, подошло время и он сгенерировал следующий, как я пологаю тут должна быть совмесная работа скрипта и крон. Но как застваить генерировать не всем разом, а по одному файлу х.з.
---
Подумал о таком алгоритме:
В цикле файла указать чтоб цикл выполнялся 1 раз, создать вспомогательный файл в котором сохранять номер последней строки которая выполнялась, и затем при сработке крон запускать скрипт в котором цикл будет читать вспомогательный файл видя номер сроки и переходить к следующей.
---
Верно ли мыслю???

PS: только не нужно писать готовых решений icon_wink.gif , я знаю что для вас это просто. Мне главное самому научиться и разобраться.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 02/12/11 в 13:04       Ответить с цитатойцитата 

мыслишь верно trollface.png

6
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 02/12/11 в 15:41       Ответить с цитатойцитата 

samedi писал:
1000 прогонов каждой функции
yacc_3 11.9272489548 sec
samedi_3 11.7874038219 sec
ibiz_1 11.8154919147 sec

trollface.png

Код:
function samedi_3() {
    $string_list = file('dat.txt');
    $content = array('vch.txt' => '', 'sch.txt' => '', 'nch.txt' => '');

    foreach ($string_list as $string) {
      $word_count = str_word_count($string);
      if ($word_count > 4) {
         $content['nch.txt'] .= $string;
      } else if ($word_count > 2) {
         $content['sch.txt'] .= $string;
      } else {
         $content['vch.txt'] .= $string;
      }
   }

   foreach ($content as $filename => $content_string) {
      file_put_contents($filename, $content_string);
   }
}




Продолжать смысла нет, так как каждый запуск - другие результаты.

ТС, ну ты понял, да? smail101.gif


еще можно получить пару сотых миллисекунд, если - file_put_contents работает медленнее чем fopen,fwrite trollface.png

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 02/12/11 в 17:18       Ответить с цитатойцитата 

Если я правильно понимаю работу крона то скрипт бует срабатывать как будто нажали на F5.
Вот что у меня получилось. это не готовый скрипт, но рабочий тут та часть которая отвечает за чтение по строкам при каждом новом обращении.
Незнаю на сколько верно это решение, но работает.
Вставал вопрос:
- Нужно ли проверять наполненость файла line_n.dat, вдруг он создался но пустой.
- Как правильно закончить работу скрипта когда он сгенерировал все файлы, я вставил exit(); х.з. на сколько это верно.
- Также думал стоит ли с помощью регулярок убирать возможные символы кроме цифр (хотя откуда им там взяться) и думал стоит ли удалять пробелы в начале и конце, но всеже решил это сделать.
Код: [развернуть]


Это содержание файла text.dat

Код: [развернуть]


По тесту код работал примерно 0.0279381275177с. незнаю много это или мало для такого скрипта.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »