W=16인 이 트리구조가 어떻게 나온건지 알아보자.
먼저 value값은 실제적으로 넣은 값을 넣어준다. 반면 bound 값은 현재 노드 상황에서 Item들을 쪼갤 수는 없지만 무게에 맞춰 쪼개서까지 가방에 넣을수 있다고 했을때의 최대 가치 값이다. 이걸 기억하면서 접근해보자.
이제 순서대로 계산을 해보자.
(1,1)은 Item1을 넣었을 경우이다.
이경우에는 40+30+40+30+50*9/10 = 115로 바운드 값을 줄 수 있다.
그리고 1만 넣어주었으므로 value = 40 w = 2이다.
Item1을 넣지 않았을 경우이다.
이때 bound는 Item1을 제외하고 생각해야한다. Item2,3을 합쳐도 w가 15이므로 item4를 무게1 만큼(1*10/5) 집어넣을수 있다.
따라서 30+50+(1*10/5) = 82이다.
Item 1을 넣고 2도 넣었을 경우이다.
1,2를 모두 넣었으므로 (1,1)노드처럼 결국 item3을 w를 9만큼만 넣을 수 있다. 따라서
bound 값이 115가 나오고 실제적으로는 1과 2를 넣었으므로 value는 70 w는 7이다.
이런식으로 순서대로 진행하면 된다.
참고로 BFS는 queue로 구현하기 때문에, 예를들어 (3,2)의 bound가 80이고, (3,3)의 maxprofit이 90이기 때문에 (3,2)가 분기하면 안되는거 아닌가 하겠지만, (3,2)는 먼저 일어나서 미래의 일을 예측할수 없다. 따라서 분기는 하고 다음번에 nopromising하게 되어 분기를 멈춘다.
위에 breadth-first search처럼 기본작동방식은 같다. 다만, 전체 확장되지 않은 노드 중에서 가장 유망한 즉, bound값이 가장 큰 노드를 확장함으로써 빠르게 결과를 도출할 수 있게 한다.