나는 다음과 같은 문제가 있습니다 : 같은 N 번호C 프로그램의 계산 속도를 향상
을 감안할 때이 개 파일을
FILE1.DAT : 1,2,3,4,5,6,7 , 8,9,0
FILE2.DAT : 나는 얼마나 많은 시간을 알고 싶은 2,5,4,7,6,9,8,1,0,3
두 개의 연속 번호의 순서 첫 번째 파일의 두 번째 파일에서 변경된 파일 (동일한 번호 포함). 예를 들어, 파일 1에서 우리는 1과 2를 찾고, 두 번째 파일에서 2는 1 앞에옵니다. 따라서 순서가 변경되었습니다. 첫 번째 파일에는 9와 0이 있고 두 번째 파일에는이 순서가 유지됩니다.
#include <stdio.h>
#include <stdlib.h>
#define N 32421
int main() {
int A[N], B[N];
int i,j,k=0,count=0;
FILE *fp;
if ((fp = fopen ("file1.dat", "r")) == NULL) {
printf ("Error opening file 1\n");
exit (EXIT_FAILURE);
}
for (i = 0; i < N; i++)
fscanf (fp, "%d", &A[i]);
fclose (fp);
if ((fp = fopen ("file2.dat", "r")) == NULL) {
printf ("Error opening file 2\n");
exit (EXIT_FAILURE);
}
for (i = 0; i < N; i++)
fscanf (fp, "%d", &B[i]);
fclose (fp);
for(i=0; i<N-1; i++)
for(j=0; j<N; j++)
for(k=0 ; k<N; k++)
if(B[j]==A[i] && B[k]==A[i+1] && k < j)
count++;
printf("The number of inversion is: %d\n",count);
return 0;
}
내가 다루고있어있는 파일을 사용하면 프로그램 (각 파일에 대한 32421 개 번호)의 3 번째 줄에서 볼 수 있듯이 매우 큰, 그래서 시간 :
나는 다음과 같은 프로그램을 작성 찍은 것이 너무 큽니다. 누구나 계산 속도를 향상시킬 수있는 제안이 있습니까?나는 휴식이 다음과 같은 방법으로 루프에 추가로도 시도 :
int a;
for(i=0;i<N-1;i++){
a=0;
for(j=0;j<N;j++){
for(k=0;k<N;k++){
if(A[i]==B[j] && A[i+1]==B[k] && k<j) {
count++;
break;
a=1;
} if(A[i]==B[j] && A[i+1]==B[k] && j<k){
break;
a=1;
}
}
if(a==1){
break;
}
}
}
하지만 여전히 5 시간 이상 소요됩니다. 어떻게 속도를 높일 수 있습니까?
모든 숫자는 별개의 첫 번째 어레이의 첫 번째 요소의 위치? – pmg
당신은 아마도 당신의 루프에서 어떤 break를 할 수 있습니다. – pmg
@pmg, break가 해결책이 될 수는 있지만, 프로그램에서 어떻게 쓰는지 모르겠습니다. 숫자는 모두 구별됩니다 –