[英]do you include the step before a comparison is made in the number of iterations a sorting algorithm takes?
正如問題所指出的,我有點空白。 當您計算算法要完成的步驟數時,是否需要包括尚未進行比較的步驟?
例如:
如果您有清單: 5,3,7
然后對它執行氣泡排序。 它會;
1)比較5
和3
並將它們交換為5>3
。 現在的清單是3,5,7
2)比較5
和7
,因為5<7
不變。 現在的清單是3,5,7
3)比較3
和5
,沒有預期的變化。 清單仍然是3,5,7
4)比較5
和7
,沒有預期的變化。 清單仍然是3,5,7
現在進行的迭代次數是4還是5? ...或者我完全錯了嗎?
謝謝
您執行了4 次迭代 。 這就是為什么迭代次數為4的原因。
Algorithm
//... some precondition steps
iteration( for... ) { <
//... < iteration steps
} <
恕我直言,在尚未執行任何步驟的時間點,步驟數=0。執行完一個步驟后,步驟數=1。我真的不知道如何達到執行4個步驟的目的。被認為是五個..
無論如何,請記住,通常將其分析為O(f(n)),其中與N無關的術語(如+-常數)即+ -1或+ -100會被簡單地刪除。
有時有助於查看/考慮代碼:(摘自Wikipedia )
procedure bubbleSort( A : list of sortable items )
repeat
swapped = false
for i = 1 to length(A) - 1 inclusive do:
// this is the start of an iteration
if A[i-1] > A[i] then
swap( A[i-1], A[i] )
swapped = true
end if
// this is the end of an iteration
end for
until not swapped
end procedure
基於以上所述,應該很容易看出,我們僅在進行比較時才計算一次迭代。
因此將是4次迭代。
從技術上講,您還可以根據repeat ... until
循環來討論迭代,這將為您帶來完全不同的結果。
而且,“步驟”當然可以分為許多較小的部分。
對於與上述相似的歧義,我們傾向於使用big-O表示法 ,這實際上只是給了我們算法運行時間的增長速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.