6

假设我正在打印一个字符串,如下所示:

printf("%s", s);

我们可以假设这个函数的渐近复杂度是多少?

O(n),其中 n 是strlen(s) - 它的长度吗?还是以某种方式O(1),恒定时间。还是有什么不同?但是,我想您需要知道 printf 是如何实现的。任何见解表示赞赏!

(我应该澄清一下,我说的是 C 而不是 C++,但我怀疑它们的实现方式不同)

编辑:将格式化字符串添加到 printf()

4

1 回答 1

7

它的复杂度是 O(m + n),其中 m 是输入的大小,n 是输出的大小。

如果不传递其他参数,例如在您的情况下,时间复杂度为 O(2*m) = O(m)。

但请注意,您的代码可能会失败,因为 s 本身可能包含格式化代码,并且会产生未定义/未知/不可预测/probably_very_bad 结果,正如 Adriano 所指出的那样。

于 2013-05-29T15:18:38.923 回答