탐색 알고리즘이란 지정된 데이터들 중에 원하는 값을 찾는 알고리즘이다.
선형 탐색 알고리즘 (Linear Search Algorithm)
맨 앞이나 맨 뒤부터 순서대로 하나하나 원하는 값을 찾아보고, 원하는 값을 찾았을 때 탐색을 종료하는 탐색 방법이다.
4를 찾을 때 맨 왼쪽에 있는 1부터 시작해서 하나씩 탐색한다.
원하는 값이 리스트의 맨 마지막 원소거나, 없는 경우 n번의 탐색 과정을 거치므로 시간 복잡도는 O(N)이다.
int arr[9] = { 3,1,5,7,2,4,9,6,8 };
int arr_size = sizeof(arr) / sizeof(int);
int linearSearch(int target) {
// 찾은 값의 index 반환, 없으면 -1 반환
int result = -1;
for (int i = 0; i < arr_size; i++) {
if (arr[i] == target) {
result = i;
break;
}
}
return result;
}
이진 탐색 알고리즘 (Binary Search Algorithm)
중간 지점을 기준으로 데이터를 반씩 나눠서 탐색하는 알고리즘이다. 데이터가 미리 오름차순이나 내림차순으로 정렬되어 있는 경우에만 사용할 수 있다.
탐색의 진행 과정은 다음과같다.
- 가운데에 있는 요소를 먼저 탐색한다.
- 조건 요소가 가운데 요소보다 작은지 큰지를 보고, 탐색 범위를 좁힌다.
- 탐색 범위를 좁힌 후에 다시 한 번 가운데를 탐색하며 이 과정을 원하는 결과를 찾을 때까지 반복한다.
이진 탐색 방법은 확인하는 데이터의 개수가 횟수마다 절반씩 줄어들기 때문에 시간 복잡도는 O(logN)이다.
이 특성 때문에 탐색해야 하는 데이터의 개수나 값이 1000만 단위 이상인 경우에 자주 쓰인다.
// 구현 코드
int binarySearch(int start, int end, int target){
if (end-start<=1) {
if (target == arr[start])
return start;
return -1;
}
int result = -1;
int mid = (int)((start + end) / 2);
if (arr[mid] == target)
result = mid;
else if (arr[mid] > target)
result = binarySearch(start, mid, target);
else if (arr[mid] < target)
result = binarySearch(mid + 1, end, target);
return result;
}
해시 탐색 알고리즘 (Hash Search Algorithm)
해시 탐색은 해시 함수를 이용하여 인덱스를 지정하여 값과 인덱스를 미리 연결해두고, 요소를 탐색할 때 찾고자 하는 요소의 해시값을 이용해 데이터에 빠르게 접근하여 탐색하는 알고리즘이다.
해시 함수와 해시 테이블을 포함한 해시 탐색에 대한 더욱 자세한 설명은 아래 게시글에서 정리해두었다.
https://nueahx7674.tistory.com/43
Hashing과 Hash Table
Hashing Hashing이란 임의의 길이의 값을 해시 함수(Hash function)을 사용하여 고정된 크기의 값으로 변환하는 작업을 말한다. 해시는 다양한 목적으로 사용될 수 있지만, 주로 다음과 같은 용도로 사용
nueahx7674.tistory.com
출처
[c++] 알고리즘 개념공부 :: 탐색 (선형 탐색, 이진 탐색, 해시 탐색)
탐색 탐색은 주어진 자료들 중 원하는 조건에 해당하는 자료를 찾는 과정이다. 컴퓨터에서 탐색은 자주 이루어지므로 효율적인 방식으로 수행하는 것이 중요하다. 이전에 배웠던 '정렬'은 탐색
hini7.tistory.com
https://bba-dda.tistory.com/21
[알고리즘] 탐색 알고리즘 (선형, 이분, 해시, BST)
탐색문제? 저장된 데이터들 중에 원하는 값을 찾는 문제이다. 1. 선형 탐색 알고리즘 (Linear Search Algorithm) 맨 앞이나, 맨 뒤부터 순서대로 하나하나 찾아보는 알고리즘이다. 가장 단순하고 간단한
bba-dda.tistory.com
https://all-young.tistory.com/9
'Computer Science > 알고리즘, 자료구조' 카테고리의 다른 글
이진탐색트리와 AVL 트리 (0) | 2023.04.03 |
---|---|
Heap과 Priority Queue (0) | 2023.04.03 |
Hashing과 Hash Table (0) | 2023.04.01 |
그래프와 탐색 (0) | 2023.04.01 |
시간 복잡도 (0) | 2023.03.31 |