我試圖幫助朋友分析他的算法的複雜性,但我對Big-O符號的理解是相當有限的。算法分析(big-O)算法
的代碼是這樣的:
int SAMPLES = 2000;
int K_SAMPLES = 5000;
int i = 0; // initial index position
while (i < SAMPLES)
{
enumerate(); // Complexity: O(SAMPLES)
int neighbors = find_neighbors(i); // Complexity: O(1)
// Worst case scenario, neighbors is the same number of SAMPLES
int f = 0;
while (f < neighbors) // This loop is probably O(SAMPLES) as well.
{
int k = 0; // counter variable
while (k < K_SAMPLES) // Not sure how to express the complexity of this loop.
{ // Worst case scenario K_SAMPLES might be bigger than SAMPLES.
// do something!
k++;
}
f++;
}
i++;
}
有裏面的代碼2層的功能,但我能,因爲它們易於識別的複雜性。但是,我無法表達內部循環的複雜性,但即使在測量之後,我仍然需要幫助將所有這些複雜性組合成代表該算法的計算複雜度的公式。
我在這件事上非常需要幫助。謝謝!
'while(i
nhahtdh
2013-03-05 20:50:24
這裏有什麼變數? N是唯一的變量嗎?我猜N代表所有鄰居的集合。你是否認爲SAMPLES和K_SAMPLES是固定的?因爲那時他們在計算big-O時就不會考慮。 – 2013-03-05 20:53:26
是的。修復了這個問題,謝謝@nhahtdh – karlphillip 2013-03-05 20:58:50