2012-04-20 11 views
2
  • 入力:実数の配列a [1..n]。
  • 出力:2つの異なる配列要素間の値の最小絶対値。

私は同じものに対してブルートフォースアルゴリズムが必要です。ブルートフォースを使用する2つの異なる配列要素間の値の最小絶対値

いずれかのアイデアはありますか?

+1

、そしてそれは最低より低いかどう:あなたは、最初のリストをソートすることによりO(n log n)時間を達成することができます'を最低に設定します。提案のためにドゥガルに感謝します。 – birryree

+0

@birryreeまた、ループしている最中の最小値を把握するだけです。また、対称であるため、 'i>と' j> i'の上の内側ループをループするだけでよい。 – Dougal

+0

@Dougal - はい、それは意味があります(さらに、関係する2つの要素のインデックスを追跡すること)。 – birryree

答えて

3

は:

min = infinity 

for i=1 to n-1 
    for j = i+1 to n 
     if abs(a[i]-a[j]) < min 
      min = abs(a[i]-a[j]) 

これはO(n^2)時間がかかります。違いを見つけること、(その要素のインデックスをスキップ)再び、配列を、配列、ループ内の各要素について

sort(a) 
min = infinity 

for i = 1 to n-1 
    if abs(a[i+1]-a[i]) < min 
     min = abs(a[i+1]-a[i]) 
4

要素がソートされている場合、あなただけ順次アイテムの各ペアを比較する必要があるかもしれません: [1、3、6、7、28] - > [7-6ブルートに最小距離

を与えますそれを強制する、私はあなたがお互いの値(n * n-1)から各値を引いて、どのペアが最小かを把握できると思います。あなたはそれ自身から同じ要素を引きずらないようにする必要がありますが、同じ値を持つ要素はペアとして許容されるべきです。あなたはそれの要素のすべてのペアの上に、単にループ力をブルートしたい場合

+0

'n *(n-1)/ 2'だけ必要ですね。 – moooeeeep

関連する問題