PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2006/05/24 23:21:47
Name 촉호파이
Subject knapsack 알고리즘의 문제?!
도둑 --> 금은방 --> 금괴가 있다 --> 훔처와라(최대한많이)
Item 1, 2, 3, 4, ..., n
Weight w1, w2, w3, w4, ..., wn
Profit p1, p2, p3, p4, ..., pn

도둑이 가져간 가방의 크기 Total W kg
문제 1. 최대한 이익,(금괴는 자를수 없다.)
문제 2. 시간이 얼마나 걸리나. 가장 짧게?


교수님이 내준 과제인데요,
저는 그냥 막연한건줄 알았는데
knapsack이라고 좀 유명한(?) 문제라고 하던데,,

막막하네요ㅠ
어떻게 푸는건지 아시는분 답변 부탁드립니다

ps.정말 과제들이 난감합니다ㅠ

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
Return Of The Panic
06/05/25 00:57
수정 아이콘
음 이건 빠르게 풀 수 있는 알고리즘이 없지 않나요?? 자를 수 있는 금괴면 빠르게 풀 수 있지만 이건 하나하나 다 대입해 봐야 되는 문제 아니었나...
항즐이
06/05/25 01:05
수정 아이콘
0/1 Knapsack은 NP problem입니다.
모든 조합을 다 넣어보는 수 밖에 없죠.
그러나 search하는 방법들간의 효율이 다르긴 합니다.
최적해를 보장하는 효율적인 search 방법이.. 기억이 안나는군요-0-
강의 노트 다시 찾아봐야겠습니다.
촉호파이
06/05/25 01:15
수정 아이콘
무슨 백트래킹 다이나믹(?) 이런걸로 푸는방법도 있다고 하고
당최먼말인지;
C(i)=(무게가 i일때 최대 이익), C(i)=max
C(i-w[k])+p[k] | k=1..n

뭐 이런 점화식으로 풀어야할 문제인가요;
에이포한장에 조리있게-_- 제출하라 그랬는데 한줄쓰기는 좀ㅠ
Return Of The Panic
06/05/25 01:39
수정 아이콘
촉호파이 // 아마 그 점화식으로 못 풀 겁니다... 그 점화식 자체가 무게가 늘어날 때 마다 n 배의 가지수가 생기므로 -_-;;
항즐이
06/05/25 02:10
수정 아이콘
제 생각에는 search algorithm중 괜찮은거 몇 가지를(혹은 하나를) 정리해 오라는 게 숙제일 듯 하네요.
실제로 푸는 건... size커지면 답 없죠.
항즐이
06/05/25 02:11
수정 아이콘
그 백트래킹은..
initial solution을 정하고,
그 solution에서 a(속한 것 중 아무거나 선택)를 빼고 아직 선택 안한 것들 중 하나인 b를 넣었을 때, 가장 해가 많이 개선되는 a,b의 조합을 골라서 바꾸는 방식으로 해를 개선해 나가는 형태입니다.

아마.. globally optimum을 보장하진 않을 건데요.
촉호파이
06/05/25 02:41
수정 아이콘
답변 감사드립니다
후 어떻게 여차저차 적긴 했는데
답일런지는 +_+;
고지를향하여
06/05/25 03:33
수정 아이콘
흠 촉호파이님이 위에 적으신거는 아마 한 금괴를 여러번 담는 에러를 범하므로 안될것 같네요 문제 조건에 금괴가 무한개 있다는건 아닌것 같고.

항즐이님 답변도 항즐이님이 말하듯이 globally optimum이 나오지 않죠

흠 물론 저도 확신은 할 수 없다만은 한번 적어보겠습니다.

f(i,y ) = i 번째 금괴까지 검색했을때 y 무게를 넣을수 있을때 최적값
f(i, y) = f(i + 1, y) y < wi 일때
f(i, y) = max
f(i+1, y), f(i + 1, y- wi) + pi
y>= wi 일때

입니다. 결국 백트래킹으로 다 탐색하는거죠
고지를향하여
06/05/25 03:36
수정 아이콘
흠 정리해서 다시.
금괴가 한개 일때
for the first decision is xi= 1.
The case xi= 1 은 only when y >= wi.

From the principle of optimality, it follows that f(i,y) = f(i+1,y-wi) + pi.
위의 두 경우를 통해
f(i,y) = f(i+1,y) whenever y < wi.
f(i,y) = max
f(i+1,y), f(i+1,y-wi) + pi
, y >= wi.
정현환
06/05/25 08:25
수정 아이콘
이 문제의 경우 fondation of algorithm 이라는 책에 branch-and-bound 라는 기법을 통한(back-tracking 하는 도중 greedy aproach를 통해 pruning을 함)방법과 dynamic programming 을 통한 방법을 통해서 시도하는 방법을 동시에 다루고 있습니다. 후자보다는 전자쪽에 비중을 많이 두어서 설명하는걸로 기억합니다.

이책은 수업교재가 아니더라도 도서관에는 왠간해선 다있으니 찾아보심이 나을꺼고요... 다른 학교는 어떤 교재를 쓰는지 궁금하네요...

뱀꼬리가 길었는데, 가방이 어느정도 작은량일때(한 10만정도?) 는 dynamic programming, 그렇지 아니할떄는 branch-and-bound 를 적절히 골라쓰면 될꺼 같네요~ 그럼...
정현환
06/05/25 08:32
수정 아이콘
그리고 knapsack 문제는 여러가지 문제 종류가 있으니깐 유의하시길~
06/05/25 13:42
수정 아이콘
가방안에 얼마나 아이템을 잘 넣어야 최고로 넣을 수 있는 가 하는 문제입니다.
결국엔 제한된 아이템 가운데 몇개를 선택하는 문제인데,
그 선택한 아이템들의 조합이 가장 최적인가를 쉽게 알 수 없는 것이 문제 입니다.
결국, 모든 경우의 수를 따져보고 그 가운데 최적의 해를 찾는 겁니다.
그 경우의 수를 모두 헤아리는 것은 바로 backtracking 입니다
일종의 트리를 그려나가는 것이죠.

여기서 핵심은 아이템의 수가 증가함에 따라 트리는 기하급수적으로 커진다는 겁니다. 비교대상이 지수형태로 증가하는 것
그런 문제가 NP 문제 입니다.

branch and bound 는 backtracking 을 기반으로 하여
트리의 전체를 검사하지 말고 일부는 좀 가려내서 조금 시간을 단축시키자는 것입니다.
하지만 대부분의 경우 여전히 time complexity 는 2^n
변함없이 시간이 오래 걸린다는 겁니다.

어쨋든 이문제는 알고리즘에서 backtracking 파트에 나오는 가장 전형적인 문제입니다.
backtracking 이란 것이 뭔가를 아셔야 합니다
이 문제는 어떤 문제인가... 특성을 이해해야 하고
과연 어느정도로 복잡한 문제인가 ?
입력(아이템 수)이 증가함에 따라 복잡도는 어떻게 증가하는 가 ?
백트래킹을 이용하여 어떤 식으로 문제를 해결해 나갈 것인가 ?
브랜치엔바운드 방법을 쓴다면 과연
가지치기(pruning)으로 어떤 방법을 채택할 것인가 ... 등등
이런 것들을 잘 조사해 가신다면 최고 점수를 받을 것 같습니다
본호라이즌
06/05/25 18:34
수정 아이콘
바보님 사실 천재 -_-b
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
17466 루나에서 TvsP 질문 이요 [12] 닉네임1969 06/05/25 1969
17465 후지 파인픽스 F11에 대한 질문 [2] Rosicky1874 06/05/25 1874
17464 컴퓨터 관련 질문 하나만요 ^^; 부산총각1408 06/05/25 1408
17463 ps2 게임에 관한 질문입니다. [7] 니어1614 06/05/25 1614
17460 제가 ief대회에 참가하는데.... [4] 서희1564 06/05/25 1564
17459 컴퓨터 부팅할때마다 오류메시지뜹니다(사진첨부) [2] Noblesse1647 06/05/25 1647
17458 소릐의 빛 읽어 보신분? 크레산도1557 06/05/25 1557
17457 동영상 다운받고 싶은게 있습니다 [2] 날고비틀고비1587 06/05/25 1587
17454 스타크래프트에 대해서 파워포인트해서 발표하려고하는데요 [8] 바람의여행기1552 06/05/25 1552
17453 가래에 대해서.. [1] 할로1787 06/05/25 1787
17452 워3에서 채널 restricted에 관한 질문 [2] 아짱1654 06/05/25 1654
17451 운동장에서 간단하게 차기 좋은, 축구공 추천좀 해주세요~ [6] 호나우딩요3077 06/05/24 3077
17450 knapsack 알고리즘의 문제?! [13] 촉호파이4339 06/05/24 4339
17448 엠피3 질문입니다..^^; [4] Be the Arabian1568 06/05/24 1568
17447 노래 추천해주세요~ 애정 중독자.1605 06/05/24 1605
17446 리얼스토리 프로게이머 KOR편 엔딩 [1] Nimphet1582 06/05/24 1582
17445 영화 [나쁜남자]에서 궁금점 두가지?? [2] 라구요2162 06/05/24 2162
17444 하동균씨 요즘 뭐하고 지네나요? [2] Daylight2116 06/05/24 2116
17443 살찌는 방법 전수 좀..ㅠ_ㅠ [18] 고등어3마리1771 06/05/24 1771
17439 [PMP] 쏘렐SV-15 vs 디.큐 i2 ?? [2] Jin's ⓚ1558 06/05/24 1558
17438 정말궁금함;; [3] 성대모사달인1594 06/05/24 1594
17437 윈도우 단축키들중에서요 ; [1] 참이슬1632 06/05/24 1632
17436 시말서에 대한 조언 [3] Zealot2944 06/05/24 2944
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로