поиск максимума
Jan. 16th, 2007 01:43 pm
# perl -MBenchmark=timethese -de0
DB<1> @a = map { int rand (1024) } 1..1024
DB<2> sub A () { return (sort { $a <=> $b } @a)[-1]; }
DB<3> sub B () { my $max = $a[0]; \
foreach (@a[1..$#a]) { $max = $max > $_ ? $max : $_; } \
return $max; }
DB<4> timethese (10_000,{ 'A' => \&A,'B' => \&B })
Benchmark: timing 10000 iterations of A, B...
A: 17 wallclock secs (16.34 usr + 0.00 sys = 16.34 CPU) @ 611.85/s (n=10000)
B: 5 wallclock secs ( 3.81 usr + 0.00 sys = 3.81 CPU) @ 2623.29/s (n=10000)
такие дела. но для одноразового поиска пойдет.
no subject
Date: 2007-01-16 12:28 pm (UTC)no subject
Date: 2007-01-16 01:41 pm (UTC)no subject
Date: 2007-01-16 03:25 pm (UTC)А перебирает весь массив, сортируя, сравнивая, притом возможно не один раз (что за алг. сортировка в перле я точно не знаю)
Б проходиться и притом порой не всегда до конца :) тут как повезет :)
no subject
Date: 2007-01-16 04:43 pm (UTC)То, что А всего в три раза медленнее - это радует: сортировка реализована хорошо (по крайней мере для равномерно распределённых данных).
Б же проходит всегда до конца, но только один раз, поэтому работать будет всегда одно и то же время.
no subject
Date: 2007-01-17 05:38 am (UTC)