上下文:ruby的.min和.max方法如何工作,以及使用這些方法在數組中查找最小或最大值時的時間複雜度是多少?
我在查看一個算法問題,以確定max_stock_profit當給定的股票價格數組。我試圖確定所述方法的時間複雜度,並遇到each
方法內的陣列上使用的.min
。這導致我問這個帖子中題爲問題。
一般來說,當簡單地查看.min
或.max
方法長度1,000,000例如在陣列上,也不會在運行陣列上.min
或.max
需要線性時間爲O(n),以確定一個最小或最大值,其中n是數組的長度?
如果是這樣,那麼根據下面顯示的示例代碼,通過在each
方法中運行.min
或.max
方法,時間複雜度不會是O(n^2 ),因爲它需要在each
方法中運行另一次迭代以確定最小值?我認爲代碼段應該在O(n)時間運行,但是我對.min
和.max
的工作方式缺乏瞭解,這是造成很大混淆的原因。
是因爲.min
在只包含2個值的數組上調用,所以假設該行代碼在恆定時間O(1)中運行是否可行?任何幫助,以清除我的誤解會發生什麼,將不勝感激。謝謝。
實施例的代碼片斷:
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
正在做什麼等''?這可能與爲什麼寫這個人的人不只是說'min_price = stock_prices.min'有關。例如,也許這是一個連續的過程,邏輯是以迄今爲止看到的最低股價爲前提。 – pjs
是的,這是一個連續的過程,並且在比較最初的最低價格和當前價格時基於最低的股票價格。但是我對這段代碼片段的時間複雜性感到困惑,特別是在.each方法中實現.min和.max時。我想通過使用.min,它需要在.each中進行另一次迭代,這導致我相信時間複雜度比O(n)花費的時間更長? –
我相信這裏的代碼是O(n),也就是說它是基於股票價格的長度的線性關係 – stujo