내 책의 운동은 루프에 대해 다음의 실행 시간을 계산하라고 요구하고있다 :다음 프로그램의 실행 시간은 얼마입니까?
for (int i = 0; i < n; ++i)
++k;
이 즉시 요약 표기법을 생각 나게합니다. 그래서 적절한 구문을 적어 :
이 맞습니까? 그렇지 않다면 어떻게해야 제대로 계산할 수 있습니까?
내 책의 운동은 루프에 대해 다음의 실행 시간을 계산하라고 요구하고있다 :다음 프로그램의 실행 시간은 얼마입니까?
for (int i = 0; i < n; ++i)
++k;
이 즉시 요약 표기법을 생각 나게합니다. 그래서 적절한 구문을 적어 :
이 맞습니까? 그렇지 않다면 어떻게해야 제대로 계산할 수 있습니까?
살펴 보자 :
++k;
는 상관없이 k
이 무엇인지, 그 작업은 일정 시간이 소요되지 않습니다. 이제 O(1)
으로 바꾸자.
for (int i=0; i<n; ++i)
O(1)
우리는 우리가 O(1)
블록을 통해 n
번 반복하려고하는 것을 볼 수 있습니다. 그래서는 다음과 같습니다
O(n)
내가 따라하는 책에서 우리는'O' 문법을 사용하지 않고있다. 우리는 코드를 나타내는 방정식을 분해합니다. 그래서이 경우 그것은 제 질문의 합계 표기법과 같습니다. –
아마도 귀하의 책은'\ sum_ {i = 1}^{n} 1'을 (를) 찾고 있습니까? 그러나 나는 내가 아는 표기법으로 만 도울 수있다. 이 표기법을 읽으려면 [위키 백과 링크] (https://en.wikipedia.org/wiki/Big_O_notation)를 읽으십시오. –
당신의 코드는'1 + 1 + 1 + ...''n '번을 합산합니다. 내 코드는'k + 1 + 1 ...'을 추가하고있다.''k'는'1'에서 시작한다는 보장이 없다. –
이 정보가 맞습니까?
아니요.
그렇지 않은 경우 어떻게해야 제대로 계산할 수 있습니까?
k
는 즉, 각각의 반복에 의해 증가 1
루프가 종료 될 때 n
가 추가된다. 따라서 k = k + 1
은 k = k + k
과 같지 않습니다.
코드 실행 시간은 n
입니다. 왜냐하면 루프가 n
번이고 ++k
이 루프 내에서 일정 시간 실행되기 때문에 코드의 실행 시간은 n
입니다. 루프 내부의 작동에
여기서 뭐하는 모든 계산된다 명확 같다
. 운동 내용을 이해하면 시계 시간을 측정해야합니다. 이를 위해서는 고정밀 클럭 기능을 사용해야합니다. – Logicrat