很抱歉,如果這是一個愚蠢的問題的複雜性,但是......秩序的標準庫函數
這種複雜代碼的順序是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