검색 알고리즘
데이터 집합에서 원하는 값을 가진 요소를 찾아내는 알고리즘
배열 검색
- 선형 검색 : 무작위로 늘어놓은 데이터 모임에서 검색을 수행
- 이진 검색 : 일정한 규칙으로 늘어놓은 데이터 모임에서 검색을 수행
- 해시법 : 추가, 삭제가 자주 일어나는 데이터 모임에서 검색을 수행
선형 검색[linear search]
원하는 키 값을 갖는 요소를 만날 때까지 맨 앞부터 순서대로 요소를 검색하게 되는데, 이를 선형 검색 또는 순차 검색 알고리즘이라고 한다.
[검색의 종료 조건]
1) 검색할 값을 발견하지 못하고 배열/리스트의 끝을 지나간 경우 - 검색 실패
2) 검색할 값과 같은 요소를 발견한 경우 - 검색 성공
■ 선형 검색 알고리즘
배열 a의 처음부터 끝까지 n개의 요소를 대상으로 값이 key인 요소를 선형 검색하고 검색한 요소의 인덱스를 반환
key인 요소가 존재하지 않을 경우 -1를 반환
public class SeqSearch {
public static int seqSearch(int[] a, int n, int key){
int i = 0;
while (true){
if(i == n)
return -1; //검색 실패
if(a[i] == key)
return i;
i++;
}
}
public static int seqSearch(int[] a, int key){
//for문을 통한 배열 탐색
for(int i=0; i<a.length; i++){
if(a[i] == key)
return i;
}
return -1;
}
public static void main(String[] args) {
int[] a = new int[]{22, 8, 55, 32, 120, 50,70};
int key = 55;
int idx = seqSearch(a, a.length, key);
int idx2 = seqSearch(a, key);
if(idx == -1){
System.out.println("그 값은 요소에 없습니다.");
}else{
System.out.println(key + "는/은 " + idx + "에 있습니다.");
System.out.println(key + "는/은 " + idx2 + "에 있습니다.");
}
}
}
■ 보초법
검색 알고리즘의 종료 조건을 반으로 줄일 수 있는 방법으로 보초법을 활용한다.검색하기 전에 검색하고자 하는 키 값을 맨 끝 요소에 저장을 하게 되면 위의 종료 조건 1을 수행하지 않아도 되므로 검사 비용을 절감할 수 있다.
public static int seqSearchSen(int[] a, int n, int key) {
int[] x = new int[n + 1];
for (int i=0; i<x.length; i++) {
x[i] = a[i];
}
x[n+1] = key; //보초를 추가
int j = 0;
while (true) {
if (x[j] == key)
break;
}
j++;
return j == n+1 ? -1 : j;
}
'Algorithm' 카테고리의 다른 글
[기본 자료구조] 링 버퍼[ring buffer] (0) | 2022.01.03 |
---|---|
[기본 자료구조] - 큐 (0) | 2022.01.03 |
기본 자료구조 - 스택[stack] (0) | 2021.12.29 |
검색 알고리즘 - 이진 검색 (0) | 2021.12.29 |
기본 자료구조 - 배열 (0) | 2021.12.28 |