Home統計 › (36) 順列
Sponsored Link

(36) 順列

perms を使うとベクトル要素の順列(Permutation)を生成できる。

octave:1> v = [3,5,2]
v =
   3   5   2

octave:2> perms(v)
ans =
   3   5   2
   5   3   2
   3   2   5
   5   2   3
   2   3   5
   2   5   3

nchoosek を使うとベクトル要素の中から任意個数の組み合わせ(Combination)を生成できる。

octave:3> v = [1:5]
v =
   1   2   3   4   5

octave:4> nchoosek(v,3)
ans =
   1   2   3
   1   2   4
   1   2   5
   1   3   4
   1   3   5
   1   4   5
   2   3   4
   2   3   5
   2   4   5
   3   4   5

ここで…
nPr を出したいのだが、perms では nPn は出せても nPr が出せない。

苦肉の策で以下のように permsnchoosek を組み合わせて nPr を生成してみた。
絶対にスマートな方法があるはずなのだがわからない…

ここでは { 1, 2, 3, 4, 5 } の中から 3個を選ぶ ときの組み合わせを生成してみる。

octave:5> v = [1:5];
octave:6> n = 3;
octave:7> c = nchoosek(v,n);
octave:8> p = [];
octave:9> for i=1: size(c,1)
>     p = [p; perms(c(i,:))];
> end
octave:10> disp(p);
   1   2   3
   2   1   3
   1   3   2
   2   3   1
   3   1   2
   3   2   1
   1   2   4
   2   1   4
   1   4   2
   2   4   1
   4   1   2
   4   2   1
   1   2   5
   2   1   5
   1   5   2
   2   5   1
   5   1   2
   5   2   1
   1   3   4
   3   1   4
   1   4   3
   3   4   1
   4   1   3
   4   3   1
   1   3   5
   3   1   5
   1   5   3
   3   5   1
   5   1   3
   5   3   1
   1   4   5
   4   1   5
   1   5   4
   4   5   1
   5   1   4
   5   4   1
   2   3   4
   3   2   4
   2   4   3
   3   4   2
   4   2   3
   4   3   2
   2   3   5
   3   2   5
   2   5   3
   3   5   2
   5   2   3
   5   3   2
   2   4   5
   4   2   5
   2   5   4
   4   5   2
   5   2   4
   5   4   2
   3   4   5
   4   3   5
   3   5   4
   4   5   3
   5   3   4
   5   4   3
octave:11> disp(size(p));
   60    3

5P3の組み合わせ数を計算で求めると以下の通り。

(5 x 4 x 3 x 2 x 1) / (2 x 1)
= 5 x 4 x 3
= 60

正しく60通りの組み合わせを生成できているようだ。

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*