Tags
- update
- Article & User
- migrations
- 쟝고
- ORM
- M:N
- drf
- SQL
- 스택
- delete
- Queue
- N:1
- 그리디
- count
- Django
- create
- stack
- regexp
- DB
- 트리
- 이진트리
- Vue
- 뷰
- 백트래킹
- 큐
- Tree
- 통계학
- outer join
- distinct
- 완전검색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
선형 탐색(Linear Search) 본문
선형 탐색
"배열이나 리스트에서 처음부터 끝까지 하나씩 확인하면서 원하는 값을 찾는 탐색 알고리즘"
- 순차적으로 모든 요소를 확인하는 방식
- 시간복잡도: O(n) (최악의 경우, 모든 요소를 확인해야 함)
- 구현이 쉽지만 데이터 크기가 커질수록 비효율적
선형 탐색 동작 원리
- 리스트(배열)의 첫 번째 요소부터 순차적으로 확인
- 찾고자 하는 값이 나오면 탐색 종료
- 끝까지 찾지 못하면 "없음" 반환
# Pseudo Code
FUNCTION LinearSearch(arr, target)
FOR i FROM 0 TO length(arr) - 1 DO
IF arr[i] == target THEN
RETURN i # 찾으면 인덱스 반환
END FOR
RETURN -1 # 찾지 못하면 -1 반환
END FUNCTION
# Full Code
def linear_search(arr, target):
for i in range(len(arr)): # 리스트 처음부터 끝까지 확인
if arr[i] == target:
return i # 찾으면 해당 인덱스 반환
return -1 # 찾지 못하면 -1 반환
# 테스트
arr = [3, 8, 2, 7, 5, 6]
target = 7
result = linear_search(arr, target)
print(f"찾는 값 {target}의 위치: {result}" if result != -1 else "값을 찾을 수 없음")
선형 탐색의 시간복잡도
경우 | 시간복잡도 |
최선 (첫 번째 요소에서 찾음) | O(1) |
평균 (중간쯤에서 찾음) | O(n/2) ≈ O(n) |
최악 (마지막에서 찾거나 없음) | O(n) |
✅ 데이터 크기가 커질수록 성능이 낮아짐 (O(n))
✅ 정렬되지 않은 데이터에서도 사용 가능
선형 탐색의 장단점
장점
- 구현이 매우 간단함
- 정렬이 필요하지 않음
- 작은 데이터에서는 빠르게 동작 가능
단점
- 데이터 크기가 커질수록 느려짐 (O(n))
- 정렬된 데이터에서는 이진 탐색(O(log n))이 더 효율적
결론
선형 탐색은 단순하고 정렬이 필요 없지만, 큰 데이터에서는 비효율적이므로 이진 탐색과 비교해서 적절히 선택해야 한다.
'데이터 사이언스 > 알고리즘' 카테고리의 다른 글
깊이 우선 탐색 (DFS, Depth-First Search) (0) | 2025.02.23 |
---|---|
이진 탐색(Binary Search) (0) | 2025.02.22 |
퀵 정렬 vs 병합 정렬 vs 힙 정렬 (0) | 2025.02.20 |
Heapify (0) | 2025.02.19 |
완전 이진 트리 (Complete Binary Tree) (0) | 2025.02.18 |