動的計画法における重複組み合わせの式変形について
蟻本に載っている重複組み合わせの式変形がピンとこなかったので、頭の整理をするためにメモを。
問題
種類の品物が存在し、番目の品物が個あるとき、これらの中から個選ぶ組み合わせの総数を求めよ、というものになります。
解法
まずはの解法からです。
番目までの品物の中から個選ぶ組み合わせ
のようにすると、
番目の品物を個選んだときに選んだ品物が合計になるようにするには、番目までの品物で個選んでいればよいので、通りの組み合わせが考えられます。
そして、はからまでが考えられるので、最終的な遷移は
となります。
これを、うまく式変形することで、計算量を落とします。この式変形を何も見ずに行った人はかなりの猛者ではないかなと思います…
方針としては、今式に表れているシグマの部分を、どこかほかの配列を参照できるようにすることで、kのループを削除する、というものになります。
前提として、配列の添え字が負になっているときは、その中身は0であるとします。
まず、先ほどの式のうち、の部分を、にずらします。
の範囲はそのままにするので、ずらすことで、余分なものと足りないものが一つずつ現れます。なので、その部分を調整します。
足りなくなったものは、ずらす前には存在した、のときのになります。これをシグマの外で足してあげます。
逆に余分になったものは、ずらした後の最後の部分、になります。これをシグマの外で引いてあげます。
もうすこし整理すると、は、
がのとき
となり、になります。
このとき、も負であるので、
もです。がのとき
となります。
よって、どちらの場合でもでカバーできていることになります。これで少しだけ式をスッキリさせることができました。
ここまでの操作を整理して式変形をまとめると、
となります。ところで、の範囲について調べてみると、はでいいことがわかります。
なぜなら、
がのとき
はなのでとなります。がのとき
なので、となることはありません。
ということで、さらに式変形をすると、
となります。
最後に、
最初の項はそのものなので置き換えることができ、
となります。
これで、まで計算量を落とすことができました。