Các thuật toán thời gian giả đa thức nhanh hơn cho PHẦN THAM GIA


8

Tôi muốn phân chia N số đã cho (có thể có hoặc không bằng nhau) thành 2 tập con sao cho 2 tập con có tổng gần nhất có thể và giá trị chính của các tập bằng nhau (nếu n chẵn) hoặc chỉ khác nhau 1 ( nếu n là số lẻ).

Tôi nghĩ rằng chúng ta có thể làm điều này trong thời gian đa thức giả , trong đó là tổng các số trong tập hợp.Ôi(n2Một)Một

Tôi có thể làm tốt hơn thế này không? Cụ thể, có một thuật toán thời gian đa thức giả chạy trong thời gian với ?Ôi(ncMột)c<2

Cảm ơn trước!


1
Lưu ý rằng là một trường hợp đặc biệt của Knapsack, nó có một FPTAS . Xem ví dụ ELLawler. Các thuật toán xấp xỉ nhanh cho các vấn đề về chiếc ba lô .
Mathieu Chapelle

1
@Oleksandr, tốt hơn tôi có nghĩa là có một thuật toán đa thức giả chạy trong O (nA). xin lỗi rằng tôi không thể đăng bài trong latex.
Firebrandt

4
Tôi sợ rằng câu hỏi này nằm ở biên giới quá sơ đẳng. Ví dụ: Có phải vấn đề Phân vùng là hạn chế bổ sung rằng hai bộ phải có số lượng thẻ bằng nhau vẫn hoàn thành NP? có thể là một câu hỏi bài tập về nhà điển hình và tôi sợ rằng việc viết ra câu trả lời có thể có tác động tiêu cực đến một số khóa học về độ phức tạp tính toán.
Tsuyoshi Ito

6
Làm thế nào là quá tiểu học? Cách tiếp cận rõ ràng mang lại cho và câu hỏi đặt ra là liệu có một thuật toán tốt hơn chạy trong thời gian O ( n c A ) trong đó c < 2 . Tôi đoán rằng đây là một câu hỏi mở. Ôi(n2Một)Ôi(ncMột)c<2
Peter Shor

3
@Firebrandt: Tôi đã tự do chỉnh sửa câu hỏi ban đầu của bạn để thêm phiên bản làm rõ của bạn (thay đổi thành O ( n c A ) bằng c < 2 , vì tôi nghĩ thậm chí đó có thể là một câu hỏi mở). Vui lòng thay đổi lại thành O ( n A ) nếu bạn muốn. Tôi nghĩ rằng câu hỏi, như được làm rõ bởi ý kiến ​​của bạn, rõ ràng là cấp độ nghiên cứu. Ôi(nMột)Ôi(ncMột)c<2Ôi(nMột)
Peter Shor

Câu trả lời:


7

Người ta có thể giải quyết vấn đề quyết định trong thời gian .Ôi~(nMột)

Hãy để cho chuỗi các con số được . Xác định F S là một tập hợp như vậy mà ( i , j ) F S iff có tồn tại một dãy con của S có độ dài j mà tiền để i . Nếu chúng tôi đã tính toán F S , sau đó chúng ta chỉ cần O ( n Một ) thêm thời gian để đi triệt F S để giải quyết vấn đề của bạn.SFS(Tôi,j)FSSjTôiFSÔi(nMột)FS

Nếu S 2 là hai phân vùng S , thìS1S2S

FS= =FS1+FS2

trong đó là tổng Minkowski, và bổ sung giữa các bộ được quy định phối hợp khôn ngoan.Một+B= ={một+b|mộtMột,bB}

Khẳng định: Computing từ F S 1F S 2 mất ~ O ( | S | Một ) thời gian.FSFS1FS2Ôi~(|S|Một)

Chứng minh: Áp dụng tích chập 2D trên hai bảng có kích thước .Một×|S|

Thuật toán phân vùng chuỗi thành hai chuỗi có kích thước bằng nhau, áp dụng đệ quy cho từng chuỗi và lấy tổng chồn của kết quả. Đặt là thời gian chạy tệ nhất khi đầu vào của thuật toán có n phần tử và A là giới hạn trên của tổng. Chúng tôi có T Một ( n ) = 2 T Một ( n / 2 ) + Một ~ O ( n ) trong đó cho thấy T Một ( n ) = ~ O (TMột(n)nMột

TMột(n)= =2TMột(n/2)+MộtÔi~(n)
.TMột(n)= =Ôi~(nMột)

Các ẩn yếu tố là log n log n Một .đăng nhậpđăng nhậpnđăng nhậpnMột


3

Nếu bất cứ ai quan tâm đến các yếu tố , với phân tích cẩn thận, chúng tôi có thể chứng minh độ phức tạp thời gian cho thuật toán của Chao là O ( n A log ( n A ) ) .đăng nhậpÔi(nMộtđăng nhập(nMột))

SS1S2

Te(n,Một)= =To(n/2,Một')+To(n/2,Một-Một')+Ôi(nMộtđăng nhập(nMột)),
SS1S2SMộtS1S2Một/2Ôi(Một)
To(n,Một)= =Te(n1,Một/2)+Te(n-n1,Một/2)+Ôi(nMộtđăng nhập(nMột)),
n1= =|S1|
T(n,Một)ΣTôi= =14T(nTôi,MộtTôi)+Ôi(nMộtđăng nhập(nMột)),
ΣTôi= =14nTôinΣTôi= =14MộtTôiMộtTôi, nTôin/2, MộtTôiMột/2T(n,Một)= =Ôi(nMộtđăng nhập(nMột))
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.