K線形関数からなるアレイ内のVより小さい最大値を検索する
-
28-09-2020 - |
質問
質問の説明の明確さの欠如のためにすみません。
length $ n $ で構成されたアレイは、 $ k $ 線形サブアレイで構成されています。 $ [l、r] $ の連続したサブアレイとして線形サブアレイを定義します。ここで、 $ a [i] - A [I-1]= C $ 、すべての $ l の定数。 (注: $ c $ は異なるサブアレイで異なる場合があります。配列の要素は整数です。)線形サブアレイは互いに素ではないことに注意してください(隣接する線形サブアレイの対任意のペア間に1つの要素交差点があります)。例えば、[1,3,5,4,3,2]は2つの線状サブアレイを有する:[1,3,5]および[5,4,3,2]。 [1,3,5,1,2,3]は、[1,3,5]、[5,1]、[1,2,3]。
Queried Value $ v $ よりも小さい最大値の複数のクエリを見つけたい、 $ o(k)$ および $ o(n)$ $ O(k ^ 2)$ と $ o(n)$ 前処理。 (アレイが既に K 線形サブアレイに関して既に記憶されていると仮定されていると仮定されていると仮定されている。あなたは、前述のように、すべての線形サブアレイの開始点と終了点を持つ配列を与えられます。そのため、1つは線形サブアレイを導出する必要はありません。それ以外の場所では、証明(正式またはそうでない)それができないことが理解されるでしょう。
もちろん、バランスのとれたバイナリ検索ツリー(BBST)または単にソートを実現するが、 $ o(nlogn)$ x 前処理が必要です。 。各サブアレイ内で最大の有効な値をチェックすると、 $ o(k)$ o(k)$ が再び多すぎます。これらの両方を組み合わせることは、おそらく?ランダム化されたアルゴリズムは、それらが常に正しい答えを達成し、平均的な場合に十分に速く仕事をする限り大丈夫ですが、決定論的アルゴリズムが好ましいです。
あらゆる応答をありがとう。私は質問に何か研究があったのか疑問に思っていました。トピックを曖昧にしすぎるようには思われませんが、残念ながら私の検索は十分に有能ではありませんでした。
編集:便利なような方法。
私が質問した後の私の考え線はここにありました。私はこれがどういうわけかを助けるでしょうか。モジュロのアイデアも使用しています。
V=0
を初期化し、各線形サブアレイをL,R
として保存できます。 L
はサブアレイの最小値で、R
が最大値です。 V
のクエリを指定した場合、L>V
とR<V
が(複数の寸法を使用することによって)要素を省略します。補足データ構造は、L - V mod c[i]
のようなものです。そのため、本質的にこのデータ構造を追加する範囲を実行できるが、任意の要素の値が<0
または>=c[i]
になる場合はリセットする必要があります(例:要素が-1に等しくなる場合]= 5 4にリセットされます。同じC [i]で6に等しくなる要素が1にリセットされます。また、範囲の最小クエリを実行します。
そのようなデータ構造をすることができれば、問題を解決する。トラブルはモジュロです。範囲の追加と範囲最小クエリは、セグメントツリーと遅延伝播で簡単に行うことができます。特定の要素の崩壊だけでなく、
解決
$ querly値 $ v $ より小さい最大値を見つけることはできません。 o $ o(n)$ 時刻
の前処理を伴うo(k)$ 時間。これは次の極端な場合に簡単に見ることができます。 $ A $ の任意の配列の $ n $ integers、次の $ k= n-1 $ 線形サブアレイ
- サブアレイ $ a [0]、a [1] $ $ c= a [1] -a [0] $ 。
- サブアレイ $ a [1]、a [2] $ $ c= a [2] -A [1] $ 。
- $ \ cdots $
- サブアレイ $ a [n-2]、 $ c= aを持つ[N-1] $ n-1] -A [N-2] $ 。
$ o(n)$ 時刻前処理と $ O(k)= o(n)$ 時刻処理、 $ a $ である $ n $ は十分に大きいです。 (実際、 $ A $ のほとんどの数のほとんどは、照会された値 $ q $ 、アルゴリズムは、 $ Q + 1 $ が $ a $ に表示されることを認識できません。
(上記の説明は、例えば、敵対者の正式な方法および明確な計算モデルを使用して、より厳密にすることができます。)
$ o(n \ log n)$ 前処理と $ O(k)$ 。または $ o(n)$ を備えたアルゴリズムがあるかどうか、 $ O(k)$ 与えられた $ k= o(n)$ 。とにかく別の質問のように聞こえます。