制約条件を探せ


ProjectEulerを解いているとブルートフォースに頼らなくてはいけない局面が結構?ある。
ただ、同じブルートフォースをするにせよ、候補は少ないに越したことはない。
特にPEはひねらないでブルートフォースをはじめたが最後、終わらない(ことが多い)。
数値演算コプロセッサを積んでなかった386ならいざ知らず、CoreDUO(シングルコアしか使ってないけど)でもそれは変わらない。
なので、試しにブルートフォースしてみて、芳しくないようであれば、何らかの手を考えなくてはいけない。
困ったことに大抵の問題は指数関数的に時間がかかる。
P119が典型的な問題。最初の10個はすぐに出るけど、次が出るのに5分?かかり、求める答えは30個目という感じ。
そこで、枝刈りが必要になる。
制約条件を見つけてその範囲内でブルートフォースすれば答えはほどなく出る。
アルゴリズムの改良こそが文字通りに桁違いのパフォーマンスを叩き出す瞬間である。
PEに関してはアルゴリズム(というよりはアプローチ)の見直しの方が遥かに効率的ではあるな。

ちなみにP119の答えは15桁あった。これじゃ(ひねりなしのブルートフォースでは)いつまで経っても終わらんわ。