2011-03-20 1 views
4

연습 질문의 경우 0/당신이 i = 16을 선택하면, n = 10을위한 .. 즉0/1 배리에이션 해결하기 배낭 (각 항목은 여러 소스 중 하나에서 선택 가능)

,

S1={(d_k, b_k) | 1 ≤ k ≤ n}, 
S2={(d_k, b_k) | n + 1 ≤ k ≤ 2n}, 
S3={(d_k, b_k) | 2n + 1 ≤ k ≤ 3n}, 
S4 = {(d_k, b_k) | 3n + 1 ≤ k ≤ 4n} 

1 배낭 문제는 ... 기본적으로 각 항목은 4 가지 소스에서 온다, 그 항목은 소스의 한에서 취할 수 있습니다 넣으십시오. 즉, 선택하지 말아야합니다. 6, 26 or 36 ...

이 문제를 해결하고 반복 방정식을 고안하는 데 도움을 줄 수 있습니까?

답변

8

우리는 4N 요소를 가지고있다.

표기법

  • V[k] - 소자 (k)의 값 (1 < = K < = 4N)
  • W[k] - 소자 (k)의 가중치 (1 < = K < = 4N)
  • B - 바운드
  • f(k,B) - 바운드가 B이고 최적 해의 값은 다음과 같습니다. 4k 요소.

    1. 는 배낭에 k 번째 요소를 삽입하지 : k 번째 요소에 대해

우리는 다섯 개 가지 선택이있다. 이 제약 하에서, 최적 솔루션의 값은 f(k-1,B)입니다. 왜? 왜냐하면 우리는 k-1 개의 더 많은 원소를 가지고 있고 그 경계는 여전히 B이기 때문입니다.

  • S1에서 k 번째 원소를 취합니다. 이 제약 조건 하에서 최적 솔루션의 값은 V[k] + f(k-1, B - W[k])입니다. 왜? 우리는 k 번째 원소에 대해 V [k]를 얻었고 W [k]를 허리에 묶었습니다. 나머지 요소들에 대해서는 f (k-1, B - W [k])를 얻습니다.
  • S2에서 k 번째 요소 가져 오기. 이전과 동일한 로직을 사용하여 해당 제약 조건에서 최적 솔루션의 값이 V[k+n] + f(k-1, B - W[k+n])임을 확인하십시오.
  • S3에서 n 번째 요소를 가져옵니다. 최적 : V[k+2n] + f(k-1, B - W[k+2n]).
  • S4에서 n 번째 요소 가져 오기.최적 : V[k+3n] + f(k-1, B - W[k+3n]).
  • 귀하의 목표는 f를 최대화하는 것입니다. 따라서 재발 방정식은 다음과

    f(k, B) = 
        max { 
         f(k-1,B),      //you don't take item n 
         V[k] + f(k-1, B - W[k]), //you take item k from S1 
         V[k+n] + f(k-1, B - W[k+n]), //you take item k from S2 
         V[k+2n] + f(k-1, B - W[k+2n]), //you take item k from S3 
         V[k+3n] + f(k-1, B - W[k+3n]) //you take item k from S2 
        } 
    

    초기 조건을 찾기 위해 무엇 왼쪽입니다.

    +0

    이것은 아주 좋은 명확한 대답이지만, 나는 그에게 (또는 그녀)를위한 * Wonder *의 숙제를하기에는 너무 멀었다 고 생각한다. 덧붙여 말하자면, * n *을 사용하여 "추가 할 항목 수"와 "항목 수"를 모두 의미하는 버그가 있습니다. 예를 들어, "* 3n"과 같은 * k *는 "k + 2n"이어야합니다. –

    +0

    고마워요, 훌륭한 대답 –

    +0

    @가 레스 : 내 버그를 찾아 주셔서 감사합니다. 내 대답을 편집하고 수정했습니다. 원더의 숙제 해결에 관해서 : 나는 그 어려운 부분에 대한 최종 답을 실제로 밝혀 냈습니다. 그러나 그 뒤에있는 논리를 완전히 설명 한 후에야 말입니다. 그는 내 대답의 마지막 부분을 읽지 않고 해결책을 제시 할 수있었습니다. 그래도 나는 그가 그 일을 올바르게 할 수 있도록 최종 결과를주는 것이 좋다고 생각한다. 나는 그가 생각에 시간을 보내고 그는 단지 그 해결책을 베낀 것이 아니라고 믿습니다. – snakile

    3

    표준 0/1 배낭 문제 : 각 항목에 대해 사용자가 가져 가지 않거나 사용자가 수행하지 않습니다.

    귀하의 문제 : 각 항목에 대한 , 중 당신이 그것을하지 않거나 소스 1에서 그것을 가지고, 또는 ... 또는 당신이보고 이제 4

    소스에서 가져 0/1 배낭 문제에 대한 일반적인 동적 프로그래밍 알고리즘과 반복 관계. 재발 관계에있는 RHS의 각 비트가 어디서 오는 지 살펴보십시오. 위의 첫 번째 문장에 해당합니다. 위의 두 번째 구문을 대신 사용하십시오.

    (나는 조금 애매되고있어 경우,이 숙제는 당신이 :-)를 배우는 의미있는 때문입니다.)

    +0

    예, 답장을 보내 주셔서 감사합니다. 예. 이걸로 배워야합니다. :) –

    +0

    그럼 정말 고집하지 않는 한 * snakile * (우수) 답변을 무시하는 것이 좋습니다. :-) –

    관련 문제