오늘은 선형검색에 대해 알아보자
주소록을 검색한다고 가정 했을 때의
* Searching 방식 :
* 1. 국적인 한국 사람을 찾는다.
* 2. 나이가 21세 이상 27세 미만인 사람을 찾는다.
* 3. 찾으려는 이름과 비슷한 이름의 사람을 찾는다.
* 데이터의 집합이 있을 때 검색만 하면되지! 라고 생각한다면 검색에 사용할 알고리즘은 계산 시간이 짧은 것을 선택 하면 되지만 데이터가 추가/삭제 등이 자주되는 경우라면, 검색 이외의 작업에 소요되는 비용을 판단해야 한다.
따라서 필요한 요소를 평가하여 알고리즘을 선택한다.
* 1. 배열 검색 ( 검색은 빠르지만, 데이터 추가시에는 시간적인 비용이 많이 든다)
* 2. 선형 리스트 검색
* 3. 이진트리 검색
* 용도와 목적, 실행속도, 자료 구조 등을 고려하여 알고리즘을 선택한다.
//선형검색
/*검색 알고리즘
* 주소록을 검색한다고 가정
*
* Searching 방식 :
* 1. 국적인 한국 사람을 찾는다.
* 2. 나이가 21세 이상 27세 미만인 사람을 찾는다.
* 3. 찾으려는 이름과 비슷한 이름의 사람을 찾는다.
*
*
*
* 데이터의 집합이 있을 때 검색만 하면되지! 라고 생각한다면 검색에 사용할 알고리즘은 계산 시간이 짧은 것을 선택하면 되지만
* 데이터가 추가/삭제 등이 자주되는 경우라면, 검색 이외의 작업에 소요되는 비용을 판단해야 한다.
* 프 요소를 평가하여 알고리즘을 선택한다.
* 1. 배열 검색 ( 검색은 빠르지만, 데이터 추가시에는 시간적인 비용이 많이 든다)
* 2. 선형 리스트 검색
* 3. 이진트리 검색
*
* 용도와 목적, 실행속도, 자료 구조 등을 고려하여 알고리즘을 선택한다.
*
* */
//1. 메서드 (seqSearchEx) : 배열 a의 처음부터 끝까지/ n개의 요소를 대상으로, key값을 선형검색하고, 검색한 요소의 인덱스 반환
// 또한 값이 key인 요소가 여러개 존재할 경우 반환값은 검색과정에서 처음 발견한 요소의 인덱스가 된다.
// 값이 key인 요소가 존재하지 않으면, -1 을 반환한다.
static int seqSearchEx(int [] a , int n, int key) { // 테이블, n개 요소, 파라미터 값
int i = 0;
while (true) {
if(i==n)
return -1; //검색 실패(-1을 반환)
if (a[i] == key)
return i ; //검색성공 (인덱스반환)
i++;
}
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
//1. 배열 채우기
System.out.println("요솟수:");
int num = stdIn.nextInt();
int[] x = new int[num];
for(int i = 0 ; i < num; i++) {
System.out.println("x["+i+"]:");
x[i] =stdIn.nextInt();
}
//2. 검색값 입력
System.out.println("검색할 값 :");
int ky = stdIn.nextInt();
//3. 검색 메서드 실행
int idx = seqSearchEx(x, num, ky);
//4. 결과 값 반환
if(idx == -1)
System.out.println("그 값의 요소가 없습니다.");
else
System.out.println(ky+"는 x ["+idx+"] 에 있습니다. " );
}
}
'1. 코딩테스트' 카테고리의 다른 글
[자료구조와 알고리즘] 2. 보초법 (1) | 2022.02.17 |
---|---|
[자료구조와 알고리즘] 2. 이진검색 (0) | 2022.02.16 |