みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

階段アルゴリズムの応用

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

階段アルゴリズムの応用

投稿記事 by みけCAT » 13年前

以前日記で「階段アルゴリズム」の正式な名前を尋ねた時、
みんなから「それはフィボナッチ数列だ」と言われてしまいました。
しかし、階段アルゴリズムはフィボナッチ数列だけではありません。
階段の例であっても、一度に3段、4段、それ以上登れるという問題も考えられます。

また、このような応用例があります。
「ここのチャットのサイコロ(1~最大256の目が出るさいころが1~100個ある)で、
出た目の合計が特定の数になる目の出方は何通りか」
これを求めるプログラムを書くと、こうなります。

CODE:

package main;

import java.io.*;
import java.math.BigInteger;

public class PutternNumberGetter {
	
	public static void MakePutternNumberTable(int me_max) {
		BigInteger[][] list;
		list=new BigInteger[100*me_max][100];
		int i,j,k;
		//リストの初期化
		for(i=0;i100)return BigInteger.ZERO;
		if(targetkaisuu*me_max)return BigInteger.ZERO;
		return list[target-1][kaisuu-1];
	}
	
	public BigInteger GetAllPuttern(int kaisuu) {
		BigInteger me=BigInteger.valueOf((long)me_max);
		return me.pow(kaisuu);
	}
	*/
}
これは階段アルゴリズムの応用で、
階段の各段に「これまでの場合の数」だけでなく「何回でこの段に来たか」という情報も加えています。
一度に何段まで登れるかというのは、いくつの目まで出るかということになります。
このプログラムで調べると、list[目の数の和-1][振るサイコロの数-1]に、
1~me_maxの目が出るサイコロを(振るサイコロの数)個振ったときに
目の数の和が(目の数の和)になる場合の数が格納されます。

警告
このプログラムは、特にme_maxが大きい時、非常に重いです。
また、巨大なファイルが出力されます。
me_max=256のとき、約172MBのファイルが出力されました。


さて、改めて、このようなアルゴリズムは正式にはなんと呼ばれるのでしょうか?
またコメントで教えていただければありがたいです。
よろしくお願いします。
最後に編集したユーザー みけCAT on 2011年9月25日(日) 18:46 [ 編集 1 回目 ]
理由: 誤字修正

アバター
GRAM
記事: 164
登録日時: 14年前

RE: 階段アルゴリズムの応用

投稿記事 by GRAM » 13年前

数列の名前自体は3段ならトリボナッチ数列、4段ならテトラナッチ数列となるのであとは想像できますよね。
一般の場合にどういうのかは知りません。
漸化式自体は
無題.png
無題.png (4.76 KiB) 閲覧数: 497 回
・・・と簡単に書けます

追記:あ、ちょっと気になったのでいろいろ調べてみたら k-フィボナッチ数列というらしいですね。みけCATさんがどういう回答をお望みかはよくわかりませんが。

ちなみにアルゴリズムの名前と数列の名前は別ですよ。アルゴリズムは数列の求め方であって数列じゃないですし。
こないだのアルゴリズム自体は動的計画法という名前です。(漸化式的に次の値を出していくので)
フィボナッチ数列というのは結果として出力される数列の名前です。

あとさいころの場合はフィボナッチ数の一般化ではないと思います。階段の場合は特に回数制限もないですので。(それはあくまで目的とする段数によってきまるだけ)
まぁ自分は数学の専門ではないので詳しくは知りませんが。
最後に編集したユーザー GRAM on 2011年9月25日(日) 22:54 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 階段アルゴリズムの応用

投稿記事 by みけCAT » 13年前

だからあれほど
「フィボナッチ数列ではなく」
何なのかと言ったのに!
最後に編集したユーザー みけCAT on 2011年9月25日(日) 22:11 [ 編集 1 回目 ]
理由: ちょっと整形

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

RE: 階段アルゴリズムの応用

投稿記事 by みけCAT » 13年前

チャットでの疑問に答えておきます。
GRAM さんが書きました:(22:44:26) GRAM: 三毛猫さんは自分の回答のどこに不満なんだろう?
(22:44:35) GRAM: って思ったらもういないし
(22:45:05) GRAM: アルゴリズム名は動的計画法、数列名はなんたらボッチ数列。これで終わりなわけだが・・・
(22:45:31) GRAM: いまいちこだわっているところが分からない・・・
↓この部分です。
GRAM さんが書きました:あとさいころの場合はフィボナッチ数の一般化ではないと思います。階段の場合は特に回数制限もないですので。(それはあくまで目的とする段数によってきまるだけ)
まぁ自分は数学の専門ではないので詳しくは知りませんが。
そっちこそフィボナッチ数列にこだわらないで欲しいです。