Pythonの初学者です。(Python3.7を使っています)
全探索すれば答えが出せる問題ですが、すぐに計算時間が発散してしまいます。これを避ける方法について教えてください。
最初にM(整数)というお金を持っているとします。P(整数値)%という金利が与えられますが、Pをばらばらにして複利にして使うことができます。
ただし、金利は一度計算した時点で、小数点以下は切り捨てられます。
例として、M=1000, P=3%のとき、以下の4通りのうち、最大値を求めたいです。
① int(int(int(M*(100+P)/100)・(100+P)/100))・(100+P)/100))
② int(int(M*(100+P)/100))・(100+2P)/100))
③ int(int(M*(100+2P)/100))・(100+P)/100))
④ int(M*(100+3P)/100))
可能なすべての組み合わせを求めて、それらの最大値を計算すればよいのですが、P=20くらいで計算時間が1秒を超えてあとは発散してしまいます。できれば、P=100%まで計算できるようにしたいです。
P=20の場合の全探索の一部を書き出してみると、最大値を与える組み合わせはかなり多く規則性は見えませんが、少ない数(1~10)の組み合わせで最大値を実現している組み合わせが見られます。それで、一つの可能性として、Pを10個の単位に分割してして、10個単位で最大値を与える組み合わせをつないでいくというアルゴリズムでトライしましたが、全探索の結果と比較するとうまくいきません。(10個がよいのか11個がよいのか、いろいろトライしましたが)
どのようなアルゴリズムで考えればよいか教えていただければ幸いです。
回答1件
あなたの回答
tips
プレビュー