[英]What is the run-time complexity of this Code?
該代碼的運行時復雜度是多少?
#include <cstdio>
#include <cstring>
int main()
{
int n, i, l, j, c, ans = 25;
scanf("%d", &n);
char x[21], y[21];
scanf("%s", &x);
l = strlen(x);
for(i=1; i<n; i++)
{
scanf("%s", &y);
c = 0;
for(j=0 ;j<l; j++)
if(x[j] == y[j])
c++;
else
break;
strcpy(x, y);
if(ans > c)
ans = c;
}
printf("%d", ans);
return 0;
}
我的講師告訴我,此代碼的復雜度為O(n*n)
但我不相信此答案會導致內部循環運行字符串長度時間。
main()
的運行時由一些恆定時間語句的運行時和i
-loop的運行時組成:
T_main(n, l) ∈ O(1) + T_fori(n, l)
i
循環正好運行(n - 1)
次,並且由一些恆定時間語句和j
循環的運行時組成:
T_fori(n, l) ∈ (n - 1) * (O(1) + T_forj(n, l))
j循環的運行時間取決於數據。 在最佳情況下, x
和y
的第一個字符不同,因此:
T_forj_best(n, l) ∈ 1 * O(1)
在最壞的情況下, x
和y
具有等於y
l
個字符,因此:
T_forj_worst(n, l) ∈ l * O(1) = O(l)
這樣產生:
T_fori_best(n, l) ∈ (n - 1) * (O(1) + O(1)) = O(n)
T_fori_worst(n, l) ∈ (n - 1) * (O(1) + O(l)) = O(n * l)
和
T_main_best(n, l) ∈ O(1) + O(n) = O(n)
T_main_worst(n, l) ∈ O(1) + O(n * l) = O(n * l)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.