이 문제점을 고려하십시오. 유한 세트 목록이 을 최소화 하는 순서 를 .| s 1 | + | s 1 ∪ s 2 | + | s 1 ∪ s 2 ∪ s 3 | + …
알려진 알고리즘이 있습니까? 복잡성은 무엇입니까? 나는 효율적인 최적의 알고리즘을 아직 생각할 수 없었지만 NP-Hard에서도 분명하지 않습니다.
이 문제점을 고려하십시오. 유한 세트 목록이 을 최소화 하는 순서 를 .| s 1 | + | s 1 ∪ s 2 | + | s 1 ∪ s 2 ∪ s 3 | + …
알려진 알고리즘이 있습니까? 복잡성은 무엇입니까? 나는 효율적인 최적의 알고리즘을 아직 생각할 수 없었지만 NP-Hard에서도 분명하지 않습니다.
답변:
이 문제는 실제로 스케줄링 문제와 관련이 있습니다. "가중 완료 시간을 최소화하기위한 우선 순위 제한 스케줄링". 문제는 다음과 같습니다. 각 작업에 처리 시간 (p)과 가중치 (w)가 있고 작업에 우선 순위 그래프가 정의되어있는 작업 세트가 제공됩니다. 목표는 우선 순위 제한 조건이 안정화되고 가중 완료 시간의 합계가 최소화되도록 단일 시스템 (비 선점)에서 작업을 스케줄하는 것입니다. 문제는 NP-hard이며 2 근사치가 알려져 있습니다.
최소 누적 합계 문제에서 우선 순위 제한 스케줄링 문제로 감소 : 각 요소에 대해 p = 1, w = 0으로 작업을 작성하십시오. 또한 각 세트에 대해 p = 0, w = 1로 작업을 작성하십시오. 우선 순위 그래프를 작성하십시오. 요소 이면 e 가 S 보다 먼저 예약되어야합니다 . 스케줄링 문제 의이 특별한 경우도 NP-hard라고 생각합니다.
다음 링크를 참조하십시오
1) http://www.win.tue.nl/~gwoegi/papers/precsum.pdf
2) http://web.engr.illinois.edu/~chekuri/papers/dam_sched.ps
Shalmoli Gupta는 이미 일반적인 문제가 NP-Hard라고 설명 했으므로 특수 사례가 다항식으로 풀 수 있는지 조사하기로 결정했습니다. 결국, 나는 트리를 나타내는 특별한 세트의 경우에 대한 해결책, 또는 더 일반적으로 비교할 수없는 모든 세트가 분리 된 서브 세트 포함으로 일련의 병렬 순서에 대한 해결책을 찾았습니다.
더 쉽게 만드는 한 가지 속성은 집합 목록이 교차로 닫혀있는 경우입니다. 경우 , 다음이 최적의 순서가있는 s의 1은 이전 온다 이야 2 . WLOG는 최적의 순서가 부분 집합 포함에 의해 주어진 부분 순서의 선형 확장이라고 가정 할 수 있습니다.
세트의 모든 서브 세트가 순서대로 표시되기 때문에, 이는 주어진 세트에 의해 누계에 추가되는 양이 표시되는 위치에 관계없이 고정됨을 의미합니다. 경우 집합의리스트는 다음 세트의 증분 비용에 나타나는 임의의 서브 세트에 있지 않은 S의 요소 수 인 S는 . S 에서 동일한 세트가 여러 번 나타나는 경우 임의로 하나를 선택하고 다른 하나는 비용이 0이되도록 할 수 있습니다.
이는 문제가 우선 순위 제약 조건이있는 단일 머신 스케줄링에서 최소 가중치 완료 시간 문제와 동일 함을 의미합니다. 이 문제에서 가중치 작업 세트가 지정 와 시간 t J , 그리고 작업에 대한 부분 위해 P를 , 우리는 가중 총 완료 시간을 최소화하는 작업의 순서, 즉 찾고자
우선 순위 제약 조건 . 교차 폐쇄 세트에 대한 최소 누적 세트 문제는 각 세트에 대한 작업을 작성하여이 작업으로 전환 할 수 있습니다. 여기서 모든 작업에는 가중치 1, 시간이 위에 정의 된 증분 비용과 같고 P 는 서브 세트 포함으로 주어진 순서입니다.
결과적 으로이 문제는 일반 NP-Hard입니다 . 그러나 특정 특수 형태의 P 는 다항식 시간으로 풀 수 있습니다.
이 논문 은 직렬 병렬 차수 P (중요한 나무의 경우도 포함)의 경우에 대한 알고리즘을 제공합니다 . 불행히도, 나는 그 논문에 접근 할 수 없었기 때문에 독립적으로 재발 명하기로 결정했다. 여기에 내가 생각해 낸 것이 있습니다.
이 문제를 해결하려면 몇 가지 관찰이 필요합니다.
첫째는, 어떤 선행 제약 조건이없는 상태에서, 최적의 솔루션은 증가하는 순서 단순히 종류의 작업에이다 . 간단하게하기 위해 이것을 약어v(j)로하는 작업의 값이라고합니다. 정렬이O(nlogn)이므로이 복잡성보다 더 나은 작업을 수행 할 수 없습니다.
규칙 1 하자 하고 , B는 같은 것을 채용 할 < B ∈ P 및 B 커버. 경우 V ( ) < V ( B ) , 우리는 제약 조건을 삭제할 수 있습니다 < B를 최적의 순서 또는 목표 값에 영향을주지 않고.
가정하자 전에 나타나는 완화 문제의 최적의 순서이다. b가 원래를 다루었으므로 새로운 순서에서 b와 a 사이의 모든 작업은 a와 b와 비교할 수 없습니다. 그러나 b가 a보다 높은 값을 가지므로 b와 a를 모순으로 바꿔 목표 값을 줄일 수 있습니다.
마찬가지로 값을 기준으로 정렬 한 후 원래 (단순화 된) 문제의 우선 순위 관계를 참조하여 관계를 끊는 경우 제약 조건을 제거 할 수 있습니다 . 이렇게하면 완화 된 문제에 대해 찾은 최적의 솔루션이 원래 문제에 대한 최적의 솔루션이기도합니다.
따라서 b가 a와 포함 할 때마다 제약 조건 a < b를 삭제하여 문제를 단순화 할 수 있습니다 .
규칙 2 최적의 솔루션에서 b 바로 뒤에 b가 뒤따른다는 것을 알고 있다고 가정하십시오. 우리는 a와 b를 및 t c = t a + t b 와 함께 새 노드 c에 병합 할 수 있으며, poset P를 적절히 축소 할 수 있습니다.
새로운 문제의 최적 목표 값은 원래 목표 값 (특히 )과 상수가 다르지만이 상수는 순서에 의존하지 않으므로 최적 순서에 영향을 미치지 않습니다. 우리는 새로운 문제에 대한 최적의 솔루션을 복용하고 대체하여 이전 문제에 대한 최적의 솔루션을 복구 할 수 있습니다 C를 함께 B .
3 규칙 문제 인스턴스에 대한 최적의 솔루션에 있다고 가정 바로 앞에 온다 B 및 V ( ) > V ( B ) . 이제 우리는 원본과 직렬 또는 병렬 구성으로 형성된 새로운 poset으로 새로운 작업을 추가하여 더 큰 문제 인스턴스를 생성한다고 가정하십시오. a 가 b 바로 앞에 오는 더 큰 문제에 대한 최적의 솔루션이 항상 있습니다 .
그렇지 않다고 가정하십시오. 최적 해에 . 이후 P는 일련의 평행 한 조성물로 형성하고, 우리는 모두 알고 X 난 들에 비교할 수있다 및 B . 규칙 2를 사용하여 모든 x i 노드를 새 노드 x '에 병합하십시오 . 이제 v ( x ' )를 고려하십시오 . 만약 V ( X ' ) ≤ V ( ) 다음 우리가 할 수 스왑 및없이 증가 목표치. 마찬가지로 v ( x ' ) ≥ v ( b ) 인 경우 x ' 와 b를 바꿀 수 있습니다. 따라서 v ( a ) < v ( x ' ) < v ( b ) 입니다. 그러나 v ( a ) > v ( b ) 는 모순입니다.
규칙 2와 규칙 3을 사용하면 이미 단순하지만 차선책 인 알고리즘을 얻을 수 있습니다 . 이후 P는 일련의 평행 한 순서이며, 입력이 트리 표현을 포함한다고 가정 P 각 노드가 직렬 또는 병렬 조성물 조성물이고, 잎은 개별 작업이다. 각 하위 문제에 대한 최적의 솔루션이 증가하는 가치 순서의 체인이라는 불변성을 유지함으로써 트리의 사전 순서 순회가있는 최적의 솔루션을 찾을 수 있습니다.
가 포셋 P 1 및 P 2 가있는 하위 문제의 연속 구성 이라고 가정 합니다. 최적의 솔루션을 C 1 과 C 2 로 주문하십시오 . P에 대한 최적의 해결책 은 분명히 이러한 사슬의 연결입니다. 그러나, 최초의 작업을하는 것이 가능 C 2 의 마지막 작업보다 낮은 값을 갖는 C 1 . 솔루션이 정렬 된 체인이라는 불변성을 유지하기 위해 규칙 3 + 규칙 2를 사용하여 엔드 포인트가 정렬되지 않은 한 엔드 포인트를 병합합니다.
경우 병렬 구성 대신에, 우리는 간단하게 정렬 된 체인이 걸릴 S 1 과 S 2 와 새로운 정렬 사슬로 병합합니다. 불변으로 인해 유효합니다.
불행하게도,이 알고리즘은 입니다. O ( n l o g n ) 알고리즘 을 얻으려면 규칙 1을 사용하여 느리게 체인을 계산해야합니다.
특히 하위 문제에 우선 순위 제약 조건이 값의 순서와 동일한 노드 만 포함 된 경우 우선 순위 제약 조건을 완전히 잊고 값만 볼 수 있습니다. 이는 솔루션이 이전 알고리즘에서 체인으로 정렬되도록하는 동일한 불변에 의해 보장됩니다.
각 하위 문제에 대해 정렬 된 체인을 계산하는 대신 하위 문제에 대한 모든 작업을 포함하는 한 쌍의 피보나치 힙, 하나의 최소 힙 및 하나의 최대 힙으로 하위 문제에 대한 최적의 솔루션을 나타냅니다. 즉, 로그 시간에 솔루션의 최소 또는 최대 요소를 표시 할 수 있습니다.
이전과 마찬가지로 사전 주문 순회를 수행합니다. 어디 일련의 구성입니다, 우리는 첫 번째 힙 쌍의 두 번째 힙 쌍의 최소 작업의 최대 작업을 검사합니다. 값이 잘못된 경우 규칙 2와 3을 사용하여 값을 팝하고 병합합니다. 그런 다음 새로 작성된 작업을 새 엔드 포인트와 비교하고 순서가 잘못된 한 계속 팝 및 병합합니다. 엔드 포인트가 더 이상 비 순차 값을 가지지 않으면 규칙 1로 인해 시리즈 우선 순위 제한을 안전하게 잊을 수 있습니다. 그런 다음 새로 작성된 작업이 있으면 힙으로 푸시 한 다음 힙을 병합하여 솔루션을 나타내는 힙 쌍을 작성하십시오. 에 P 자체.
병렬 컴포지션의 경우 단순히 힙 쌍을 병합합니다. 새로운 최소 힙은 각 하위 문제점의 최소 힙과 최대 힙의 병합입니다. 피보나치 힙은 일정한 시간에 병합 할 수 있습니다.
전체 문제에 대한 솔루션을 나타내는 힙 쌍이 있으면 최소 힙이 비어있을 때까지 팝하여 실제 솔루션 순서를 찾을 수 있습니다. 그런 다음 모든 문제 2 대체를 실행 취소하여 원래 문제에 대한 해결책을 얻습니다.
힙에서 튀어 나온 각 작업은 즉시 새 작업으로 병합되어 총 작업 수를 줄이거 나 끝에서 정확히 한 번 튀어 나옵니다. 따라서 대부분의 선형 팝 힙 수가 있으므로 시간이 길어집니다. 다른 작업은 노드 또는 작업마다 일정한 시간이므로 전체적으로 선형입니다.