Greedy algorithm

Ajisai·2023년 8월 11일
0

Algorithm

목록 보기
9/11
  • 상남자특) 일단 가봄
  • 상남자특) 뒤돌아보지 않음

Knapsack problem

  • S={item1,  item2,  ,  itemn}S=\{item_1,\;item_2,\;\cdots,\;item_n\}: 물건들의 집합
  • wiw_i: itemiitem_i의 무게
  • PiP_i: itemiitem_i의 값
  • WW: 배낭이 수용 가능한 총 무게

크게 다음의 두 종류가 있다.

  • 0-1 Knapsack problem
    물건을 쪼갤 수 없는 경우
  • fractional knapsack problem
    물건을 쪼개서 담을 수 있는 경우

0-1 knapsack problem

  • 완전 탐색으로 SS의 모든 부분집합 ss를 구한다.
  • ss의 총 무게가 WW를 초과하면 버린다.
  • 물건 개수 nn에 대해 O(2n)O(2^n)의 시간 복잡도를 갖는다.

다음을 가정한다.

S={item1,  item2,  item3}w1=25,  w2=10,  w3=10P1=10,  P2=9,  P3=5W=30S = \{item_1,\;item_2,\;item_3\}\\ w_1=25,\;w_2=10,\;w_3=10\\ P_1=10,\;P_2=9,\;P_3=5\\ W = 30

값이 비싼 물건부터 채우기

  • 최적 해: {item2,  item3}w=20,  p=14\{item_2,\;item_3\} \rightarrow w=20,\;p=14
  • 탐욕적 해: {item1}w=25,  p=10\{item_1\} \rightarrow w=25,\;p=10

가벼운 물건부터 채우기

  • 최적 해: {item2,  item3}w=20,  p=14\{item_2,\;item_3\} \rightarrow w=20,\; p=14
  • 탐욕적 해: {item2,  item3}w=20,  p=14\{item_2,\;item_3\} \rightarrow w=20,\;p=14

그러나 P1=15P_1=15라면 최적 해는 {item1}\{item_1\}이 되므로 성립하지 않게 된다.

무거운 물건부터 채우기

  • 최적 해: {item2,  item3}w=20,  p=14\{item_2,\;item_3\} \rightarrow w=20,\;p=14
  • 탐욕적 해: {item1}w=25,  p=10\{item_1\} \rightarrow w=25,\;p=10

결과적으로 correctness가 보장되지 않는다.

fractional knapsack

이건 당연히 가능
가성비(무게 당 가격)가 좋은 것부터 담다가 가방에 남은 무게에 맞춰 쪼개 담으면 된다.

profile
Java를 하고 싶었지만 JavaScript를 하게 된 사람

0개의 댓글

관련 채용 정보