ゼッケンドルフの定理と全探索

はじめに

友人と会話してて得られた知見で、共有したいと思います。

ゼッケンドルフの定理

ゼッケンドルフの定理は

任意の正の整数が、連続するフィボナッチ数を含まないような形で、相異なる1つ以上のフィボナッチ数の和として一意に表現できる

というものです。
これを使うと、全探索がオーダーレベルで効率良く行えることがあります。

全探索

たとえば、一般的にこういう問題を考えます。

\(N\) 個のデータが順序ついて並んでいて、その部分集合であって、ある性質を満たすものを求める。

もしこの「ある性質」が、連続する2つのデータを取り出すと成り立たないようなものであれば、ゼッケンドルフの定理からオーダーが改善できます。
(成り立たないは直接的ですが、最小化問題などのときに、2連続は考えなくてもよい、みたいな状況もありえそうです。)

\(N\) 個の点を \(N\) ビットで表現するとすると、連続2点をえらばないので、
これはゼッケンドルフ表現と捉えることができます。
このような選び方が自然数と一対一対応するので、例えば \(N \leq 40\) だとすると、大体 \(F_{40} = 10^8\) 程度の部分集合しかないことがわかります。
なので、全探索が間に合う(かもしれない)ということですね。

最後に

結局考えてた問題ではこの性質は使わずに解きました(というか、こんな性質はなかったので使えなかった、悲しい)。