Thread größte Zahl rausbringen? (5 answers)
Opened by Andreas at 2004-02-04 17:54

ptk
 2004-02-04 19:14
#79816 #79816
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die Verwendung von sort ist idiomatisch, aber nicht schnell. Ich habe mal drei Funktionen gebenchmarkt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl
use Benchmark qw(cmpthese);
use List::Util qw(max);

@a = qw(35 73 745 23 85);
@a = (@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,@a,);
cmpthese(-1, {
"max" => sub { my $max = max @a },
"linear" => sub {
my $max = $a[0];
for (@a) {
$max = $_ if $_ > $max;
}
},
"sort" => sub {
my $max = (sort{$a <=> $b} @a)[-1];
}
}
);

Das Ergebnis hier ist:
Code: (dl )
1
2
3
4
           Rate linear   sort    max
linear 49778/s -- -23% -92%
sort 64869/s 30% -- -90%
max 649176/s 1204% 901% --

Wobei der Unterschied zwischen sort und max nicht mehr so gross ist, wenn man @a nur einfach verwendet. Interessant ist auch, dass linear langsamer als sort ist, obwohl hier ein O(1)-Algorithmus gegen einen O(n logn)-Algorithmus antritt. Anscheind ist es sehr entscheidend, wieviel Code ausserhalb der Opcode-Loop ausgefuehrt wird...

View full thread größte Zahl rausbringen?