세트가 주어지면 각 세트에서 하나 이상의 요소를 포함하는 가장 작은 세트를 찾으십시오.


15

세트 감안할 때 세트를, 나는 세트 찾으려면 모든 설정하도록 에서 적어도 하나 개의 요소가 포함되어 . 나는 또한 싶습니다 아직이 기준을 충족하면서 하나 이상의 작은이있을 수 있지만, 가능한 몇 가지 요소로 포함하는 이 속성 (솔루션이 반드시 고유하지 않습니다).SMSSMMM

구체적인 예로, 세트가 국기 세트이고 각 플래그 에 대해 요소가 해당 국가의 국기에 사용 된 색상이라고 가정하십시오. 미국은 이고 모로코는 입니다. 그런 다음 은 모든 국기가 의 색상 중 하나 이상을 사용하는 속성이있는 색상 세트입니다 . ( 파란색, 검은 색, 빨간색, 녹색, 노란색 및 흰색 의 올림픽 색상 은 이러한 의 예 이거나 적어도 1920 년입니다.)SSSS={red,white,blue}에스={아르 자형이자형,아르 자형이자형이자형}미디엄미디엄미디엄

이 문제에 대한 일반적인 이름이 있습니까? 세트 을 찾기 위해 허용 된 "최상의"알고리즘이 있습니까? (나는 계산 복잡성을 위해 프로세스를 최적화하는 것보다 솔루션 자체에 더 관심이 있습니다.)미디엄


2
세트 커버 문제를 찾고 있습니까?
Juho

@ Juho 아닙니다. 내 예에서, 세트 커버 문제는 그 플래그의 조합이 포함되도록 일련의 플래그 찾는 것이 모든 모든 플래그에 사용되는 색상을. 대조적으로, 나는 깃발 목록이 아닌 색상 목록을 뱉어내는 것을 찾고 있으며 가능한 모든 색상을 포함하기 위해 세트 이 필요하지 않습니다 . 나는 Wikipedia 에서이 지역을 찌를 것입니다. 나는 당신이 나를 올바른 길로 인도했다고 생각합니다. 감사! M
bdesham

답변:


13

문제는 잘 알려진 NP- 완전 문제인 Hitting Set 입니다. Set-Cover 와 밀접한 관련이 있습니다. NP- 완전성 증명 은 Garey and Johnson 의 고전 서적 에서 찾을 수 있습니다 .

근사치를 계산하려면 먼저 인스턴스를 Set-Cover로 변환 한 다음 Set-Cover에 대한 근사 알고리즘을 적용하십시오. 그러나 Lund와 Yannakakis가 보여주는 P = NP가 아니라면 다항식 시간의 상수 인자로 Set-Cover를 근사 할 수 없습니다 .

정확한 솔루션에 관심이 있고 입력이 훌륭하게 작동하는 경우 고정 매개 변수 tractable을 사용하는 것이 좋습니다 . 여기에서 작동 시간은 입력 길이 n 뿐만 아니라 추가 매개 변수 k 됩니다. 실행 시간이 O(f(k)nO(1)) 이면 알고리즘을 FPT- 알고리즘이라고합니다. 여기서, f(k) 는 증가하는 함수이다. 그래서 만약 k 상수는 우리가 polytime 알고리즘을 가지고있다. 첫 번째 챕터Flum and Grohe의 저서 , 세트 타격에 대한 FPT 알고리즘에 대해 설명합니다 (보다 정확하게 p 카드 타격 세트에 대한). 이 알고리즘은 구현하기 쉽고 제한된 검색 트리의 방법을 사용합니다. 여전히 여기에 설명하기 위해 많은 공간이 필요합니다. 기본적으로 필요한 (?) 무차별 검색을 작은 조각으로 나눕니다 ( k 가 작을 때 ).


감사. 실제 구현에 대해 읽을 수있는 참조를 제공 할 수 있습니까? 즉, 내 문제를 어떻게 설정 문제로 변환하고 어떻게 해결할 수 있습니까?
bdesham

1
bdesham, 각 요소를 속한 집합 집합으로 생각하십시오. 요소 세트 입력에서 세트 덮개를 실행하십시오. 또한 여기에 링크 된 위키 페이지를 읽으십시오.
Sasho Nikolov

대략적인 솔루션에 관심이 있습니까, 아니면 정확한 솔루션을 원하십니까?
A.Schulz

정확한 해결책을 원합니다. 내가 작업하고있는 데이터 세트는 문제가 될 것이라고 생각하지 않을 정도로 작습니다.
bdesham

1
@Keyser : 맞습니다. 그러나 의사 결정 문제는 NP- 완전 문제와 밀접한 관련이 있기 때문에 의사 결정 문제를 해당 최적화 문제와 연관시키는 것이 일반적입니다.
A.Schulz

2

모든 집합의 교집합 경우 : 도움이 될 아이디어 에서이 비어 있지, 당신은 어떤 요소를 선택할 수 있습니다 교차로와 설정 M = { 들에게 } . 교집합이 비어 있는 경우 세트에서 발생이 최대 인 요소 (컬러) c 를 찾고 싱글 톤 { c }로 발생하는 모든 세트를 교체하십시오 . 모든 요소의 발생 횟수가 1 이 될 때까지이 작업을 계속 수행 한 다음 M 을 나머지 집합의 합집합으로 설정하십시오. 예를 들어 S 가 일부 세트 A 의 전력 세트 이면 M = ASsM={s}c{c}1MSAM=A. 그러나 나는 틀렸다.


2

Ray Reiter의 "첫 번째 원리의 진단 이론" 에서 타격 세트를 계산하는 알고리즘과이 추가 노트 "A correction ..."을 살펴보십시오 .

이 알고리즘은 일반적으로 "히팅 세트 트리"알고리즘으로 알려져 있으며 구현을 찾기가 너무 어렵지 않아야합니다. 런타임에 너무 관심이 없다고 언급했지만 초기 분기 종료 등과 같은 최적화는 구현에 매우 중요하며 흥미 롭습니다. :)


2
답변을보다 독립적으로 만들기 위해 알고리즘을 요약 할 수 있습니까? 링크가 끊어 질 수 있습니다.
Juho

0

실제로, Set Cover / Hitting Set의 인스턴스를 해결하는 더 좋은 방법 중 하나 (확실히 가장 쉬운 방법 중 하나)는 혼합 정수 프로그래밍입니다. 여기에는 정수 프로그래밍 공식 을 선택한 솔버 에 전달하는 과정이 포함됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.