선형 탐색(Linear Search)은 주어진 데이터에서 원하는 데이터를 찾는 가장 기본적인 방법으로, 순차 탐색(Sequential Search)이라고도 한다. 주어진 데이터가 정렬되어 있지 않는 경우에도 사용할 수 있지만 모든 데이터를 다 확인할 수도 있기 때문에 시간복잡도가 $O(n)$으로 다른 빠른 탐색에 비해 상대적으로 느리다는 단점이 존재한다.
다음은 $n$개의 원소로 이루어진 배열 $a$에서 $k$라는 값을 찾는 코드의 일부이다. 인덱스는 $1$-based이다.
int pos = 0;
for(int i = 1; i <= n; i++)
{
if(a[i] == k)pos = i;
}
pos는 position을 의미하며 인덱스를 저장하는 식별자로 많이 사용된다.
위의 코드는 매우 간단하며 다양하게 응용할 수 있다. 주어진 데이터의 최대값, 최소값을 찾거나 중복된 원소가 포함된 데이터에서 원하는 데이터의 위치를 모두 찾는 등, 반복문 내부의 조건문을 변형하여 다양한 작업을 할 수 있다. 하지만 탐색 자체를 많이 실행해야 할 경우 선형 탐색은 효율성이 너무 떨어질 수 있다. 이때 데이터가 정렬되어 있는 등 특수한 경우에 해당한다면 다음에 나올 더 빠른 정렬을 이용할 수 있다.
'Algorithm > C. Sortings & Search' 카테고리의 다른 글
39. Ternary Search (2) | 2021.05.08 |
---|---|
38. Binary Search (0) | 2021.04.14 |
36. Other Sorting Method (0) | 2021.03.28 |
35. Radix Sort (0) | 2021.03.13 |
34. Counting Sort (0) | 2021.03.01 |