✅ 완전탐색 (Brute Force Search)
완전탐색(Brute Force Search)은 주어진 문제의 가능한 모든 경우의 수를 모두 탐색하여 정답을 찾아내는 알고리즘입니다. 모든 경우를 검토하므로, 해결책을 반드시 찾을 수 있지만, 경우의 수가 많을 경우 실행 시간이 급격히 증가하는 단점이 있습니다.
완전탐색은 매우 직관적이고 간단한 접근 방식으로, 작은 문제나 계산량이 적은 경우에 유용하지만, 입력 크기가 커지면 비효율적입니다.
항목 | 내용 |
알고리즘 정의 | 가능한 모든 경우의 수를 다 확인하는 방식 |
특징 | 1. 간단한 구현 2. 항상 정답을 찾을 수 있음 3. 비효율적 |
시간 복잡도 | O(n!) 또는 O(2^n), 경우의 수에 비례 |
적합한 경우 | 작은 문제나 다른 방법이 없을 때 유용 |
단점 | 입력 크기가 커질수록 시간이 급격히 증가 |
예시 | 배열의 부분집합 중 합이 특정 값을 만족하는 경우 탐색 |
✅ 특징
- 간단한 구현: 가능한 모든 경우를 다 확인하는 방식이므로 구현이 매우 간단합니다.
- 완전성: 모든 경우를 검사하기 때문에 항상 최적의 답을 찾을 수 있습니다.
- 비효율성: 가능한 모든 경우를 다 확인하므로, 입력 크기가 커지면 성능 저하가 매우 심해질 수 있습니다.
- 적용 가능성: 작은 문제에 적합하며, 다른 해결 방법이 없을 때 주로 사용됩니다.
✅ 알고리즘 동작 원리
- 문제 정의: 주어진 문제의 가능한 모든 경우의 수를 정의합니다.
- 탐색 과정: 가능한 모든 경우를 하나하나 탐색하며, 조건을 만족하는지 확인합니다.
- 정답 도출: 조건을 만족하는 경우를 찾아 정답을 도출합니다.
✅ 이해를 돕기 위한 코드
def brute_force(arr, target):
n = len(arr)
# 가능한 모든 부분집합 탐색
for i in range(1 << n): # 2^n 가지 경우의 수
subset_sum = 0
for j in range(n):
if i & (1 << j): # j번째 숫자를 포함
subset_sum += arr[j]
if subset_sum == target:
print(f"Subset found: {[arr[k] for k in range(n) if i & (1 << k)]}")
arr = [1, 2, 3, 4]
target = 5
brute_force(arr, target)
'Python Algorithm' 카테고리의 다른 글
Time Complexity Calculation (시간 복잡도 계산) (0) | 2025.02.16 |
---|---|
Greedy Algorithm(그리디 알고리즘) (0) | 2025.02.15 |
Time Complexity(시간복잡도) (0) | 2025.02.15 |
Dynamic Programming(동적 계획법) (0) | 2025.02.14 |
Memoization (메모화) (0) | 2025.02.14 |