되추적 (Backtracking) 5.4 부분집합의 합 구하기 5.7 0-1 배낭채우기 문제
Download
Report
Transcript 되추적 (Backtracking) 5.4 부분집합의 합 구하기 5.7 0-1 배낭채우기 문제
되추적
(Backtracking)
5.4 부분집합의 합 구하기
5.7 0-1 배낭채우기 문제
Sum-of-Subsets problem
문제
개의 양의 정수 w_i
양의 정수 W
목표: 합이 W가 되는 모든 부분집합들을 찾는다
n
2016-05-23
알고리즘 강의 슬라이드 5
2
2016-05-23
알고리즘 강의 슬라이드 5
3
2016-05-23
알고리즘 강의 슬라이드 5
4
2016-05-23
알고리즘 강의 슬라이드 5
5
어떤 마디가 유망한가?
가중치를 증가하는 순으로 정렬
i 수준에서 남아있는 가장 가벼운 무게
weight를 수준 i의 마디까지 포함된 무게의 합
w_(i+1)은
수준 i의 마디가 유망하지 않은 조건
weight
+ w_(i+1) > W
weight + total < W
total: 남은 아이템들의 총 무게
2016-05-23
알고리즘 강의 슬라이드 5
6
2016-05-23
알고리즘 강의 슬라이드 5
7
알고리즘 5.4 부분집합의 합 구하기를 푸는 되추적 알고리즘
2016-05-23
알고리즘 강의 슬라이드 5
8
복잡도
알고리즘 5.4가 검색하는 상태 공간 트리에서
마디의 개수
1
+ 2 + 2^2 + … + 2^n = 2^{n+1} - 1
2016-05-23
알고리즘 강의 슬라이드 5
9
5.7.1 0-1 배낭채우기 문제를
푸는 되추적 알고리즘
목표
총
무게가 W를 초과할 수 없다는 제약하에서 총 값
어치가 최대가 되는 아이템의 집합을 구한다
최적화 문제(optimization problem)
검색이
완전히 끝날 때까지 마디가 해답을 포함하
고 있는지 알지 못한다는 뜻
어떤 마디에서 지금까지의 최고 해답보다 값어치의
총액이 크다면, 최고 해답의 값을 바꾼다.
2016-05-23
알고리즘 강의 슬라이드 5
10
최적화의 경우인 일반 되추적 알고리즘
best: 지금까지 찾은 최고 해답의 값
value(v): 마디 v에서 해닶의 값
2016-05-23
알고리즘 강의 슬라이드 5
11
어떤 마디가 유망하지 않는가?
배낭에 더 이상 아이템을 넣을 공간이 남아있
지 않은 경우
: 어떤 마디까지 넣은 아이템들의 무게의 합
weight >= W
weight가 W와 같은 경우조차 유망하지 않다.
weight
2016-05-23
알고리즘 강의 슬라이드 5
12
유망하지 않은 두 번째 경우
배낭 빈틈없이 채우기 문제에서의 제한을 사용
Parameter
profit
: 그 마디까지 넣은 아이템의 값어치의 합
weight: 그 아이템들의 무게의 합
그 마디에서 팽창하여 얻을 수 있는 값어치
의 상한(upper bound)
totweight: W를 초과하지 않는 범위의 아이템들의
무게
bound:
2016-05-23
알고리즘 강의 슬라이드 5
13
2016-05-23
알고리즘 강의 슬라이드 5
14
배낭 빈틈없이 채우기를 적용하여 단위 무게
당 이익이 큰 것부터 작은 순으로 정렬
2016-05-23
알고리즘 강의 슬라이드 5
15
2016-05-23
알고리즘 강의 슬라이드 5
16
알고리즘 5.7 0-1 배낭채우기 문제를 푸는 되추적 알고리즘
void knapsack (index i, int profit, int weight)
2016-05-23
알고리즘 강의 슬라이드 5
17
2016-05-23
알고리즘 강의 슬라이드 5
18
알고리즘 5.7을 적용하는 방법
2016-05-23
알고리즘 강의 슬라이드 5
19
복잡도
2016-05-23
알고리즘 강의 슬라이드 5
20
고찰 사항
0-1 knapsack problem
0-1 배낭채우기 문제를 푸는 동적 계획법
5.7.1 0-1 배낭채우기 문제를 푸는 되추적 알고리즘
알고리즘 6.1 0-1 배낭채우기 문제를 푸는 분기한
정 가지치기 너비우선검색 알고리즘
알고리즘 6.2 0-1 배낭채우기 문제를 푸는 분기한
정 가지치기 최고우선검색 알고리즘
4.5.3
2016-05-23
알고리즘 강의 슬라이드 5
21