가능한 가장 빠른 런타임을 위해 C++ 프로그램을 최적화하는 데 문제가 있습니다.C++에서 입출력 최적화
코드의 요구 사항은 파일을 통해 프로그램으로 공급되는 2 개의 long 정수의 차이의 절대 값을 출력하는 것입니다. 예 :
파일 이름은 알 수 없으며 한 줄에 2 개의 숫자가 공백으로 구분되어 있습니다. 알 수없는 양의 테스트 데이터가 있습니다. 테스트 데이터 2 파일을 만들었습니다. 하나는 극단적 인 경우를 가지며 5 회 길다. 다른 하나는 Java 프로그램을 사용하여 2,000,000 개의 난수를 생성하고이를 timedrun 파일에 출력했습니다. 18.MB 상당의 테스트가있었습니다.
거대한 파일은 3.4 초에 실행됩니다. 1.1 초로 줄여야합니다.
int main() {
long int a, b;
while (scanf("%li %li",&a,&b)>-1){
if(b>=a)
printf("%li/n",(b-a));
else
printf("%li/n",(a-b));
} //endwhile
return 0;
}//end main
내 프로그램에 Valgrind의를 실행하고, 보류 업을 많이 읽기에 있었고 일부를 쓰기 것을 보여 주었다 :
이 내 코드입니다. 제가 전화를받는 것만 알면 어떻게 인쇄/스캔을 가장 원시적 인 형태의 C++로 다시 작성할 수 있습니까? 숫자를 이진수로 스캔하여 논리적 연산으로 데이터를 조작하여 차이를 계산할 수있는 방법이 있습니까? 나는 또한 버퍼를 작성하는 것을 고려해야한다고 들었지만, 웹을 검색하고 코드를 시도한 지 약 6 시간이 지난 후에 나는 실패했다.
도움을 주시면 감사하겠습니다.
최적화로 컴파일 했습니까? – Dave
출력을 리디렉션합니다. –
프로그램이 파일을 읽지 않습니다. 리디렉션을 사용하여 파일 내용을 프로그램에 제공하고 있습니다. 응용 프로그램에서 직접 파일을로드하고 메모리에 전체를로드 한 다음 scanf보다 낮은 수준의 루틴을 찾아 파싱합니다. –