簡體   English   中英

我是否在此腳本中正確計算了數組比較?

[英]Am I counting the array comparisons correctly in this script?

我在下面有這個腳本,用於查找整數數組中的最小值和最大值。 目標是在少於1.5 x N 次比較中完成此任務,其中N是輸入數組n_list的長度。 我想問幾個問題。

1:(在for循環內部)將最小最大變量與n進行比較是否被視為數組比較? 在下面的腳本中,我將其視為一個。 如果是,為什么會這樣? 我能找到的定義說數組比較是在兩個數組之間進行的,這並不是我真正在做的,IMO。

2:如果我沒有正確計數,我做錯了什么?

3:解決這個問題的更好方法是什么?

非常感謝,希望你有一個美好的一天/晚上:)

 def findExtremes(n_list):

   smallest = n_list[0]
   largest = n_list[0]
   counter = 2 # See above

   for n in n_list:
      if n > largest:
         largest = n
         counter += 1
         continue
      elif n < smallest:
         smallest = n
         counter += 1
         continue
      else:
         counter += 1
         continue

   return(counter)

你只計算成功的比較。

當第一個if成功時,您已經進行了一次比較,並且您正確地執行了counter += 1

但是如果你進入elif ,你已經做了兩個比較: n > largestn < largest ,所以你需要做counter += 2

如果比較失敗,您仍然已經進行了兩次比較,因此您還需要在else塊中執行counter += 2

您不需要在開始時初始化counter = 2 ,您應該將其設置為0 您將計算與循環中列表的第一個元素的兩次比較。

實際上,您可能只想跳過這些元素,因為結果是已知的。 你可以做:

for n in n_list[1:]:

跳過它們。 如果您應該計算這些不必要的比較,那么初始化counter = 2是有意義的。

您關於“數組比較”的問題似乎根本不相關。 在這個問題中沒有關於比較數組的內容,您只是將數組元素與同一數組的其他元素進行比較。

您的算法執行從 N+1 到 2*N 的任何比較。 最好的情況是當數組從最小到最大排序時——對每個元素更新largest的測試成功,所以它永遠不必更新smallest 最壞的情況是當它以相反的順序排序或所有數字都相同時:所有largest測試都失敗了,因此它必須測試每個元素以查看它是否是新的smallest 平均而言,隨機數據往往接近最壞的情況,大約 1.95*N。

暫無
暫無

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

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