백트래킹 알고리즘: Subset Sum 문제 (Backtracking algorithm)
코딩 2025. 4. 17. 16:32학습 : Chan-Su Shin (신찬수): 알고리즘 - Backtracking - Subset Sum
https://www.youtube.com/watch?v=SSSTVXj_JNk&list=PLsMufJgu5932XYejsOwcUDJ2F75f56nrl&index=39
SubsetSum1(A, S):
if S == 0: return True
elif S < 0: return False
else: # 0 < S
pick z from A ※ A[i]
with = SubsetSum1(A - {z}, S - z) # z를 뽑은 경우
wout = SubsetSum1(A - {z}, S) # z를 안뽑은 경우
return with or wout
SubsetSum2(A, i, S): # {A[0], … A[i]} → S가 되는 Subset
if S == 0: return True
elif S < 0 or i == -1: return False # A가 공집합이거나 S가 만족하지 않을 때
else:
with = SubsetSum2(A, i-1, S - A[i])
wout = SubsetSum2(A, i-1, S)
return with or wout
SubsetSum(k): # x[k]
current_sum = 현재까지 선택된 A의 값의 합
if k ≥ len(A): # x[0] ... x[n-1] 까지 결정
└ if current_sum == S : print(x) ※ 해 출력
else: # x[k] 결정
x[k] = 1
SubsetSum(k + 1)
x[k] = 0
SubsetSum(k + 1)
SubsetSum(k): # x[k]
current_sum = 현재까지 선택된 A의 값의 합
if k ≥ len(A): # x[0] ... x[n-1] 까지 결정
└ if current_sum == S : print(x) ※ 해 출력
else: # x[k] 결정
if current_sum + A[k] <= S:
x[k] = 1
SubsetSum(k+1)
x[k] = 0
SubsetSum(k+1)
백트래킹 알고리즘: 미로문제, Nqueens 문제 (Backtracking algorithm) (0) | 2025.04.16 |
---|---|
최단경로 문제: Dijkstra 알고리즘 (0) | 2025.04.04 |
최단경로 문제: Bellman Ford 알고리즘 (0) | 2025.04.03 |
그래프 자료구조: DFS, DAG, 위상정렬 (0) | 2025.04.02 |