簡體   English   中英

ruby的.min和.max方法如何工作,使用這些方法在數組中查找最小值或最大值時的時間復雜度是多少?

[英]How does ruby's .min and .max method work, and what is the time complexity when using those methods to find min or max value in an array?

語境:

給定一系列股票價格時,我正在研究一種算法問題,以確定max_stock_profit。 我試圖確定所述方法的時間復雜度,並且遇到了each方法中的數組上使用的.min 這導致我提出了本文標題的問題。

一般而言,例如,簡單地查看長度為1,000,000的數組上的.min.max方法時,在該數組上運行.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

each中的.min.max操作都將應用於僅包含2個元素的數組,因此每個操作都是O(1)操作。 更改n,即stock_prices的元素stock_prices ,將不會更改每次迭代中找到.min.max的時間量,它們獨立於n。 因此,整個塊為O(n)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM