ruby的.min和.max方法如何工作,以及使用这些方法查找数组中的最小值或最大值时的时间复杂度是多少?

时间:2017-10-11 21:18:49

标签: arrays ruby max time-complexity min

背景:

我在查看算法问题时,在给定一系列股票价格时确定max_stock_profit。我试图确定所述方法的时间复杂度,并在.min方法中遇到数组上使用的each。这让我想问这篇文章中的题目。

一般来说,例如,只需查看长度为1,000,000的数组上的.min.max方法,就不会运行.min.max数组需要线性时间O(n)来确定最小值或最大值,其中n是数组的长度?..

如果是,那么根据下面显示的示例代码,通过在.min方法中运行.maxeach方法,时间复杂度不会为O(n ^ 2)因为它需要在each方法中运行另一次迭代来确定最小值?我认为代码段应该在O(n)时间运行,但我对.min.max的工作方式缺乏了解是导致混乱的原因。

是否因为在仅包含2个值的数组上调用.min,可以假设代码行在恒定时间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

1 个答案:

答案 0 :(得分:1)

.min中的.maxeach操作正在应用于只有2个元素的数组,因此每个操作都是O(1)操作。更改n stock_prices中的元素数量不会更改在每次迭代中找到.min.max的时间量,它们与n无关。因此,整个块是O(n)。