2013-02-28 2 views

답변

3

각 반복에 대해 처음에는 x=i이 있고 그 다음에 x은 매번 1/i만큼 감소합니다. 따라서 이것은 i/(1/i)==i^2 번 반복됩니다.

따라서 for(i=1;i<n;++i)의 반복마다 내부 부분은 O(i^2)의 복잡성을 갖습니다. i은 1에서 n으로 증가하므로 (1^2+2^2+3^2+...+n^2)을 추가하는 것과 같습니다. 대략 n^3/6입니다. 따라서 그것은 O(n^3)입니다.


Outer loop(for)   Inner Loop 
    I=1      1 
    I=2      4 
    I=3      9 
    ...      .. 
    I=N      N^2 
TOTAL_      ~N^3/6 
+0

'합계 [n^2, {n, 1, N}]'은 (n + 1) (2n + 1) n/6'이어야합니다. – phoeagon

+0

오 10x 당신도 나를 위해 테이블을 만들었습니다! : P하지만 i/(1/i) == i^2를 얻는 "수학적"방법이 있습니까? 왜냐하면 강철은 "추측"이라고 생각하기 때문입니다. – user1980750

+0

@ user1980750'x'의 초기 값은'i'입니까? 'while' 루프에서'x'는'1/i' 각각의 시간만큼 감소합니까? 따라서'x'가'0'이 되려면 이론적으로'i/(1/i) = i^2'가 필요합니다. 부동 소수점 산술로 인한 정밀도 손실로 인해 조금 더 많거나 적은 시간이 필요할 수 있습니다. 그러나 그것은이 내부 루프에 대한'O (n^2)'바운드를 변경해서는 안됩니다. – phoeagon

2

이 비교적 간단합니다 : 당신은 두 개의 중첩 루프의 각 실행 횟수를 결정해야하고, 함께 복잡성을 고려.

바깥 쪽 루프는 보통 for 루프입니다. n 번 실행합니다.

내부 루프는 조금 더주의가 필요합니다. 1/i을 0으로하거나 음수가 될 때까지 i에서 계속 감안합니다. 루프 while을 반복하여 을 빼는 것이 쉽습니다. x에서. x은 처음에 i으로 설정되었으므로 내부 루프에 걸린 총 시간은 i^2입니다.

따라서, x에 대한 합계는 x 제곱이고, 1n 사이입니다.

Wolfram Alpha tells us that the answer to this is n*(n+1)*(2n+1)/6

O(n^3)의 복잡도를 갖는다 n^3/3 + n^2/2 +n/6 다항식으로 확장된다.

+0

수식을 검색 할 필요는 없습니다. 'O (n^3)'에 있다고 추측하는 것이 가장 자연 스럽습니다. – phoeagon

+1

@phoeagon 동의합니다. 여기에 맞을 것 같습니다. 그러나 OP는 추측하지 말 것을 요청했기 때문에 알파에게 나를 위해 계산을 요청했습니다. – dasblinkenlight

+0

고마워, 나는 두 번째 루프 분석 뒤에있는 생각을 이해하고 있다고 생각 ..하지만이 대답을 얻으려면 수학적 방법이 무엇입니까? 클래스에서 k 변수를 사용하는 법을 배웠기 때문에 k == i^2가됩니다. – user1980750

관련 문제