我试图帮助一位朋友分析他的算法的复杂性,但我对 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
循环的复杂性,但即使在测量之后,我仍然需要帮助将所有这些复杂性组装成一个表示算法计算复杂度的公式。
在这件事上我非常需要帮助。谢谢!