FC2ブログ

# 第二種スターリング数 Stirling Number Of The Second Kind
# 引数 n個 k個 ($n, $k)
# 戻り値 第二種スターリング数 ($StirlingNumber)
sub STIRLINGNUMBERSECOND{
my ($n, $k) = @_;
my $StirlingNumber = 0;
my $PrevStirlingNumber = 0;
my @Stirling = (1, 0);
my $N = int($n);
my $K = int($k);
my $Diff = $N - $K + 2;
my $Start = 1;
my $End = $K;
my $Temp = 0;

# 個数の確認
if(($N < 0) || ($K < 0) || ($N < $K)){
return 0;
}

if(($N == $K) || ($K == 1)){
return 1;
}elsif(($N == 0) || ($K == 0)){
return 0;
}

# 計算
for(my $i = 1; $i <= $N; $i++){
# 開始位置
$Start = ($i < $Diff ? 1 : ($Start + 1));
# 終了位置
$End = ($i <= $K ? $i : $K);
# 一つ前 2度値を使用するので
$PrevStirlingNumber = 0;

for(my $j = $Start; $j <= $End; $j++){
$Temp = $Stirling[$j - 1] + ($j * $Stirling[$j]);

# 次回使用する値
$Stirling[$j - 1] = $PrevStirlingNumber;
$PrevStirlingNumber = $Temp;
}

# 次回使用する値
$Stirling[$End] = $Temp;
# $End超 は 0
$Stirling[$End + 1] = 0;
}

# 第二種スターリング数 Stirling Number Of The Second Kind
$StirlingNumber = $Stirling[$K];

return $StirlingNumber;
}


二項係数から
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/StirlingNumberOfTheSecondKind1.txt

参考URL
Stirling numbers of the second kind - Wikipedia, the free encyclopedia
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS