이것은 동적 프로그래밍 문제입니다. 단순함을 위해 모든 이익이 음수가 아니라고 가정합시다.
'또는 나중에 j
보다 작업 일 및 (아래로 재귀 적으로)에 의존 모든 것들을'초 일, 또는 -1
그건 불가능 인 경우 i
일정에서 만들 수있는 최대 이익으로 F(i, j)
정의 . 종속성 i
의 i_1
위한 -1
이다 -1
F(i_1, j+1)
경우
그럼 F(i, j)
이다. 그렇지 않은 경우 (f(i, j)
+ F(i_1, j+1)
) 또는 F(i, j+1)
중 큰 값입니다.
그리고 대답은 모든 작업 i
에 대해 F(i, 0)
의 합계입니다.
(이 문제가 NP-하드 될 것 무제한 기계없이 ...) 여기
각 절은 부정 모든 조건이 곳 MAX-SAT 방정식을 모델링 문제를 사용하는 방법의 예입니다 또는 모든 조건이 무효화됩니다.
우리는 4 개의 부울 변수 A
, B
, C
및 D
이 있다고 가정합니다. 예를 들어 방정식 (A && B) || (!A && !C) || (!B && !C && !D) || (C && D)
에 대한 최대 만족 가능성을 가정한다고 가정합니다. (!
이 아닌, &&
수단, 및 ||
수단 또는를 의미 곳.)
는 이제
J1
이
J2
전에 실행하는 작업에 대한 표기
J1 > J2
을 사용하자.
J1 > (J2, J3)
은
J1) is a dependency for both
J2
and
J3`을 의미하도록 괄호로 묶어서 배포하십시오.
이제 불리언 모델을 작성하여 12 가지 작업을 설정해 보겠습니다. A1 > A2 > A3
, B1 > B2 > B3
, C1 > C2 > C3
및 D1 > D2 > D3
. 그런 다음 작업 A2, B2, C2, D2
은 시간 2
또는 3
에서 발생해야하며 부울 A
은 "A2
시간 2에 발생합니다."진술입니다. 그리고 다른 불리언들도 마찬가지입니다.
이들 작업은 모두 그들이 실행 시간에 관계없이 1
의 이익을 얻습니다. 우리는 불린만큼 많은 일자리를 3 배로 도입했지만, 지금까지 이것은 간단합니다.
이제 절에 대한 작업을 추가해 보겠습니다. 이들 각각의 작업은 2
또는 3
초 단위로 실행되는 경우 11
의 이익을 가지며 그렇지 않은 경우 1
입니다. 그러므로 최대 절 이익을 얻을 수있는 부울에 대한 설정을 찾으면 최대 이익에 도달하게됩니다.
(A2, B2) > J1
(A && B)
의 진상을 모델링하십시오.
J2 > (A2, C2))
(!A && !C)
의 진실을 모델링합니다.
J3 > (B2, C2, D2)
(!B && !C && !D)
의 진실을 모델링합니다.
(C2, D2) > J4
(C && D)
의 진실을 모델링합니다.
이 작업은 추가 된 작업 수가 절의 수와 같은 간단한 직선 변환입니다.
그래서 우리는 스케줄링을 통해 MAX-SAT 문제를 모델링합니다. 그러나 우리는 그것들 모두를 모델링 할 수 없습니다. 특히 우리는 (A && !B)
과 같은 부정적인 부정을 가진 절을 모델링 할 방법이 없습니다. 따라서 MAX-SAT가 NP 하드 일지라도이 제한된 버전은 가능하지 않을 수 있습니다. 그러나 MAX-SAT의 다른 제한된 버전들, 예를 들어 MAX-2SAT는 NP 하드 인 경향이 있으며, 이것이 또한 내 직감입니다.
그러나 직감을 증명하거나 반증하기 위해서는보다 적절한 포럼에서 질문해야합니다. https://cs.stackexchange.com/처럼.
작업이 1 초 내에 끝나나요? 즉, 작업이 시간 j에 스케줄 된 경우 종속 작업은 시간 j + 1에서 실행될 수 있습니까?우리가 모든 것을 미리 안다면, 솔루션을 무력화시키는 것이 항상 가능하지만, 뭔가 더 나은 것이 있는지 묻고있는 것입니다. – dohashi
예, 모든 IMMEDIATE 종속 작업은 j + 1 초 시간에 스케줄 될 수 있습니다. naive brute force는 매우 비효율적이며이 문제에 대해 기하 급수적입니다. – v78
아마 다음과 같은 사설을 읽을 수 있습니다. http://www.codechef.com/DEC14/problems/RIN –