Tổng tập hợp con: giảm đặc biệt cho trường hợp chung


20

Wikipedia nêu vấn đề tổng hợp tập hợp con khi tìm tập hợp con của một số nguyên đã cho, có tổng bằng không. Hơn nữa, nó nói rằng nó tương đương với việc tìm một tập hợp con với tổng cho bất kỳ cho .ss

Vì vậy, tôi tin rằng chúng là tương đương, phải có sự giảm bớt ở hai bên. Một từ đến 0 là tầm thường bằng cách đặt . Nhưng tôi không may mắn tìm được sự giảm từ 0 xuống , tức là đã cho một tập hợp số nguyên , xây dựng một tập hợp số nguyên chứa tập con có tổng (cho bất kỳ ) nào, nếu và chỉ khi có tập con của với tổng bằng không.ss=0sABssA

Bạn có thể cho tôi một số gợi ý?

Câu trả lời:


11

Bạn thực sự đã có một giảm từ đặc biệt đến chung. Bằng cách đặt s=0 , về cơ bản, bạn đang sử dụng thuật toán chung để giải quyết vấn đề đặc biệt.

Đối với vòng ngược lại (nghĩa là giảm từ chung sang đặc biệt):

Giả sử bạn đang đưa ra một tập và một số và bạn phải xác định nếu có một số tập con của mà khoản tiền để .K S KS={x1,,xn}KSK

Bây giờ bạn muốn giải quyết vấn đề này, đưa ra một thuật toán cho trường hợp bạn có thể xác định xem một số tập hợp con có .0

Bây giờ nếu , chúng tôi có mức giảm dễ dàng: .S ' = { x 1 , x 2 , ... , x n , - K }xi>0S={x1,x2,,xn,K}

S có tập con là tổng0 khi và chỉ khiS có một tập hợp con của tổngK .

Vấn đề xảy ra khi chúng ta có thể có xi0 cho một số i .

Chúng ta có thể giả sử rằng K>0 (tại sao?).

Giả sử tổng các tích cực xiP và tiêu cực xiN .

Bây giờ xây dựng một tập mới như vậyS={y1,y2,yn}

trong đó M = P + | N | + K .yi=xi+MM=P+|N|+K

Mỗi .yi>0

Bây giờ hãy chạy thuật toán tổng không tập con trên các tập hợp

S{(K+M)}

S{(K+2M)}

S{(K+3M)}

S{(K+nM)}

Thật dễ dàng để chỉ ra rằng nếu có tập con của tổng , thì ít nhất một trong các tập hợp trên có tập con của tổng bằng không.KSK

Tôi sẽ để lại bằng chứng về hướng khác cho bạn.


Cảm ơn nhiều. Tôi tự hỏi, có sự giảm nào biến đổi một thể hiện của 0-subset-sum thành một (thay vì ) của K-subset-sum không? n
ipsec

@ipsec: Ý bạn là biến đổi một thể hiện của K-subset-sum thành 0-subset-sum? Có lẽ lấy liên minh của bộ trên sẽ làm việc. n
Aryabhata

Chà, tôi đã thực sự suy nghĩ hai lần liệu bây giờ tôi đã có được hướng đi nghiêm ngặt chưa. Khi tôi muốn chỉ ra rằng K-subset-sum là NP-hard cho mọi K với thực tế, tổng 0-subset là NP-hard, tôi có thể sử dụng giảm từ 0-subset-sum thành K-subset-sum , trong đó tôi sẽ cần một phép biến đổi đa thời gian từ bất kỳ thể hiện 0 nào sang thể hiện K. Nhưng tôi không chắc chắn bây giờ rằng đây thực sự là những gì tôi đã hỏi trong câu hỏi của tôi.
ipsec

@ipsec: Khi bạn nói set , bạn đã hiển thị NP-Hardness của K -subset-sum với NP-Hardness của zero-subset-sum: vấn đề chung ít nhất cũng khó như vấn đề đặc biệt. Lưu ý rằng trong điều khoản rút gọn, bạn nói rằng bạn đã giảm tổng số không thành tập hợp con thành K -subset-sum. Ngoài ra, lưu ý rằng K là một đầu vào . Khi bạn nói về "mỗi K cho trước ", ý bạn chính xác là gì? Câu trả lời trên cho thấy trường hợp đặc biệt (zero-subset-sum) cũng cứng (theo nghĩa độ cứng NP) như trường hợp chung ( k -subset-sum, trong đó k là đầu vào). s=0KKKKkk
Aryabhata

Đừng bận tâm. Điều ban đầu tôi tự hỏi là, nếu chúng ta biết rằng 0-subset-sum là NP-hard, chúng ta có thể rút ra được không, ví dụ như 1-subset-sum cũng vậy? Wikipedia nói như vậy, nhưng tôi đang tìm kiếm một sự giảm bớt thích hợp. Tuy nhiên tôi thấy bây giờ từ ngữ của tôi đã hoàn toàn sai lầm và thực tế tôi đã hỏi ngược lại. Dù sao, bạn đã cho tôi đủ đầu vào để giảm từ bất kỳ trường hợp tổng hợp con K nào thành đối tượng tổng hợp con L cho bất kỳ số nguyên K và L đã cho nào, vì vậy vấn đề của tôi vẫn được giải quyết.
ipsec

0

Câu trả lời của Aryabhata có thể được khắc phục bằng cách sử dụng thực tế là chúng ta có thể nhân tất cả các số với một số c lớn , sau đó thêm một số nhỏ vào mỗi số để hoạt động như một "thẻ hiện diện", và sau đó cung cấp thêm một số số sẽ cho phép chúng tôi sẽ về 0 nếu chúng tôi có thể đến cK mà không có họ. Cụ thể, chúng tôi sẽ sử dụng c=2(n+1) và 1 làm thẻ hiện diện.

Cho một thể hiện (S={x1,,xn},K) của vấn đề chung với giá trị đích K , chúng ta sẽ tạo một thể hiện của vấn đề cụ thể (với giá trị đích 0) có chứa:

  • Y={y1,,yn} , nơiyi=2(n+1)xi+1 .
  • Số z=2K(n+1)n .
  • n1 bản sao của số 1, được gọi là số "kéo lên".

Tôi sẽ cho rằng Aryabhatta làm K là tích cực. (Vì đã 6 năm rồi, tôi sẽ trả lời bài tập của anh ấy cho người đọc: lý do chúng tôi có thể làm điều này là vì nếu chúng tôi trao đổi các dấu hiệu của tất cả các số trong một ví dụ của vấn đề chung, bao gồm K , thì chúng tôi sẽ kết thúc bằng một Điều đó có nghĩa là một thuật toán để giải quyết các trường hợp K tích cực đủ để giải quyết bất kỳ vấn đề nào - để giải quyết một trường hợp có K âm , chúng ta có thể thực hiện trao đổi ký hiệu này, chạy thuật toán đó và chuyển tiếp câu trả lời của nó câu trả lời cho câu hỏi ban đầu. Và tất nhiên nếu K=0 sau đó chúng ta không cần phải thực hiện bất kỳ sự chuyển đổi nào của trường hợp chung thành trường hợp đặc biệt nào cả!)

Trước tiên, hãy chỉ ra rằng một câu trả lời CÓ cho trường hợp cụ thể của vấn đề chung ngụ ý câu trả lời CÓ cho trường hợp được xây dựng của vấn đề đặc biệt. Ở đây chúng ta có thể giả định rằng một số giải pháp {xj1,,xjm} cho vấn đề chung tồn tại: đó là, bộ sưu tập không rỗng này của m số tiền để K . Vì vậy, nếu chúng ta lấy tương ứng y -values {yj1,,yjm} vào giải pháp của chúng tôi để các trường hợp xây dựng, họ sẽ tổng hợp để 2K(n+1)+m . Sau đó, chúng ta có thể chọn bao gồm2K(n+1)n trong giải pháp, để lại cho chúng ta một tổngmn . Kể từ khi1mn , điều này nằm trong khoảng[n+1,0] , mà chúng tôi thành công có thể kéo lên đến 0 bằng cách bao gồm một số tập hợp con của những con số pull-up.

Bây giờ chúng ta hãy chỉ ra rằng một câu trả lời CÓ cho thể hiện được xây dựng ngụ ý một câu trả lời CÓ cho thể hiện ban đầu. Đây là nơi phép nhân với 2(n+1) trở nên quan trọng - đó là điều cho phép chúng tôi chắc chắn rằng các số phụ mà chúng tôi đưa vào không thể "làm quá nhiều".

Ở đây chúng ta có thể giả định rằng một số giải pháp {yj1,,yjm} đến dụ xây dựng tồn tại: đó là, bộ sưu tập không rỗng này của m số tiền là 0. Bằng cách yêu cầu vấn đề, giải pháp này có chứa ít ít nhất một yếu tố. Hơn nữa, nó phải chứa ít nhất một phần tử từ Y , vì nếu không có phần tử này thì không thể đạt được tổng bằng 0: Nếu chỉ có số kéo lên, thì tổng số nhất thiết phải nằm trong phạm vi [1,n1] ( lưu ý rằng trong trường hợp này ít nhất mộtsố kéo lên phải có mặt và tất cả chúng đều dương, vì vậy tổng không thể là 0); trong khi nếu giải pháp chỉ bao gồm z và một số số kéo lên thì tổng số nhất thiết là âm vì z=2K(n+1)nn và hầu hết các số kéo lên có thể tăng tổng bởi n1 .

Bây giờ giả sử đối với mâu thuẫn rằng giải pháp không chứa z . Mỗi phần tử trong Y bao gồm hai thuật ngữ: Bội số của 2(n+1) và "thẻ hiện diện" +1. Lưu ý rằng số hạng +1 trên mỗi n phần tử của Y tăng tổng 1 nếu phần tử đó được chọn, cũng như mỗi số có tới n1 kéo lên, do đó tổng số đóng góp của 2 phần tử này được chọn, do đó tổng số đóng góp của 2 phần tử này nguồn cho bất kỳ giải pháp nào ít nhất là 1 (vì chúng tôi đã thiết lập trong đoạn trước rằng ít nhất một yếu tố của Y phải được chọn) và tối đa là n+n1=2n1 . Cụ thể, điều này ngụ ý rằng tổng của hai bộ thuật ngữ này,khi được sử dụng modulo2(n+1) , là khác không. Theo giả định rằng giải pháp không chứaz , chỉ các thành phần khác trong tổng này là bội số của2(n+1) đóng góp bởi các thành viên đã chọn củaY , không ảnh hưởng đến giá trị của tổng khi lấy modulo2(n+1) . Do đó, tổng của tất cả các điều khoản trong giải pháp, khi lấy modulo2(n+1) , là khác không, có nghĩa là nó không thể bằng tổng mục tiêu bằng 0, có nghĩa là nó không thể là một giải pháp hợp lệ: chúng tôi đã tìm thấy một mâu thuẫn, có nghĩa là nó phải làz=2K(n+1)n có mặt trong mọi giải pháp sau tất cả.

Vì vậy, mọi giải pháp đều chứa z . Chúng ta biết rằng

(2K(n+1)n)+i=1m(2(n+1)xji+1)+pull-ups=0 ,

và chúng ta có thể sắp xếp lại các điều khoản:

2K(n+1)+i=1m(2(n+1)xji)(n+i=1m1+pull-ups)=0

2K(n+1)+i=1m(2(n+1)xji)(n+m+pull-ups)=0

2(n+1)(K+i=1mxji)(n+m+pull-ups)=0 .

Vì tổng bằng 0, nên nó vẫn là 0 khi lấy modulo 2(n+1) , ngụ ý rằng chúng ta có thể loại bỏ tất cả các số hạng chứa bội số của 2(n+1) để có được phương trình mới

(n+m+pull-ups)=0

Điều này có thể được thay thế trực tiếp trở lại phương trình trước để có được

2(n+1)(K+i=1mxji)=0

2(n+1)

K+i=1mxji=0

trong đó mang lại một giải pháp cho trường hợp vấn đề chung ban đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.