次の問題を検討してください。
してみましょう一定です。我々は、与えられた進アレイのとのが。ましょ。A d 1 × … × d k 0 1 N = ∏ k i = 1 d i
次のタイプのクエリ操作を実行するためにを前処理ことにより、データ構造を作成したいとします。
- aryボックスの座標を考えると、ボックスにはがありますか? D 1
- aryボックスの座標を指定して、ボックス内のの位置を返します(存在する場合)。D 1
操作は一定時間で実行する必要があります。時間の複雑さは、RAMマシンで測定されます。データ構造の前処理の時間とスペースは、私たちにとって重要ではありません。
問題は、上記の操作を可能にするデータ構造を格納するために必要なスペース(ビットの複雑さ)の量です。
これらのクエリに対して配列を再構築できるため、自明な下限はビットです(したがって、データ構造には少なくとも同じ量の情報が含まれている必要があります)。
自明な上限は、すべてのクエリに対する回答を格納することです。これには、ビットが必要です。ただし、これははるかに効率的に実行できると思われます。
たとえば、である特殊なケースを考えます。この場合、最初の問題を解決するために簡潔なRMQデータ構造を使用できます。データ構造の格納にはビットかかります。
このタスクの効率的なデータ構造は何ですか?
スペースの複雑さ(ビット数)は、これらの操作(または最初の操作のみ)をサポートするためにどれだけ低くできますか?
アップデート(1/15): 特殊なケースでは使用して、ビットは、実際によりよい(十分であるここで、数であるの)は、問題を先行問題に削減し、先行問題から完全に索引付け可能な辞書(FID)への削減を使用することによって。Grossi、Orlandi、Raman、およびRao(2009)による「より速く、より少ない無駄:完全に索引付け可能な辞書の冗長性を下げる」を参照してください。
更新(6/27): 問題をRMQに減らします。YuanとAtallahによる次元のRMQ を使用して、が固定されている場合に必要なスペース量の上限を取得し。