2012-11-08 1 views
1

내 문제는 내가 가지고있는 데이터 파일에서 유클리드 거리를 계산해야하는데, 그 후에 유클리드 거리로 주어진 N 개의 가장 낮은 숫자를 가져와야합니다.배열에 n 개의 가장 낮은 숫자를 저장 C

나는 모든 파일의 길이가 1.000.000 인 배열을 만들었지 만 그 방법으로 명백한 분할 오류가 발생했습니다. 그래서 N 값을 얻고, N 길이의 배열을 만들고, 그 중 가장 낮은 N을 모두 저장 한 다음, 초승달 순서로 배열 한 다음 인쇄합니다.하지만 유클리드의 값을 비교하는 것은 어렵습니다. 거리와 배열에 저장된 거리.

void calcDist(Nodo *L,int vpesq[],int n) 
{ 
    int dist[n],ed; 
    while(L!=NULL){ 
    x=0; 
    for(i=0;i<12;i++) 
      x=x+pow((vpesq[i]-L->caracter[i]),2); 
      ed=sqrt(x); 
} 

그러나 지금은 [N]을 DIST 에드의 N 낮은 값을 저장할 필요도 N은 사용자에 의해 주어진 N 통해 루프를 만들지, 그 이유 크지 않으면

+2

처럼 N 가장 낮은 값을 저장할 수 게시하시기 바랍니다 일부 코드 스 니펫. 우리는 설명 외에는 아무것도 할 수 없습니다. – Grambot

답변

1

당신이

void store_lowest_N(int* array, int N, int new_value) { 
    for (int i=0; i<N; i++) { 
     if (new_value < array[i]) { 
      for (j=N-1; j>i; j--) { 
       array[j] = array[j-1]; // shift the larger values down to make space 
      } 
      array[i] = new_value; 
      break; 
     } 
    } 
} 

void initialize_array(int* array, int N) { 
    for (int i=0; i<N; i++) { 
     array[i] = INT_MAX; 
    } 
} 
+0

감사합니다 : D –

0

당신의 유클리드 거리가 N-Array의 적어도 하나의 요소보다 작은 지 확인하려면이 N-Array를 사용 하시겠습니까? 이 문제가 생기면 배열이 초기화되지 않았을 수 있습니다. 즉, 먼저 큰 파일의 맨 처음 N 개의 숫자로 배열을 채워야합니다. 당신은 배열의 모든 100의 값을 할당하지 않으면

int my_array[100]; 

이 비 asigned 값은 값이 0이됩니다 (컴파일러에 따라 달라질 수 있습니다) 및 발생할 수 있습니다 만,이 같은 배열을 만들 경우에 발생합니다 너는 너와 비교할 때 문제가있다. 지금까지 귀하의 문제를 파악한 것이 전부입니다. 당신이 N을 저장하려면

+0

그게 문제가 아니에요, 내 문제는 내가 오래 int 배열 [1000000]를 사용하고 있었고 나는이 모든 것을 낭비하지 않고 할 수 있다고 생각하는 방법의 낭비입니다 –

0

이 수를 낮추고, 당신이해야 할 일은이 의사 코드 같은 것입니다 :

void calcDist(..) 
    {int i; 
    int array_size = //; 
    int number_add = -1; 

for(i = 0; i < number_of_numbers_to_read; i++) 
{ 
    x = // calculate euclidean distance 

    if(number_add < array_size) // Theres still space in the array 
    { 
    number_add++;     // a new number in the array 
    } 
    // rearrange the array so it will be order again 
    for(j = 0; j <= number_add; j++) 
    { 
     if(array_lower[j] > x) // This is the position to put the value 
     { 
      aux = array_lower[j]; // if have to swap than 
      array_lower[j] = x; 
      x = aux; 
     } 
    } 
    } 

}