Python Algorithm

Burte-Force Search (완전탐색)

영끼끼 2025. 2. 15. 15:23

✅ 완전탐색 (Brute Force Search)

완전탐색(Brute Force Search)은 주어진 문제의 가능한 모든 경우의 수를 모두 탐색하여 정답을 찾아내는 알고리즘입니다. 모든 경우를 검토하므로, 해결책을 반드시 찾을 수 있지만, 경우의 수가 많을 경우 실행 시간이 급격히 증가하는 단점이 있습니다.

완전탐색은 매우 직관적이고 간단한 접근 방식으로, 작은 문제나 계산량이 적은 경우에 유용하지만, 입력 크기가 커지면 비효율적입니다.

항목 내용
알고리즘 정의 가능한 모든 경우의 수를 다 확인하는 방식
특징 1. 간단한 구현
2. 항상 정답을 찾을 수 있음
3. 비효율적
시간 복잡도 O(n!) 또는 O(2^n), 경우의 수에 비례
적합한 경우 작은 문제나 다른 방법이 없을 때 유용
단점 입력 크기가 커질수록 시간이 급격히 증가
예시 배열의 부분집합 중 합이 특정 값을 만족하는 경우 탐색

 

특징

 

  • 간단한 구현: 가능한 모든 경우를 다 확인하는 방식이므로 구현이 매우 간단합니다.
  • 완전성: 모든 경우를 검사하기 때문에 항상 최적의 답을 찾을 수 있습니다.
  • 비효율성: 가능한 모든 경우를 다 확인하므로, 입력 크기가 커지면 성능 저하가 매우 심해질 수 있습니다.
  • 적용 가능성: 작은 문제에 적합하며, 다른 해결 방법이 없을 때 주로 사용됩니다.

 

알고리즘 동작 원리

  1. 문제 정의: 주어진 문제의 가능한 모든 경우의 수를 정의합니다.
  2. 탐색 과정: 가능한 모든 경우를 하나하나 탐색하며, 조건을 만족하는지 확인합니다.
  3. 정답 도출: 조건을 만족하는 경우를 찾아 정답을 도출합니다.

✅ 이해를 돕기 위한 코드

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)