代码之家  ›  专栏  ›  技术社区  ›  George.

ruby的怎么样。最小值和。最大方法有效,当使用这些方法在数组中查找最小值或最大值时,时间复杂度是多少?

  •  1
  • George.  · 技术社区  · 8 年前

    上下文:

    我在研究一个算法问题,当给定一系列股票价格时,它可以确定最大股票收益。我试图确定所述方法的时间复杂度,并遇到了一个 .min 用于 each 方法这让我提出了这篇文章中标题为的问题。

    .最小值 .max 例如,长度为1000000的数组上的方法不会运行 .最小值 在阵列上,需要线性时间O(n)来确定最小值或最大值,其中n是阵列的长度?。。

    如果是这样,那么根据下面显示的示例代码,通过运行 .最大值 中的方法 每个 方法,因为它需要在 每个 确定最小值的方法?我认为代码片段应该在O(n)时间运行,但我不了解如何运行 .最小值 .最大值 作品是造成巨大混乱的原因。

    如果在只包含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
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   pjs    8 年前

    这个 .min .max 中的操作 each 正在应用于只有2个元素的数组,因此每个元素都是O(1)运算。改变n,元素的数量 stock_prices ,不会更改查找 .最小值 .最大值 在每次迭代中,它们独立于n。因此,整个块是O(n)。