【发布时间】:2012-07-30 18:22:58
【问题描述】:
我有两个用 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++;
}
【问题讨论】:
-
不想回答,因为我可能误解了你的解释。伪代码会好很多...
-
我没有看到任何“M”循环发生 - 如果遇到数字,这只是一个持续操作,对吗?
-
@RobI,这正是我的想法。 sscanf 应该是一个恒定时间操作,因此该算法仍然是 O(1) 乘以 O(N) 循环,使其运行时间为 O(N)。
-
然而,递增指针是在 for 循环中完成的。它看起来如下:
for (int i = 0; i < digit_length; i++) p++; -
请检查更新 -- 添加代码。
标签: c algorithm time-complexity