일부 조건에 따라 세트를 지정된 수의 분리 된 서브 세트로 분할하는 방법은 무엇입니까?


11

세트 A{1,,k} , 정수 sk 및 음이 아닌 정수 aij 됩니다. 내 문제는 찾을 수 있습니다 s 분리 된 부분 집합 Sj{1,,k} 하도록 :

  1. j=1sSj=A ; 과
  2. |Sj|aij모든 iSjj = 1, \ ldots, s에 대해 | S_j | \ leqslant a_ {ij}j=1,,s .

이 문제를 해결하는 방법? 실현 가능한 해결책을 찾기가 어렵습니까?

j{1,,n} 하고 숫자까지 i \ in \ {1, \ ldots, k \}를 할당 하는 일부 절차를 시도했기 때문에 문제를 해결하기가 쉽지 않다고 생각합니다. j에 할당 된 ii{1,,k}i 할당 된 일부 i 에 대해 a_ {ij} 보다 큽니다 . 그러나 어떤 j에 할당 할 수없는 i 가 남아있을 수 있기 때문에 이것은 정확 하지 않습니다 (만족 할 수없는 a_ {ij} 때문에 ).jaijiijaij

A의 모든 부분 집합을 생성하고 A각각을 테스트 해야 할 때 무차별 강제 방법 은 저에게 효과적 이지만 ( k=8,n=3 ) 매우 비효율적입니다.


수정 내용이 원하는 질문과 일치하는지 확인하십시오. 또한 어디에서 왔습니까? 그것이 고정 상수입니까 (입력의 일부가 아니라 모든 시간 동안 고정되어 있습니까) 아니면 입력의 일부입니까? 마지막으로 실용적인 솔루션을 찾고 있습니까? 또는이 문제의 이론적 인 복잡성을 찾고 있습니까? 전자의 경우 정수 선형 프로그래밍을 사용해 보셨습니까? amax
DW

답변:


10

이 문제는 Vertex Cover의 축소로 인한 NP-hard입니다.

정점 커버 문제에서 그래프 와 숫자 이 주어지며, 우리 의 임무는 에서 최대 정점 의 하위 집합 가 있는지 확인 하여 모든 모서리 가 발생 하는지 확인하는 것입니다. 적어도 하나 개의 정점에 . (동일하게 : 최대 개의 정점 을 삭제하여 모든 모서리를 죽일 수 있습니까?)G=(V,E)rUrVEUGr

먼저, 분할 으로 분리 된 부분 집합은 각 요소에 할당 동등 정확히 하나 가능한 라벨. 축소의 기본 아이디어는 각 정점 에 대해 레이블 를 작성 하고 다음과 같은 의미에서 각 모서리에 해당 끝점에 해당하는 두 레이블 중 하나만 할당되도록 허용하는 것입니다. 레이블은 다른 레이블에 동일한 레이블을 할당 할 수있는 것에 대한 (정품) 제약을 도입하지 않고, 해당하지 않는 레이블에 모서리를 할당하면 다른 모서리에 동일한 레이블이 할당되지 않습니다. 물론 숫자를 올리는 효과가 있습니다 고유 라벨이 필요합니다.AsAsSjvjV

정점 표지 의 인스턴스 에서 문제 인스턴스 를 구성하려면 :(A,a,s)(G,r)

  1. 를 설정하십시오 각 모서리 에 대해 에 요소 를 . (이러한 쌍은 정수 로 생각할 수 있습니다 .k|E|(i,j)AvivjE1,,k
  2. 설정 로만약 또는 ; 그렇지 않으면 를 1로 설정하십시오.a(b,c),d|E|d=bd=ca(b,c),d
  3. 설정하십시오 .s=r

경우 바로 라벨 선택 : 정점 커버의 YES-인스턴스이며, 그것은 문제의 단지 건설 한 예는 또한 YES 인스턴스는 것을 쉽게 알 수 정점에 상당 모든 솔루션에 각 모서리 대해 해당 요소 를 지정합니다. 레이블 또는 중 하나를 선택했습니다 (두 레이블을 모두 선택하면 임의로 선택). 이 용액을 사용하는 만 있기 때문에 서브 세트 및 유효 힘을위한 것들이다 대응(G,r)SjvjUvbvcE(b,c)ASbScsaij라벨은 이상을 방지하는 (비) 효과를 갖습니다. 가장자리에 동일한 레이블이 지정됩니다.|E|

문제의 YES- 인스턴스 는 원본 이 정점 커버의 YES- 인스턴스 임을 암시합니다 . 부터 까지 의 유효한 솔루션 은 일반적으로 가장자리 해당 하지 않는 레이블 할당 할 수 있기 때문에 약간 더 복잡 합니다. 즉, . 유효한 솔루션 에서 유효한 정점 커버 를 반드시 "읽어냅니다" .X=(A,a,s)(G,r)YX(i,j)Smm{i,j}UY

그러나, 비 대응하는 라벨을 할당하는 심각한 용액의 구조를 제한하는 고비용 가지고 에지가 될 때마다 그러한 레이블 할당 가진 팩트 있다는 보장하지만 그것이 여야 이 라벨을 할당 가장자리. 따라서 이와 같이 해당 레이블이없는 가장자리 포함하는 모든 솔루션 에서 다음과 같이 대체 솔루션 를 구성 할 수 있습니다.(i,j)Smm{i,j}a(i,j),m=1Y(i,j)SmY

  1. 에 대해 새 레이블 를 또는 .Sz(i,j)SiSj
  2. 이 새 레이블을 할당하십시오 . 이로 인해 유효하지 않은 솔루션이 발생하는 경우 정확히 하나의 다른 모서리 , 레이블이 이미 지정 입니다. 이 경우 하고 1 단계로 이동하십시오.(i,j)(i,j)z{i,j}Sz(i,j)=(i,j)

위의 알고리즘은 두 가지 방법 중 하나로 종료해야합니다. 모순을 하지 않는 새 레이블 가 발견되거나 정점의 전체주기가 발견됩니다. 전자의 경우, 세트를 가진 유효한 새로운 솔루션 이 발견되고 후자의 경우에는 세트를 가진 유효한 새로운 솔루션 이 발견됩니다. 어느 쪽이든, 우리는 해당 레이블에 지정된 가장자리가 하나 이상있는 유효한 새 솔루션을 구성했습니다 . 이 전체 프로세스를 최대로 반복 한 후때때로, 우리는 원래의 정점 표지 문제에 대한 해결책을 읽을 있는 유효한 솔루션 를 생산할 것 입니다.Szs1s|E|Y

이 구조는 분명히 다항식 시간이므로 문제가 NP-hard이기 때문입니다.


도와 주셔서 감사합니다. 이 문제를 (대략적으로) 해결할 수있는 방법이 있습니까? (예를 들어, 정점 표지 문제를 해결하기 위해 기술을 사용할 수 있습니까?) 욕심 많은 접근 방식을 시도했지만 때로는 실행 가능한 솔루션을 출력하지 못합니다. (내가 를 선택하는 방식은 해결책이 존재할 수있는 곳에서 탐욕스러운 접근법을 실패하게 만듭니다.)Sj
drzbir

글쎄, 욕심 많은 접근 방식은 때로는 실현 가능한 솔루션을 출력하지 못할 것으로 예상됩니다. 항상 그렇게했다면 폴리 타임에서 NP-hard 문제를 해결할 것이므로 ;-) 그렇지 않으면 반드시 틀린 것은 아니라는 것을 기억하십시오 해결책 찾기 : 실현 가능한 해결책이 없을 수도 있습니다.
j_random_hacker

솔루션 기술과 관련하여 내가 좋아하는 것을 빔 검색이라고합니다. 이것은 기본적으로 메모리 사용량을 제한하기 위해 충분히 나쁜 부분 솔루션을 "잊어 버린"일종의 분기 및 경계입니다. (B & B는 자체적으로 매우 좋은 접근 방식이며 때로는 문제를 빠르게 해결하며 빔 검색보다 약간 단순하므로 한 번의 가치가 있습니다. 그러나 정확한 방법이기 때문에 일부 인스턴스에서는 물론 수천 년이 걸릴 수 있습니다.)
j_random_hacker

(아래의 모든 내용은 B & B뿐만 아니라 빔 검색에도 적용됩니다.) B & B는 매우 일반적인 기술입니다. 이 문제의 핵심은 문제점의 세부 사항을 활용하여 결정을 구성하여 가능한 한 나쁜 결정 (즉, 가능한 솔루션으로 이어지지 않는 결정)이 검색 트리에서 조기 에 작성되도록하는 것입니다. (이러한 결정이 될 것이다 어딘가에 각 레벨 깊이가 두 배에게의 수를 만들어 얻을, 그리고 시간 그들이 만든 얻을합니다.) 당신의 문제를 들어, 내가 처음의 요소 순위 제안 "불량"의 내림차순으로. ..A
j_random_hacker

... 요소 의 나쁜 점은 예를 들어 모든 대한 최소 , 두 번째-최소, 세 번째-최소에 의한 관계 끊기 등일 수 있습니다. 대략적으로 말하면 "최악의"요소는 요소가됩니다. 추가되는 모든 집합을 가장 엄격하게 제한합니다. 검색 트리의 깊이 에있는 각 노드 에는 첫 번째 (따라서 "최악의") 요소가 이미 세트에 할당 된 부분 솔루션이 있습니다 . 번째 요소를 할당 할 세트 중 하나를 선택해야합니다 . 즉, 최대 재귀 호출 이 필요 합니다. ( "최대") 희망이 있기 때문에 ...iaijjddn(d+1)n
j_random_hacker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.