很抱歉,如果这是一个愚蠢的问题的复杂性,但是......秩序的标准库函数
这种复杂代码的顺序是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)?
我怎样才能知道当然什么是任何标准函数的复杂性将是什么?
这并不意味着任何使用复杂函数未知的函数的代码的复杂性的顺序本身是不可知的? – Bagpuss 2011-03-11 10:54:33
@Bagpuss:是的,除非另有规定,否则任何代码都是黑匣子。 – sharptooth 2011-03-11 10:57:41
这取决于你正在查看哪种复杂度 - 对于strlen,下限最坏情况是线性的 - 但你不知道实现的上限。然而,考虑到线性算法很明显,常识意味着它是以这种方式实现的。 – ltjax 2011-03-11 10:59:56