Index / Reload / Edit
おおーう、わざわざすみません。感謝感激雨霰でございますよ。
見やすいコードhttp://hosho.ees.hokudai.ac.jp/~kubo/log/2005/img08/combo.pl.txtにおきました.たびたびおさわがせしてすみません.
いんでんとが全部なくなってしまった……みぐるしくてすみません.嗚呼
Perl だとこういう関数で OK だと思います.use strict;sub combo { my ($k, $array_orig) = @_; my @array = @$array_orig; # copy my @set; if ($k == 1) { @set = map { [$_] } @array; } else { for (0 .. (scalar(@array) - $k)) { my $head = shift @array; my @copy = @array; for my $s (@{&combo($k - 1, \@copy)}) {; push @set, [$head, @$s]; } } } return \@set;}実行例はprint join("\n", map { join(", ", @$_) } @{&combo(3, [1 .. 5])}), "\n";とかfor my $s (@{&combo(4, [1 .. 8])}) { print join(", ", @$s), "\n";}考えかたは &combo(3, [1 .. 4]) の場合1-2-3 -4 3-42-3-4という「木」を生成する,というものです.
なるほど、Math::Combinatoricsなんてモジュールがあるんですね。Rだとgtoolsパッケージですか。でもMath::Combinatoricsって標準添付モジュールではないですよね。RはともかくPerlでは徹底して非標準モジュールは使わないことにしている(Rを呼び出すのはもってのほか)ので困りましたねぇ。モジュールの中身でも読んでみますかね。
Perl で組み合わせ列挙やるのはこんなかんぢでしょうかuse Math::Combinatorics;print join("\n", map { join(" ", @$_) } combine(3, (1 .. 5)));
R だとすごく簡単です.library(gtools)combinations(5, 3) # 5 個の中から 3 個とる組み合わせすべて以上
おおーう、わざわざすみません。感謝感激雨霰でございますよ。
見やすいコード
http://hosho.ees.hokudai.ac.jp/~kubo/log/2005/img08/combo.pl.txt
におきました.たびたびおさわがせしてすみません.
いんでんとが全部なくなってしまった……
みぐるしくてすみません.嗚呼
Perl だとこういう関数で OK だと思います.
use strict;
sub combo
{
my ($k, $array_orig) = @_;
my @array = @$array_orig; # copy
my @set;
if ($k == 1) {
@set = map { [$_] } @array;
}
else {
for (0 .. (scalar(@array) - $k)) {
my $head = shift @array;
my @copy = @array;
for my $s (@{&combo($k - 1, \@copy)}) {;
push @set, [$head, @$s];
}
}
}
return \@set;
}
実行例は
print join("\n", map { join(", ", @$_) } @{&combo(3, [1 .. 5])}), "\n";
とか
for my $s (@{&combo(4, [1 .. 8])}) {
print join(", ", @$s), "\n";
}
考えかたは &combo(3, [1 .. 4]) の場合
1-2-3
-4
3-4
2-3-4
という「木」を生成する,というものです.
なるほど、Math::Combinatoricsなんてモジュールがあるんですね。Rだとgtoolsパッケージですか。
でもMath::Combinatoricsって標準添付モジュールではないですよね。RはともかくPerlでは徹底して非標準モジュールは使わないことにしている(Rを呼び出すのはもってのほか)ので困りましたねぇ。モジュールの中身でも読んでみますかね。
Perl で組み合わせ列挙やるのはこんなかんぢでしょうか
use Math::Combinatorics;
print join("\n", map { join(" ", @$_) } combine(3, (1 .. 5)));
R だとすごく簡単です.
library(gtools)
combinations(5, 3) # 5 個の中から 3 個とる組み合わせすべて
以上