配列の最小差を見つけるアルゴリズム


8

長さの整数の配列が与えられたときに、配列内の2つの整数間の最小差を見つけるアルゴリズムが必要です。n

そのようなアルゴリズムの1つは、配列を並べ替えて、隣接する数値のペアをチェックすることです。これには時間がかかります。O(nlog⁡n)

アルゴリズムなど、より高速な方法はありますか?O(n)


は O (n log n )より高速ではありませんO(n)O(nlog⁡n)
— David Merinos 14年

回答:


7

これは、計算のモデルによって異なります。算術と比較(代数的決定木モデル)のみを許可する場合、要素の明確性には下限があり、すべての要素が明確かどうかを判断する問題があります。もちろん問題はさらに難しくなるため、同じ下限が適用されます。Ω(nlog⁡n)

(細かい説明があります。下限は、比較される多項式の次数が制限されている場合にのみ適用されます。実行しているのがさまざまな差比較している場合は、問題ありません。代数的決定ツリーモデルでは、次数に制限がある限り、入力のより一般的な多項式を比較することもできます。)xi−xj

他のモデルの方がパフォーマンスが向上する可能性があります。たとえば、一部のモデルでは、整数をソートできます。しかし、私はあなたがそのようなアルゴリズムで使用されるある種の策略を許可したくないと想像します。o(んログ⁡ん)


ありがとう。「さまざまな違いを比較する」とはどういう意味ですか?あるのでΘ (N 2)そのような対は、希望しないことテイク時間Ω (N 2)?バツ私−バツjΘ(ん2)Ω(ん2)
— boaten

必ずしも。比較ベースのアルゴリズムは、要素のペアを比較することのみが許可されています。ここでは、、さらにはx 1 + 5 x 8 − 17 x 3 < − 5などのより複雑なクエリを作成できるようにしています。タイプx i > x jの O (n log n )比較とO (n )を使用するソリューションがあることはわかっています。x1−x2>x3−x4x1+5x8−17x3<−5O(nlog⁡n)xi>xjO(n)タイプの比較は。線形クエリ(または、より一般的には、制限付き次数クエリ)の作成のみに制限されている場合、問題は、あなたはより上手にできるか、そして答えはノーです。xi−xj>xk−xℓ
— Yuval Filmus 14年

要素の明確性に対するこの限界の実際的な重要性を理解しているとは思えません。ハッシュテーブルで期待されるO(n)はありませんか?
— jkff 2014年

この計算モデルを使用してハッシュテーブルを実装することはできません。一般に、下限は証明するのが困難です。代数的決定木モデルは、自明でない下限が証明可能なモデルです。他のモデルで下限を証明する方法はわかりません。実際、このような下限は通常、ランダム関数でのみ知られています。このモデルを超えるトリックo (n log n )アルゴリズムがあるかもしれませんが、私には何も考えられません。ω(n)o(nlog⁡n)
— Yuval Filmus 14年

-1

配列内の整数の桁数に制限がある場合、基数ソートアルゴリズムで配列をソートできます。つまり、O(kN)であり、隣接する数値のペア(O(N))をチェックしますか?結果の複雑さはO((k + 1)N)、線形になります。


1
基数ソートの実行時間が実際に良好である条件に注意してください。
— ラファエル

@Raphaelさて、元の質問は線形アルゴリズムが存在するかどうかでしたので、私はそれについて考えました。あなたはkが小さいNに対してlog(N)よりも大きくなることを意味しますか?
— Pavel Davydov 2014年

kNΩ(nlog⁡n)

@Raphaelはい、ただし64ビット未満の整数の配列の場合(これは非常に一般的なケースです)、線形になります。回答を編集します。コメントしてくれてありがとう。
— Pavel Davydov 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.