2014-09-06 4 views
0

내 책의 운동은 루프에 대해 다음의 실행 시간을 계산하라고 요구하고있다 :다음 프로그램의 실행 시간은 얼마입니까?

for (int i = 0; i < n; ++i) 
    ++k; 

이 즉시 요약 표기법을 생각 나게합니다. 그래서 적절한 구문을 적어 :

enter image description here

이 맞습니까? 그렇지 않다면 어떻게해야 제대로 계산할 수 있습니까?

+0

여기서 뭐하는 모든 계산된다 명확 같다

O(n) * O(1) 

. 운동 내용을 이해하면 시계 시간을 측정해야합니다. 이를 위해서는 고정밀 클럭 기능을 사용해야합니다. – Logicrat

답변

0

살펴 보자 :

++k; 

는 상관없이 k이 무엇인지, 그 작업은 일정 시간이 소요되지 않습니다. 이제 O(1)으로 바꾸자.

for (int i=0; i<n; ++i) 
    O(1) 

우리는 우리가 O(1) 블록을 통해 n 번 반복하려고하는 것을 볼 수 있습니다. 그래서는 다음과 같습니다

O(n) 
+0

내가 따라하는 책에서 우리는'O' 문법을 사용하지 않고있다. 우리는 코드를 나타내는 방정식을 분해합니다. 그래서이 경우 그것은 제 질문의 합계 표기법과 같습니다. –

+0

아마도 귀하의 책은'\ sum_ {i = 1}^{n} 1'을 (를) 찾고 있습니까? 그러나 나는 내가 아는 표기법으로 만 도울 수있다. 이 표기법을 읽으려면 [위키 백과 링크] (https://en.wikipedia.org/wiki/Big_O_notation)를 읽으십시오. –

+0

당신의 코드는'1 + 1 + 1 + ...''n '번을 합산합니다. 내 코드는'k + 1 + 1 ...'을 추가하고있다.''k'는'1'에서 시작한다는 보장이 없다. –

2

이 정보가 맞습니까?

아니요.

그렇지 않은 경우 어떻게해야 제대로 계산할 수 있습니까?

k는 즉, 각각의 반복에 의해 증가 1 루프가 종료 될 때 n가 추가된다. 따라서 k = k + 1k = k + k과 같지 않습니다.

코드 실행 시간은 n입니다. 왜냐하면 루프가 n 번이고 ++k이 루프 내에서 일정 시간 실행되기 때문에 코드의 실행 시간은 n입니다. 루프 내부의 작동에

관련 문제