無限長の配列はソート可能か?
皆さんご存知の通り、有限サイズの任意の配列は、有限回の比較と交換でソートすることができます。 (挿入ソートやクイックソートなどの具体的なアルゴリズムが存在することが、その証明になっています)
では、配列が無限の長さを持っていた場合はどうなるでしょうか?
Twitter で考えたことをまとめます。
ソート可能性
ソートとは、配列の各要素が演算子 比較可能なときに、 各要素が「下から何番目か」という番号を振ることであると考えられます。
そこで、有限配列のソート可能性を次のように定義します。
定義: 有限集合のソート可能性
有限な順序集合 について、 任意の全単射 に対して 次の2つを満たす全単射が存在するとき、 はソート可能であるという。
- は有限個の互換の合成で表される。
上の定義で、 はソート前の配列を表し (は番目の要素)、 がソートによって「n番目の要素が 番目に移動する」ことを表しています。
ここで、1つ目の条件は、 と が順序同型であるということを意味します。 要素数が等しい任意の有限集合は順序同型ですから、これは常に成り立ちます。
また、2つ目の条件についても、任意の有限置換は互換の積で表されますから、こちらも常に成り立ちます。
これらのことから、任意の有限集合はソート可能であることが確認できました。
(この定義のみからでは、有限回の比較回数で を構成可能であるかどうかについては触れていないのでご注意ください。このあたりの精緻な議論は私の手に余ります。。。)
それでは、ソート可能性の概念を無限長の配列に拡張しましょう。
定義: 可算無限集合のソート可能性
可算な順序集合 について、 任意の全単射 に対して 次の2つを満たす全単射が存在するとき、 はソート可能であるという。
- は可算個の互換の合成で表される。
はい、有限を可算無限にしただけですね。 しかし、一般に可算無限集合に対しては、ソート可能性は成り立ちません。
たとえば、可算無限個の要素からなる配列
を通常の意味の大小関係でソートする場合を考えましょう。
もし、 がソート可能であると仮定すると、 の最小・最大の要素 のソート後の順番がそれぞれ と求まります。
すると、 の要素数は 個となってしまいますが、 これは、 が無限集合であることと矛盾します。 よって、 はソート不可能であることがわかりました。
これは、 条件1の「可算無限集合 は自然数全体の集合 と順序同型である」 が一般には成立しないことを反映しています。
逆に言えば、 がソート可能であるためには、 が と順序同型であることが必要です。
このための必要条件として、
- は最小値を持つ
- は最大値を持たない
- の任意の2要素 について、 の部分集合 は有限集合である
などが挙げられますが、他にもいろいろと条件がありそうです。
この議論を進めていくと、整列順序など、数学の基礎的な概念の話になってくるようですが、こちらはまだまだ勉強不足です。