[英]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.