ARC138 D - Differ by K bits の解法の正当性を示す
なんの記事?
ビットグレイコードの、ハミング距離 のバージョンは存在しますか?存在するならばそのひとつを構築してください、という問題がARC138 Dにて出題されました。
のときはグレイコードそのものなので、必ず構築できます。以下では、 のときを考えることにします。所望の順列が存在するための自明な必要条件として、次の条件が考えられます。
- が奇数であり、かつ
逆にこの条件を満たすならばいつでも構築可能なのですが、公式解説ではそれを示す過程で、
bit の XOR の基底であって,popcount が
になる値のみからなるものを取ることができます
という事実を使っています。これは(たぶん)非自明だと思うので証明を考えてみました、というのが本記事の内容です。
示したいこと
以下では単に「行列」と言ったら、体 上の行列を考えるものとします。示すべきことは、「正整数 と、 なる奇数 とを任意にとったとき、各行に がちょうど 個あるような 行列 が存在して、 に対して行基本変形を施すことにより単位行列にできる」ということです。行基本変形は可逆なので、変形していく方向を逆にした、以下の命題が証明できればよいです。
証明
行基本変形の手順を以下のように与えます。
- 単位行列からスタートする。 ならば既に目標の行列になっている。
- 行目を 行目と 行目に足す。
- 行目と 行目を 行目に足す。
- ここで、右下の の領域に注目すると、 の部分問題が現れている( の条件は保たれる)。よって、再帰的に目標の行列を構成できる。
言葉だとわかりにくいので、 のときを例にとって、変形されていく様子を図解します。
最後は、部分問題が となって変形が終了しました。図で灰色になっている部分は、その時点で既に確定した部分です。既に確定したはずの部分が、後の変形で壊れたりすることがあるのではないかと思うかもしれませんが、 が奇数であることなどより、そのようなことは起こりえません(例を追ってみるとわかると思います)。だから安心して部分問題に帰着できるわけです。
おわりに
というわけで、証明できました。証明さえできれば、今回は が小さいので、基底の構成は愚直に で十分です。今回の証明での構成方法であれば、(基底の構成パートは) でできそうです。
もっと簡単な証明があったり、もっと綺麗な基底があったりしたら教えてください。