2차원 배열을 생성하고 배열 전체의 20%에만 임의의 수가 저장되게 만들어 보았다.
int** InputValue(int *valueCount) {
int** arr;
int i,j,rannum;
int count = 0;
arr = (int**)malloc(sizeof(int)*MAXSIZE);
for(i=0;i<MAXSIZE;i++)
{
arr[i] = (int*)malloc(sizeof(int)*MAXSIZE);
} // 2차원 배열 동적할당 선언
srand(time(NULL));
// <- 값 입력
for(i=0;i<MAXSIZE;i++)
{
for(j=0;j<MAXSIZE;j++)
{
// 전체 배열중 20%에만 원소를 저장시킨다.
rannum = rand()%100;
if(rannum<20) {
arr[i][j] = (rand()%100)+1; // 값을 저장할 때는 1~100 범위의 숫자를 저장한다.
count++; // 값이 입력될때 마다 카운트를 1씩 증가시켜
// Sparse Matrix에 값이 몇개 저장되었는지 카운트 한다.
}
else
{
arr[i][j] = 0; // 나머지 배열의 원소에는 0을 저장한다.
}
}
}
// ->
*valueCount = count; // 생성된 Value의 수를 참조를 통하여 저장한다.
return arr;
}
main함수에서
int **arr;
이라는 변수를 더블포인터 변수를 선언하고
arr = InputValue(&valueCount);
식으로 연결시켜 주었다. valueCount는 몇개의 값이 생성되었는지 알기 위한 변수로 메인에서 선언해주고 InputValue함수에
주소만 넘겨주었다.
배열 전체의 20%에만 값을 할당하기 위해 0~99 범위의 랜덤한 숫자를 생성하고 20보다 작을때만 값이 입력되게 만들었는데
이에 대한 검증은 따로 하도록 하겠다.
결론적으로 InputValue함수를 통해 생성된 2차원배열을 파일에 찍어보면 다음과 같이 제대로 생성됨을 볼 수 있었다.
이는 MAXSIZE를 15000으로 해서 15000 x 15000 사이즈의 2차원 배열이 생성되었을 때이다.
파일사이즈가 커서 메모장으로는 열리지도 않는다 ㅋㅋ
이제 생성된 2차원 배열을 희소행렬 표현방식으로 저장해 보았다.
15000 x 15000 사이즈에 value가 45049011개인 희소행렬이 제대로 저장된 것을 확인 할 수 있었다.
2차원 배열과 희소행렬의 결과값을 비교해서 검증해 보면
'Computer Science > 자료구조' 카테고리의 다른 글
Prefix, Infix, Postfix (전위표기법, 중위표기법, 후위표기법) (0) | 2012.07.31 |
---|---|
2차원배열의 전체 20%에만 값을 저장하기 (0) | 2012.07.28 |
Sparse Matrix (1) - 희소행렬이란? (0) | 2012.07.28 |
Binary Search (3) - Recursive 방식으로 값 찾기 (0) | 2012.07.17 |
Binary Search (2) - Iterative 방식으로 값 찾기 (0) | 2012.07.17 |