728x90
728x90
연습문제
n개의 항목집합 S의 각 항목 i는 양의 이득 bi와 양의 무게 wi로 이루어졌다. 주어진 무게 W를 넘지 않으면서 최대 이득이 되는 S의 부분집합을 계산하는 효율적인 탐욕 알고리즘 Fractional-knapsack(S,W)을 작성하라
Alg fractionalKnapsack(S,W)
1. for dach i to S{
xi = 0
vi = bi/wi //무게에 따른 효율
}
2. w = 0
3. Q = a priority queue contaning all the items of S using vi as keys
4. while (w < W){
i = Q.removeMin() //왜 remove min인진 모르겠지만 고효율 부터 뽑아서 넣는다.
xi = min(wi,W-w) // 무게가 넘치면 안쓴다.
w = w + xi
}
5. return
S = {a,b,c,d,e,f,g}를 다음과 같은 (이득, 무게)를 가진 개체들의 모음이라 하자. a:(12,4), b:(10,6), c:(8,5), d:(11,7), e:(14,3), f:(7,1), g:(9,6)
- 배낭이 최대 18의 무게를 지탱할 수 있다고 가정하고 부분적 배낭 문제(물체를 조각낼 수 있다 > 가장 효율 좋은 것 순서대로 넣으면 되는 그리드 문제)라는 전제 하에 S에 대한 최적해를 구해라
- f,e,a,b, 4 of c로 총 무게 18, 총 이득 49.4이다.
- 이 문제를 0-1 배낭 문제(물건을 분해할 수 없어서 무게를 생각하고 넣어야 된다.)로 전제하고 최적해를 다시 구하라
- f,e,a,b로 총 무게 18, 총 이득 43이다.
728x90
'알고리즘 > 공부' 카테고리의 다른 글
알고리즘 기말고사 풀 버전 (퀵정렬 ~ 최단경로) (1) | 2023.12.13 |
---|---|
알고리즘 기말 요약 (0) | 2023.12.12 |
방향그래프 연습문제 (0) | 2023.12.10 |
최단경로 요약 (0) | 2023.12.10 |
최소 신장 트리 요약 (0) | 2023.12.10 |