Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Renat Araslanow                      2:5011/119     17 Jan 2001  14:15:07
 To : Alexander Babanov
 Subject : Re: regexp
 -------------------------------------------------------------------------------- 
 
 
  Однажды 14 Jan 01 21:31, Alexander Babanov писал Renat Araslanow:
 
 RA>> почему 1 while s/(\d)(\d\d\d)(?!\d)/$1 $2/; медленне в ~20 раз чем
 RA>> 1 while s/(\d+)(\d{3,})/$1 $2/; ?
 RA>> я так понял это из-за свойства "жадности" +, но тогда как проходит
 RA>> сравнение?
 AB> Сделай use re "debug" на, скажем, десятке еденичек и понаблюдай за
 AB> процессом. В кратце, в первом выражении Перл хитрит и работает с конца,
 AB> во
 AB> втором - каждый раз бежит с самого начала. Причем трижды для каждого
 AB> пробела =8I
 
 AB> Hе понятно только зачем это все, вариант с reverse все равно много быстрее
 AB> и корректнее.
 
 с реверсом это вот так?
 
 $val =  reverse $val;
 $val =~ s/(\d\d\d)/$1 /g;
 $val = reverse ( $val );
 
 тогда при таком коде
 
 use Benchmark;
 $val="11113333333111111111";
 Benchmark::cmpthese( 1000000, {
     -first  => sub {local $val;     $val =  reverse $val;
                                     $val =~ s/(\d\d\d)/$1 /g;
                                     $val = reverse ( $val );
  },
     -second => sub {local $val; 1 while $val=~s/^(\d+)(\d{3})/$1 $2/g; },
 } );
 
 вот такие рез-ты:
 Benchmark: timing 1000000 iterations of -first, -second...
     -first:  4 wallclock secs ( 4.97 usr +  0.00 sys =  4.97 CPU) @ 201288.24/s
 (n=1000000)
    -second:  1 wallclock secs ( 2.26 usr +  0.00 sys =  2.26 CPU) @ 441696.11/s
 (n=1000000)
             Rate  -first -second
 -first  201288/s      --    -54%
 -second 441696/s    119%      --
 
 не быстрее... да, а что насчёт кореектности?
 
                     [TEAM Чайник с программным управлениемЪ]
             [Преждевременная оптимизация -- корень всех зол Д. Кнут]
 --- спасибо фиpме AMD за Celeron от фирмы intel :-)
  * Origin: BBS in DEN! DOWN: 644-888 23-07 (2:5011/119)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 regexp   Renat Araslanow   15 Jan 2001 00:36:16 
 Re: regexp   Alexander Babanov   14 Jan 2001 22:31:19 
 Re: regexp   Renat Araslanow   17 Jan 2001 14:15:07 
 Re: regexp   Alexander Babanov   18 Jan 2001 01:33:50 
Архивное /ru.perl/22793a655558.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional