Thread Suche Algorithmus
(5 answers)
Opened by mikdoe at 2007-08-13 11:18 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. |