我試圖從我的教授的講義中瞭解複雜類算法,但我仍然無法得到它的一個竅門。解釋爲什麼這個非簡化的複雜表達式是這樣的?
void sort(int a[], int N) { //N is the length of the array
for (int base=0; base<N; ++base)
for (int check=base+1; check<N; ++check)
if (a[base] > a[check])
std::swap(a[base], a[check]);
}
在他的筆記上他說這個表達式是8N^2 + 12N + 6。
從我完全理解的複雜等級來看,這是N^2,因爲它是其餘增長最快的。我們忽略常量,因爲它們在無限時無關緊要。
但是,我想知道他是如何得到這些常量的。
我不明白他是怎麼得到的+6。當這個函數被調用一次時,究竟只運行總共6次?我看到int base = 0僅創建一次,因爲它屬於外部for-loop。
編輯:所以我發現+6只是這個函數需要運行的最低限度。在for循環只執行一次的情況下...所以總行數?那麼我們做一個[]和int N的副本,然後我們有我們的for循環和if語句。一切都增加到6.
怎麼樣的12N?
是不是隻是bubblesort? 我不知道這個應該和其他的東西有什麼關係(爲什麼你需要int N?你知道這個信息已經是類似於a.Length的東西了) –
這裏唯一正確的是* n *複雜性。常量全部組成。 6是什麼意思? 6什麼?在什麼平臺上?由於常量是組成的,你可以彌補內循環每次迭代運行12次或任何東西。我必須說,這是一種愚蠢的行爲。 –
只有在假設此算法中的基本元素執行一些時間時,纔可以獲得這些常量。我們不知道你的教授如何定義這些。不過正如@AmiTavory已經指出的那樣,這在實踐中是無關緊要的。 – Henry