자바로 알고리즘을 구성하였음.
import java.util.Arrays;class Data {
// 클래스변수 보호차원에서 private 선언
private int data;
Data() { data=1; } // 초기 데이터값을 1로 set
public void set() { data+=1; } // 데이터를 증가시킨다.
public int get() { return data; } // 데이터를 리턴한다.
}
class DataManager {
// i는 디스크 선택, j는 해당디스크의 배열값 선택
private int i, j;
private Data data;
// 디스크 수, 디스크배열, Data객체
void set(int DiskNum, int[][] disk, Data data_) {
// 초기값 설정
i = 0;
j = DiskNum-1;
this.data = data_;
while(i<=2*(DiskNum-1)) {
int y=j;
for(int a=0; a<DiskNum; a++) {
int x=0;
for(int b=i; b<j; b++) {
// 데이터 삽입
disk[a][b] = data.get();
// 복수개의 디스크에 데이터 백업
// 데이터가 현재 DISK의 값이면 다음 DISK로
if(a==x) x++;
// 데이터가 비어있으면 데이터 저장
if(disk[x][y]==0) {
disk[x][y]=data.get();
x++;
}
// 다음 저장할 위치를 위해 증가
// 데이터가 존재하면 배열위치를 증가
else {
y++;
disk[x][y]=data.get();
x++;
}
// 다음데이터 set
data.set();
}
}
// 다음 single disk 위치 선택
i += 2*(DiskNum-1);
// 다음 복수개의 데이터 저장위치 선택
j += 2*(DiskNum-1);
}
}
}
public class SMDA {
public static void main(String args[]) {
// 인수값 받아들인다.
int DiskNum = Integer.parseInt(args[0]);
try {
// 2이하의 값을 입력시 에러를 출력한다.
if(DiskNum <=2) {
throw new ArrayIndexOutOfBoundsException("2 이상의 값을 넣으세요");
}
int disk[][] = new int[DiskNum][];
// Data객체 생성
Data data = new Data();
for(int i=0; i<DiskNum; i++) {
// disk마다 배열공간 set
disk[i] = new int[4*(DiskNum-1)];
// 배열공간을 초기화
Arrays.fill(disk[i], 0);
}
// DataManager객체 생성
DataManager DM = new DataManager();
// 데이터 삽입 및 복수디스크에 데이터 생성
DM.set(DiskNum, disk, data);
// DISK의 내용 출력
Print(DiskNum, disk);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
}
// DISK 내용 출력 메소드
static void Print(int DiskNum, int[][] disk) {
System.out.println("RAID Type : SMDA, Disk number is " +DiskNum+ "." );
for(int i=0; i<DiskNum; i++) { //
System.out.print("Disk["+i+"] : ");
for(int j=0; j<4*(DiskNum-1); j++){
System.out.print("\t" + disk[i][j]);
}
System.out.println();
}
}
}
'Technology > Algorithms' 카테고리의 다른 글
Algorithms / 너비 우선 탐색(Breath first search) (0) | 2009.12.05 |
---|---|
Algorithms / 깊이 우선 탐색 소스코드(Depth first search) (0) | 2009.12.05 |
Algorithms / 삽입정렬 소스코드(C) (0) | 2009.12.05 |
Algorithms / 알고리즘 수행시간 측정 코드(C) (0) | 2009.12.05 |
Algorithms / SMDA RAID Paper(논문) (0) | 2009.12.05 |