|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/22793a655558.html, оценка из 5, голосов 10
|