선형 검색
선형 검색은 가장 간단한 검색 알고리즘입니다. 이 알고리즘에서는 전체 배열을 순회하고 각 요소를 원하는 항목과 비교하여 일치 항목을 찾기 때문에 순차 검색이라고도합니다. 원하는 요소를 찾으면 인덱스 또는 해당 요소가 반환됩니다. 그렇지 않으면 배열을 다 사용할 때까지 계속 검색합니다. 배열 내에서 항목의 여러 항목을 찾을 수도 있습니다. 정렬되지 않은 배열 내부의 항목을 검색하는 데 주로 사용됩니다. 이진 검색보다 훨씬 느리기 때문에 실제로 사용되지 않습니다.
선형 검색 알고리즘
n
요소를 포함하는 정렬되지 않은 배열A[]
가 있다고 가정하고,X
요소를 찾으려고합니다.
-
for
루프를 사용하여 가장 왼쪽 요소부터 시작하여 배열 내부의 모든 요소를 탐색하고 다음을 수행합니다.A[i]
의 값이X
와 일치하면 색인i
를 반환합니다. (X
와 일치하는 요소가 여러 개있을 수 있으면 색인i
를 반환하는 대신 모두 인쇄 색인을 생성하거나 모든 색인을 배열에 저장하고 해당 배열을 반환합니다.)- 그렇지 않으면 다음 요소로 이동합니다.
- 배열의 마지막 요소에 있으면
for
루프를 종료합니다.
-
일치하는 요소가 없으면
-1
을 반환합니다.
선형 검색 예
(5, 3, 4, 2, 1, 6)
배열이 있다고 가정합니다.
- 사례 1 :
X
=5
를 찾고 싶습니다.
첫 번째 요소 자체는 일치하며 인덱스0
을 반환합니다. (최상의 사례)
- 사례 2 :
X
=1
을 찾고 싶습니다.
배열을 순회하고 인덱스4
에 도달하여 일치 항목을 찾고 해당 인덱스를 반환합니다. (평균 케이스)
- 사례 3 :
X
=9
를 찾고 싶습니다.
배열을 순회하지만 배열의 마지막 요소에 도달했을 때 일치 항목을 찾지 못합니다. -1
을 반환합니다. (최악의 경우)
선형 검색 알고리즘 구현
단일 일치를위한 선형 검색 알고리즘
#include <iostream>
using namespace std;
int search(int arr[], int n, int x) {
// Traverse the array sequentially
for (int i = 0; i < n; i++) {
if (arr[i] == x) return i;
}
return -1;
}
int main() {
int n = 5;
int arr[] = {2, 4, 0, 1, 9};
int x = 1;
int result = search(arr, n, x);
if (result == -1)
cout << "Element not found";
else
cout << "Element found at index: " << result;
}
다중 일치에 대한 선형 검색 알고리즘
#include <bits/stdc++.h>
using namespace std;
vector<int> search(int arr[], int n, int x) {
vector<int> ans;
// Traverse the array sequentially
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
ans.push_back(i);
}
}
return ans;
}
int main() {
int n = 9;
int arr[] = {2, 4, 0, 1, 9, 2, 1, 2, 1};
int x = 1;
vector<int> res = search(arr, n, x);
if (res.empty()) {
cout << "Element not found!!";
} else {
cout << "Element found at ";
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
}
}
선형 검색 알고리즘 복잡성
시간 복잡성
- 평균 사례
선형 검색 알고리즘의 시간 복잡도는O(n)
입니다.
- 베스트 케이스
최상의 경우 시간 복잡도는O(1)
입니다. 검색 할 요소가 배열 내부에있는 첫 번째 요소 일 때 발생합니다.
- 최악의 경우
최악의 경우는 우리가 찾고있는 요소가 배열 안에 없거나 배열의 마지막 인덱스에있을 때 발생합니다. 최악의 시간 복잡도는O(n)
입니다.
공간 복잡성
이 알고리즘의 공간 복잡성은 일치 수와 사용 된 구현에 따라 다릅니다. 일반적으로 공간 복잡도는O(1)
로 표시되지만 여러 일치하는 인덱스가 배열 내에 저장되면 더 많을 수 있습니다.
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn