連続するXOR値の最大値と最小値を見つける


8

整数配列(最大サイズ50000)指定された、Iは最小値と最大見つけなければならない例えば一部について、と。X = PP + 1A Q P Q P QXX=apap+1aqpqpq

私はこのプロセスを試しました: for all。私はそれをで事前に計算し、次にいくつかの、の値を計算しては次のようになり:。したがって: I O N X P Q P Q X = QP - 1sumi=a0a1aiiO(n)Xpq(pq)X=sumqsump1

MinAns=min(p,q) s.t. pqsumqsump1MaxAns=max(p,q) s.t. pqsumqsump1

しかし、このプロセスはO(n2)です。どうすればもっと効率的にできますか?


1
「合計」リストのソートを検討しましたか?隣接する値は、ビットの多くをキャンセルして0に近くに終わる可能性が高いだろうように思える
クレイグGidney

回答:


7

場合は整数のビットサイズである、あなたはMaxで計算することができます時間。kO(nk)

基本的に、問題は、、ビットの整数与えられた、が最大になるような見つけることです。nkSii,jSiSj

各をバイナリ文字列として扱い(バイナリ表現を見て)、それらの文字列からトライを作成します。これには時間かかります。SiO(nk)

ここで、各、作成したトライでの補数を歩いて(基本的に各ステップで最良の分岐をとる)、が最大になるような見つけます。SjSjjSjSj

これをごとに実行すると、時間で答えがわかります。jO(nk)

整数が制限されているため、このmaxのアルゴリズムは基本的に線形であり、minのアルゴリズムも並べ替えによって得られます(並べ替えは線形時間で実行できるため)。

ちなみに、境界がない場合は、要素の明瞭度を最小バージョンに減らすことができます。


「基本的に、問題は、n、kビットの整数Siが与えられると、Si⊕Sjが最大になるようなi、jを見つけることです。」私はこの行を理解していません。Si⊕Si+1⊕...⊕Sjを最大にしたいですか?何か不足している場合は修正してください
palatok

1
@ Aryabhata、線形と考えるのは不公平です。結局のところ、(リストに重複がある可能性がある場合を除く)。それでも、それでも素晴らしい解決策です。O(nk)klog2n
KarolisJuodelė12年

1
@Aryabhata、その境界のために、アルゴリズムはとも言えます。しかし、それはあまり説明的ではありません。O(1)
KarolisJuodelė12年

1
質問は整数が有界であると言っていませ。これは、配列のサイズが最大50000であることを示しています。したがって、実際には、ではなく、。nk
JeffE 2013年

1
@ジェフ:ああ!そして、あなたが指摘したように(そして私はその解釈に同意します)、カロリスのコメントはすべて私にとって意味のあるものになります。ありがとう!
アリヤバタ2013年

5

ソートはも役立ちます。少なくとも、少なくとも。明らかに、最大値はによって到達されます。したがって、各に対して、バイナリ検索を実行します。これはソートと同じ時間なので、手順全体の複雑さは変わりません。maxx¬xx=sumi¬xO(nlogn)


最小値はどうですか?
palatok

¬xが見つからない場合はどうなりますか?
palatok

@palatok、最小値はすでに説明されています。見つからない場合は、その位置に最も近い2つの合計を確認してください。¬x
KarolisJuodelė2012

sumi,sumjは0または1でなければなりません。ハッシュテーブルで十分です。
Strin、

@Strin、私はあなたの意味がわかりません。はビット長です。ハッシュテーブルはどのように役立ちますか-厳密ではなく正確な値が必要です。sumik
KarolisJuodelė

4

これが、Strilancの提案がに対して機能する理由です。配列検討し、最小値がによって達成されると仮定します。ここで、です。いずれか(その場合)、又は、いくつかのために。仮定する、およびlet。場合、、場合、です。したがって、です。minsumap,aqp<qap=aqap=ap+1ap=x0yaq=x1zx,y,zq>p+1ap+1=xbwb=0apap+1<apaqb=1ap+1aq<apaqq=p+1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.