Thread Performance bei Suche in Hashkeys (14 answers)
Opened by bianca at 2011-02-26 14:30

pq
 2011-02-27 12:43
#146092 #146092
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das ist immer noch nicht am effizientesten, da du für jeden monat first auf alle keys anwenden musst. first bleibt zwar beim ersten match stehen, aber es werden trotzdem dieselben keys mehrmals zu einem match herangezogen.

wenn man es noch effizienter braucht und die datenstruktur, so merkwürdig sie ist, als gegeben hinnehmen muss, sollte man nur einmal über die keys iterieren und als match nur die noch übrigen monate heranziehen.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my %found;
my %notfound;
@notfound{1..12} = ();
my $re = join "|", keys %notfound;
for my $key (keys %test) {
    if ($key =~ m/\.0?($re)\./) {
        my $month = $1 + 0;
        $found{$month} ||= 1;
        delete $notfound{$month};
        $re = join "|", keys %notfound;
        # wenn alle gefunden, braucht man gar nicht mehr suchen
        last unless keys %notfound;
    }
}
say for keys %found;


das ist sowohl im worst case, wenn in der datenstruktur nicht alle monate vertreten sind, als auch im best case, wenn alle monate vertreten sind, schneller als die 12-malige anwendung von first();
die verteilung der keys spielt eventuell auch noch eine rolle.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Performance bei Suche in Hashkeys