标准库函数的复杂性顺序

时间:2011-03-11 10:43:58

标签: c++ complexity-theory

很抱歉,如果这是一个愚蠢的问题,但是......

此代码的复杂性顺序为O(n):

char buf[] = "hello world";
size_t length = strlen(buf);

for(size_t i = 0; i < length; i++)
{
    //do stuff
}

,此代码为O(n ^ 2):

char buf[] = "hello world";
for(size_t i = 0; i < strlen(buf); i++)
{
    //do stuff
}

因为strlen是O(n)。

但谁说strlen是O(n),它是否在标准中定义,是否必须是O(n)?

我怎么知道确定任何标准函数的复杂度顺序是什么?

3 个答案:

答案 0 :(得分:6)

是的,it has to be at least O(n) by design - 它接收第一个字符的地址,并且必须通过沿字符串扫描找到空字符,它只能通过推进和检查每个字符来实现。

答案 1 :(得分:1)

某些功能在标准中定义了复杂性。其他人,包括从C继承的人,没有。对于那些人来说,除了实施质量之外,你不能依赖任何其他东西来保持最低限度。

答案 2 :(得分:1)

是的,strlen是O(n),但在这个特定的例子中(带有字符串文字),一个好的优化器可以用strlen(buf)替换sizeof(buf)。有些编译器可以。