2014-04-21 6 views
0

실제로는 printf() 함수의 실행 시간이 무엇인지 궁금합니다. O (n) 또는 Ω (n) 여부에 관계없이 printf 기능의 실행 시간을 어떤 기준으로 결정할 수 있습니까? 화면에 한 줄만 출력하는 경우처럼 특정 숫자의 CPU주기가 걸리므로 O (1)이 될 수 있습니다. 그러나 printf이 어떻게 사용되는지 루프에 사용 된 경우 어떻게됩니까? 여러 번 printf() 함수를 호출 할 것입니다, 그럼 뭐야? 그것은 O (n) 또는 무엇일까요?printf() 함수의 실행 시간

답변

1

걸리는 시간은 항상 인쇄 할 문자 수에 비례하므로 Θ .


하지만 문자 수는 N이 아니 었나요?

문자열 목록 (예 : 정렬 알고리즘)에서 작동하는 알고리즘을 평가할 때 모든 알고리즘에 동일하게 영향을 미치기 때문에 문자열의 길이가 늘어날 때 무슨 일이 발생하는지 연구하는 것은 일반적으로 흥미롭지 않습니다. 우리는 목록의 크기가 커지면 어떻게되는지 연구하는 데 더 많은 관심이 있습니다. 그렇게하기 위해 우리는 문자열의 길이가이 경우 일정하다고 가정합니다.

예를 들어, 정렬 알고리즘은 O ((N log N) * M)을 취할 수 있습니다. 여기서 N은 요소의 수이고 M은 문자열의 길이입니다. 문자열의 길이를 일정하다고 생각하면 O (N log N)가되고 print은 Θ (M)에서 Θ (1)로 바뀝니다.

0

C 표준은 실행 시간이 printf에 대해서는 아무 것도 말하지 않습니다. 그것은 그것의 행동만을 지정합니다. 다른 구현은 다른 것보다 효율적이거나 덜 효율적일 수 있습니다.

절대 실행 시간이 아닌 O (n) 또는 Ω (n)에 대해 질문했습니다. printf이 O (n)이되어서는 안되는 이유를 생각할 수 없습니다. 여기서 n은 인쇄되는 문자 수입니다. (나는 O (n)과 Ω (n) 사이의 구분을 기억하지 못한다. 대학 이후로는 얼마간이 걸렸다.)

매우 긴 시퀀스 인 %n 지정자를 사용하여 형식 문자열을 구성 할 수 있다고해도, 출력을 생성하지 않는 동안 형식 문자열의 길이에 비례하는 시간이 걸릴 것입니다. 그래서 가장 일반적인 경우에 O (m + n)이라고 가정합니다. 여기서 m은 형식 문자열의 길이이고 n은 인쇄되는 문자 수입니다.

구현시 printf은 형식 문자열과 다른 인수를 통과하여 출력 문자를 생성합니다. 나는 가능성있는 복잡성이 O (n)을 초과하는 경우는 없다고 생각합니다. 당신이 당신의 프로그램에서 루프 printf를 호출 할 경우, 더 이상 printf의 실행 시간에 대해 물어하지만 printf를 호출하는 일이 당신의 알고리즘의 실행 시간에 대한있는

. 더 이상의 정보없이 대답하는 것은 불가능합니다.