最近、私はこのプログラミング上の問題にぶつかり、複雑さを少なくすることはできませんでした(現在のコードはO(n^2)で実行されます)。2つの異なる配列のすべての要素のペアを素早く見つける方法
本質的に、正と負の整数の4つの異なるリスト(私はpython btwを使用しています)を持っています。これらのリストはそれぞれ1000個の整数を持ち、これらの整数-25000〜25000の範囲である。今、これらのリストのそれぞれから、a、b、c、dという整数を選択するとします。私はこれらのa、b、c、dがa + b = - (c + d)となるような素早い方法を知りたい。
現在、私の方法では、a、b、c、dのすべての可能な組み合わせを反復してから、セット内の要素(a + b) d)。もちろん、これはO(n^2)時間で実行されるため実用的ではありません。
誰かがもっと効率的な方法(できればO(n log n)以下)を考えることができるかどうか、私は思っていました。
紛らわしい場合はお詫び申し上げます。ご不明な点がございましたら、私に連絡してください。
編集:
この問題は大きな問題の一部です。より大きな問題は、それぞれがA、B、C、Dのように1000個以下の整数を持つ4つの数列を持つ場合、a + b + c + d = 0となるa、b、c、dを見つけることである。
a + b + c + d = 0は、a + b = - (c + d)を意味するので、私は問題を解決する最速の方法につながると考えました。誰かがもっと速い方法を考えることができるなら、それを私と共有してください。
ありがとうございます! :)
この条件に該当するすべての組み合わせをお探しですか? – Whud
はい、そうです。このような組み合わせが少なくとも1つあることが保証されています。 –
最悪の場合、C = -AとD = -Bの場合、Θ(n^2)の解を持つことになるので、アルゴリズムを出力するには少なくともn^2ステップが必要です。 – Bolo