[英]Why am I over counting the amount of comparisons in this insertion sort algorithm?
[英]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 > largest
和n < 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.