문제

려고 노력했습을 계산하 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)$.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top