コンテキスト:rubyの.minと.maxメソッドはどのように動作しますか?配列内の最小値または最大値を見つけるためにこれらのメソッドを使用すると時間の複雑さはどのくらいですか?
株価の配列が与えられたときにmax_stock_profitを決定するアルゴリズムの問題を調べていました。私は前記方法の時間複雑さを決定しようとしており、each
方法内の配列に.min
が使用されていました。これは私にこのポストで題された質問をするようになった。
一般的に言えば、単に例えば長1,000,000のアレイ上.min
又は.max
方法を見たとき、(n)は、minまたはmax値を決定するために線形時間Oを必要とするアレイ上の.min
又は.max
を実行していないであろう、 Nはアレイの長さである?..
もしそうであれば、以下に示すコード例に基づいて、each
メソッド内.min
又は.max
方法を実行することによって、時間複雑度はOではない(N^2 )最小値を決定するためにeach
メソッド内で別の繰り返しを実行する必要があるためです。私はコードスニペットがO(n)時に実行されるべきだと思っていますが、.min
と.max
がどのように動作するかについての私の不足は大きな混乱の原因となっています。
.min
は2つの値しか含まない配列で呼び出されるので、コード行が一定時間O(1)で動作するとはいいですか?何が起こっているのかについての私の誤解を解消する助けがあれば歓迎されます。ありがとう。
例コードスニペット:each
で
stock_prices = [5, 7, 2 ,4, 9, 1, 8]
min_price = stock_prices[0]
max_profit = 0
stock_prices.each do |current_price|
min_price = [min_price, current_price].min
potential_profit = current_price - min_price
max_profit = [max_profit, potential_profit].max
end
「etc ...」で何が行われていますか?これは、なぜこれを書いた人が 'min_price = stock_prices.min'というだけではないのかと関係しているかもしれません。例えば、それは逐次プロセスであり、論理はそれまでに見られた最低株価を前提としています。 – pjs
はいそれは逐次処理であり、最初の最小価格と現在の価格を比較するとき、最も低い株価に基づいています。しかし、私はこのコードスニペットの時間の複雑さ、特に.eachメソッド内で.minと.maxを実装するときに、何が混乱しているのか混乱しています。私は.minを使って、それぞれの中で別の繰り返しが必要だと思ったので、時間の複雑さはO(n)よりも長くかかると信じられましたか? –
私はここのコードはO(n)であると信じています。つまり、株価の長さに基づいて線形です。 – stujo