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 には書式設定コード自体が含まれている可能性があり、未定義/不明/予測不可能/おそらく非常に悪い結果が生成されるため、コードが失敗する可能性があることに注意してください。

于 2013-05-29T15:18:38.923 に答える