|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Renat Araslanow 2:5011/119 15 Jan 2001 00:36:16 To : All Subject : regexp -------------------------------------------------------------------------------- почему 1 while s/(\d)(\d\d\d)(?!\d)/$1 $2/; медленне в ~20 раз чем 1 while s/(\d+)(\d{3,})/$1 $2/; ? я так понял это из-за свойства "жадности" +, но тогда как проходит сравнение? вот програмка и рез-ты% (в файл 50 000 байт - одна строка из 1) #!perl use Benchmark; open (FH,"ok")||die "can`t"; $_=<FH>; $t0 = new Benchmark; 1 while s/(\d)(\d\d\d)(?!\d)/$1 $2/; #1 while s/(\d+)(\d{3,})/$1 $2/; $t1 = new Benchmark; $td = timediff($t1, $t0); print "the code took:",timestr($td),"\n"; >perl 3.pl the code took:26 wallclock secs (24.67 usr + 0.03 sys = 24.70 CPU) >perl 3.pl the code took:445 wallclock secs (418.92 usr + 0.41 sys = 419.33 CPU) perl от активстейта 5.6.0.620 [TEAM Чайник с программным управлениемЪ] [Преждевременная оптимизация -- корень всех зол Д. Кнут] --- спасибо фиpме AMD за Celeron от фирмы intel :-) * Origin: BBS in DEN! DOWN: 644-888 23-07 (2:5011/119) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/22793a61f32c.html, оценка из 5, голосов 10
|