O(n)的时间复杂度

时间:2020-03-29 19:40:05

标签: data-structures time-complexity

我现在正在学习数据结构,我只是写了一个代码,我不太清楚如何计算代码的时间复杂度。 我需要计算排序的字符串数组中单词的使用频率。 我认为如果我用for循环编写的代码以(n)结尾,那就是O(n) 如果在循环内有while循环,直到长度-1为O(n-1) 因此时间复杂度为O(n ^ 2)。

这是我的代码。谢谢大家!

int length = array.length;
for (int i = 0; i < length - 1; i++) {
int counter = 1;
while(i< length - 1 && array[i] == array[i+1]) {
    counter++;
    i++;
}
System.out.print(counter +" ");

1 个答案:

答案 0 :(得分:0)

您的循环执行的迭代总数是N-1次,因为当我超过N-1时,两个循环都会中断。但是,程序的实际时间复杂度也取决于字符串的长度,因为字符串之间的比较需要O(| S |)时间,其中| S |是要比较的两个字符串的(最小)长度。因此,如果您的字符串总长度为M,则总体时间复杂度将为O(N + M)。

您的错误是假设嵌套循环始终产生二次复杂度。如果您设置一些计数器来评估代码所需的操作数量并测试较大的N,则会发现它是线性缩放而不是二次缩放。