我有以下問題:提高C程序的計算速度
鑑於2個N號的文件,如
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'ing – pmg
@pmg,這個中斷可能是一個解決方案,但我不知道如何在程序中編寫它們。這些數字都是截然不同的 –