보초법 sentinel method
2019. 5. 20. 09:24ㆍ컴퓨터공학기초 및 이론/자료구조&알고리즘
선형검색의 종료조건 두 가지를 검색을 반복할 때 마다 판단하는 것을 효율적으로 줄이기 위한 개선방법.
검색하고자 하는 키 값을 기존 배열의 맨 끝 자리에 추가로 저장하고 이를 보초(sentinel)라고 부른다. 이는 검색할 때
원하는 키 값이 없을 경우 배열의 마지막에 키 값을 보초로 세워두어 선형검색의 종료조건 중 하나인 [검색할 값을 발견하지 못 하고 배열의 끝을 지나가는 경우]를 없애는 것이다.
따라서 보초법을 사용하게 되면 반복문의 종료 판단 횟수를 2회에서 1회로 줄인다.
public class SeqSearchSen {
static int seqSearchSen(int[] a, int n, int key){
int i = 0;
a[n] = key; //보초를 추가
//배열 요소를 순서대로 검색, 보초가 있기 때문에 if는 하나의 조건만 필요
while (true){
if (a[i]== key)
break;
i++;
}
//변수 i 값이 n과 같을 경우 찾은 값이 보초값이므로 검색 실패임을 나타내는 -1을 리턴
return i == n ? -1 : i;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("요솟수:");
int num = stdIn.nextInt();
int[] x = new int[num+1]; //요솟수가 num+1인 배열
for (int i = 0; i< num; i++){
System.out.print("x["+i+"]:");
x[i] = stdIn.nextInt();
}
System.out.print("검색할 값:"); //키 값 입력
int ky = stdIn.nextInt();
int idx = seqSearchSen(x, num, ky);// 배열 x에서 값이 ky인 요소를 검색
if(idx == -1)
System.out.println("그 값의 요소가 없습니다.");
else
System.out.println(ky+"은(는) x["+idx+"]에 있습니다.");
}
'컴퓨터공학기초 및 이론 > 자료구조&알고리즘' 카테고리의 다른 글
큐(queue)와 링 버퍼(ring buffer) 연결 리스트 (Linked list) (0) | 2019.05.27 |
---|---|
복잡도와 점근표기법(빅오표기법) (0) | 2019.05.21 |
이진 탐색 (binary-search) (0) | 2019.05.21 |
선형검색(순차검색) linear search, sequential search (0) | 2019.05.20 |
배열 의 정의, 복제, 최대값 구하기 (0) | 2019.05.16 |