Vấn đề này là NP-hard bằng cách giảm từ Vertex Cover.
Trong bài toán Vertex Cover, chúng tôi được cung cấp một biểu đồ và một số , và nhiệm vụ của chúng tôi là xác định xem có một tập hợp con trong hầu hết các đỉnh từ sao cho mọi cạnh trong đều xảy ra trên ít nhất một đỉnh trong . (Tương đương: Có thể giết mọi cạnh trong bằng cách xóa ở hầu hết các đỉnh không?)G=(V,E)rUrVEUGr
Đầu tiên, phân vùng thành tập hợp rời rạc tương đương với việc gán từng phần tử trong chính xác một trong nhãn có thể. Ý tưởng cơ bản của việc giảm là tạo nhãn cho mỗi đỉnh trong và "cho phép" mỗi cạnh chỉ được gán một trong hai nhãn tương ứng với các điểm cuối của nó, theo nghĩa sau: gán một cạnh tương ứng nhãn giới thiệu không có ràng buộc (chính hãng) nào về các cạnh khác có thể được gán cùng nhãn, trong khi việc gán một cạnh cho nhãn không tương ứng sẽ ngăn bất kỳ cạnh nào khác được gán cùng nhãn - tất nhiên có tác dụng đẩy số lên nhãn riêng biệt cần thiết.AsAsSjvjV
Để tạo một thể hiện của vấn đề của bạn từ một thể hiện của Vertex Cover:(A,a,s)(G,r)
- Đặt thành, Và tạo ra một yếu tố trong cho mỗi cạnh tại . (Các cặp này có thể được coi là các số nguyên ; bất kỳ mệnh đề nào giữa chúng sẽ làm.)k|E|(i,j)AvivjE1,…,k
- Đặt thànhnếu hoặc ; mặt khác, đặt thành 1.a(b,c),d|E|d=bd=ca(b,c),d
- Đặt .s=r
Nếu là một ví dụ CÓ của Vertex Cover, thì thật dễ dàng để thấy rằng trường hợp vừa được xây dựng cho vấn đề của bạn cũng là một ví dụ CÓ: chỉ cần chọn các nhãn tương ứng với các đỉnh trong bất kỳ giải pháp và với mỗi cạnh chỉ định phần tử tương ứng bất kỳ một trong các nhãn hoặc đã được chọn (chọn tùy ý nếu cả hai nhãn được chọn). Giải pháp này sử dụng tập hợp con và hợp lệ vì chỉ có hiệu lực là những tập hợp tương ứng(G,r)SjvjUvbvc∈E(b,c)∈ASbScsaijnhãn, có tác dụng (không) ngăn ngừa nhiều hơncác cạnh được gán cùng một nhãn.|E|
Vẫn còn phải chỉ ra rằng một ví dụ CÓ của vấn đề của bạn ngụ ý rằng bản gốc là một ví dụ CÓ của Vertex Cover. Điều này phức tạp hơn một chút, vì nói chung , một giải pháp hợp lệ từ đến có thể gán một cạnh một nhãn không tương , tức là , có nghĩa là chúng ta không thể nhất thiết phải "đọc off" cover đỉnh có giá trị từ một giải pháp hợp lệ .X=(A,a,s)(G,r)YX(i,j)Smm∉{i,j}UY
Tuy nhiên, việc gán nhãn không tương ứng có chi phí cao làm hạn chế nghiêm trọng cấu trúc của giải pháp: bất cứ khi nào một cạnh được gán nhãn như vậy , với , thực tế rằng đảm bảo rằng nó phải là cạnh duy nhất được gán nhãn này. Vì vậy, trong bất kỳ giải pháp chứa cạnh không có nhãn tương ứng , chúng tôi có thể xây dựng một giải pháp thay thế như sau:(i,j)Smm∉{i,j}a(i,j),m=1Y(i,j)↦SmY′
- Tự ý chọn nhãn mới cho là hoặc .Sz(i,j)SiSj
- Gán nhãn mới này. Nếu điều này dẫn đến một giải pháp không hợp lệ, thì đó phải là vì chính xác một cạnh khác , đã được gán nhãn . Trong trường hợp đó, đặt và chuyển sang bước 1.(i,j)(i′,j′)z∉{i′,j′}Sz(i,j)=(i′,j′)
Thuật toán trên phải chấm dứt theo một trong hai cách: hoặc tìm thấy nhãn mới không gây mâu thuẫn hoặc tìm thấy một chu kỳ đỉnh hoàn chỉnh. Trong trường hợp trước, một giải pháp mới hợp lệ với được tìm thấy, trong trường hợp sau, một giải pháp mới hợp lệ với bộ được tìm thấy; dù bằng cách nào, chúng tôi đã xây dựng một giải pháp mới hợp lệ với ít nhất một cạnh nữa được gán cho một nhãn tương ứng . Sau khi lặp lại toàn bộ quá trình này nhiều nhấtnhiều lần, chúng tôi sẽ tạo ra một giải pháp hợp lệ từ đó có thể đọc được giải pháp cho vấn đề Vertex Cover ban đầu .Szs−1s|E|Y′′
Cấu trúc này rõ ràng là thời gian đa thức, do đó, vấn đề của bạn là NP-hard.