以下にすばやく応答する(O(logn))ために、シーケンスをO(N)時間の配列に保存するプログラムを作成しようとしています。シーケンスの2つの項目の間の最小値
min(int i、int j):配置iとjの間のシーケンス内の最小値の位置を返します。
たとえば、シーケンスがA =(22,51,83,42,90,102,114,35)で、iがmin(3,6) を呼び出すと、42 < 83,90,102が返されます。
シーケンスの値がソートされていない場合や、バイナリツリーを実装しようと思ったO(logn)を取得したいので、すばやく時間を稼ぐことはできません。
問題は、私が必要とするようにmin()のためにすぐにアクセスするために、バイナリツリーにシーケンスの値をどのように置くべきかを分かりません。
これは、インターバルツリーを使用して解決する典型的な問題です。 O(n)時間にそれを構築し、次にO(log n)でクエリを実行することができます。 – Ardavel
Java配列は0から始まりますが、インデックス3が値0であれば、Javaの標準から外れています。その理由は、3から6までは '83、42、90、102 ' 83 'の場合、1ベースのロジックを使用しています。 2)Javaの範囲はより包括的で、排他的ですが、範囲3〜6が4つの値をカバーする場合は、上位包含ロジックを使用しています。 – Andreas
なぜソートされている場合は、どこに置くのですか?既存の配列をそのまま使用して、O(1)ルックアップにインデックスを使用してください。 –