特定のアルゴリズムが特定の時間を取る必要があること、または特定のデータ構造が特定の量のスペースを必要とすることを示す方法は確かにあります。一般的な方法の1つは、情報理論を使用することです。
ソートされていない配列は、ソートされた配列の順列です。があるn !可能な順列。情報理論的な意味でのソートの仕事は、それがどの順列であるかを正確に発見することです。
の間で番号を送信するには 1 そして メートル 送信が必要 ログ2メートル情報のビット。の順列を送信するにはん したがって、要素には ログ2n !情報のビット。スターリングの近似により、これはんログ2n + O (低次) ビット。
バイナリ比較演算は、1ビットの情報を検出します。したがって、バイナリ比較演算のみを使用するソートアルゴリズムは、少なくともんログ2n + o (nログn )比較。比較に一定の時間がかかると仮定すると、ソートには少なくとも時間がかかることを意味しますΩ (nログn ) 時間。
基数ソートは、クエリごとに複数のビットの情報を発見することで、これに勝ることができます。
同様の議論は、二分探索が最適であることを示しています。あなたはの間の数を見つけようとしています1 そして ん、つまり発見 ログ2ん情報のビット。クエリ操作で1ビットの情報が返される場合は、少なくともログ2ん 要素を検索するクエリ。
スペースの使用についても同様です。順列をメモリに保存する必要があるとします。同じ議論により、これには少なくともんログ2n + o (n ログn )ストレージのビット。あなたが必要だからログ2ん 整数を格納するビット 1 そして ん、あなたは本質的に格納することよりも良いことはできません ん 整数。