Thread Suche Algorithmus (5 answers)
Opened by mikdoe at 2007-08-13 11:18

Ronnie
 2007-08-13 17:40
#98064 #98064
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @words       = qw/foo bar buz qiz/;
my $words_cnt   = @words;

my @wanted = grep {
    @$_ >= 2;
} map {
    my $i = $_;
    [ @words[grep { $i->[$_] > 0} 0..@$i-1] ];
} map { 
    [ split //, sprintf "%0" . $words_cnt . "b", $_ ]
}  1..(2**$words_cnt-1);

warn Dumper \@wanted;

Zugegeben es ist etwas kryptisch. Die Idee dahinter ist aber einfach. Für eine Liste mit n Elementen gibt es 2^n mögliche Varianten. Diese entsprechen den 1 im Binärwert jeder Zahl von 1..n (die 0 als leere Liste ausgelassen). Also muss man nur zwei Arrays vergleichen und die Elemente zurückliefern, bei denen eine 1 im Binärwert steht.

View full thread Suche Algorithmus