하는 방법 calcualte Big-O 의 복잡성을 다음과 같은 알고리즘?
-
29-09-2020 - |
문제
려고 노력했습을 계산하 Big-O 의 다음과 같은 알고리즘과 그것은 오는 것을 O(n^5)for me.I don't know what 정답입니다 하지만 대부분의 동료들은 점점 O(n^3).
for(i=1;i<=n;i++)
{
for(j=1 ; j <= i*i ; j++)
{
for(k=1 ; k<= n/2 ; k++)
{
x = y + z;
}
}
}
무엇이었을 시작에서 가장 안쪽 반복입니다.그래서 나는 것을 계산하는 가장 안쪽 반복 실행 n/2
시간 후,나는 두 번째 중첩에 대한 반복되는 것이 실행 i^2
시간과에서 가장 바깥쪽 반복 실행 i
시간 i
에는 다양 1
하기 n
.이 의미는 두 번째 중첩에 대한 반복 실행되는 총 Sigma(i^2) from i=1 to i=n
그래서 총 n*(n+1)*(2n+1)/6
다.그래서 총 금액에는 코드는 실행하는 것이 나왔을 순서 n^5
그래서 나는 결론을 내렸어야 합니다 O(n^5)
.무언가 잘못으로 이 방법 그리고 대답하는 내가 계산됩니까?
나는 그냥 시작 DSA 및 할당 그래서 숙박 시설에는 흡연 구역이 지정되어 기본적인 실수가 있을 수 있습니다.
해결책
for(i=1;i<=n;i++)
{
for(j=1 ; j <= i*i ; j++)
{
for(k=1 ; k<= n/2 ; k++)
{
x = y + z;
}
}
}
Triple-중첩된 루프에 해당하는 합계 $$\sum_{i=1}^{n}\sum_{j=1}^{i^2}\sum_{k=1}^{n/2}1$$ $$=\frac{n}{2}(\sum_{i=1}^{n}\sum_{j=1}^{i^2}1)$$ $$=\frac{n}{2}(\sum_{i=1}^{n}i^2)$$ $$=\frac{n}{2}\cdot(\frac{1}{6}n(n+1)(2n+1))$$ $$=O(n^4)$$
의 측면에서 제 코드는 효율성,이후 x=y+z
은 불변,루프에서 어떤 좋은 최적화를 컴파일을 추출합니다 문 루프에는(컴파일러,말하는 호이스트하면 문 루프 preheader),따라서 컴파일 된 코드에서 실행 $O(1)$.