アレイ内の最小要素の位置を見つけるための良い方法はありますか?

StackOverflow https://stackoverflow.com/questions/855693

  •  21-08-2019
  •  | 
  •  

質問

今、私が持っている

def min(array,starting,ending)
  minimum = starting
  for i in starting+1 ..ending
    if array[i]<array[minimum]
      minimum = i
    end    
  end

return minimum
end

Rubyでより良い「実装」はありますか?この1はまだCっぽい見えます。 おかげます。

役に立ちましたか?

解決

あなたは最小限の要素のインデックスを検索したい場合は、

、あなたはにEnumerable#enum_forを使用することができます アイテムインデックスのペアの配列を取得し、(また、元の配列の最小値になります)Enumerable#min有するものの最小値を見つける。

% irb
irb> require 'enumerator'
#=> true
irb> array = %w{ the quick brown fox jumped over the lazy dog }
#=> ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
irb> array.enum_for(:each_with_index).min
#=> ["brown", 2]

あなたは、特定の配列のインデックスにそれをバインドしたい場合:

irb> start = 3
#=> 3
irb> stop = 7
#=> 7
irb> array[start..stop].enum_for(:each_with_index).min
#=> ["fox", 0]
irb> array[start..stop].enum_for(:each_with_index).min.last + start
#=> 3

他のヒント

基本的にそれはあなたがもう少し簡潔に書くことができますが、あなたができる最善のです。

def minval(arr)
    arr.inject {|acc,x| (acc && acc < x ? acc : x)}
end

があり単純な方法であり、それはルビー1.9.2で私の作品ます:

a = [6, 9, 5, 3, 0, 6]
a.find_index a.min
これは、アレイ内の最小の要素を見つけるための標準的なアルゴリズムである

は、この関数が呼び出される前にアレイが既にソートさを有することによって改善することができます。

そうでなければ、私はこれを行うためのより効率的な方法を見つけることができません。具体的には、大きなO記法で線形時間は、私たちができる最善のです。

これは単に学術的な問題ではない場合は、

、なぜ単にRubyのネイティブsortメソッドを使用していませんか?これは、クイックソートアルゴリズムを使用して実装されています、と非常に高速であると考えられます。

a = [3, 4, 5, 1, 7, 5]
a.sort![0] # => 1
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top