c - 两个循环的时间复杂度

标签 c algorithm time-complexity

我有两个用 C 编写的循环,第一个循环运行 n 次,其中 n 是输入字符串的长度。假设输入字符串为:*& 201 +ACD 3491 AASD 3

循环将扫描每个字符,如果遇到数字,它将计算该数字的长度,并将指针增加该距离。因此,当指针p指向2并读取一个整数时,它将sscanf数字(201)并将 p 增加 3。两个嵌套循环,其中一个运行 N 次,另一个运行 M 次,其时间复杂度为 O( N * M)

可以肯定地说,我的算法中的时间复杂度也是O(N * M),其中M是在该特定位置扫描的位数迭代?如果不是,整个事情的时间复杂度是多少?

编辑:

这是一些代码

char c;
while ((c = fgets(fp)) != EOF) {
    // scans characters, if a digit is encountered, get digit_length
    for (int i = 0; i < digit_length; i++)
        p++;
}

最佳答案

如果您正在扫描以下所有号码:

201
01
1
3491
491
91
1
3

那么时间将是(最坏情况)O(N^2)。如果你以某种方式避免这种情况(你应该这样做),那么它将是 O(N)。

关于c - 两个循环的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11727288/

相关文章:

c - 无法在 c 中使用 exec 和 makeargv 运行 ./program

从 C 调用汇编代码在多次调用后删除地址

c - 如何添加矩阵的对角线和半对角线

linux - 如何正确计算TCP数据包校验和?

algorithm - 从上到下求三角形最大和的时间和空间复杂度是多少

c - Tesseract-OCR培训问题

c - 返回指向第一个空白字符 (isspace) 的指针的函数

java - Java 中的双向链表如何向后遍历?

java - 找出给定函数的时间复杂度

c - C语言中的二进制 vector 和矩阵运算