Sau đây cung cấp một thuật toán sử dụng khoảng thời gian và 2 n / 2 không gian.2n2n / 2
Trước tiên, hãy xem xét vấn đề sắp xếp các khoản tiền của tất cả các tập hợp con của mục.n
Hãy xem xét bài toán con này: bạn có hai danh sách được sắp xếp có độ dài và bạn muốn tạo một danh sách được sắp xếp gồm các cặp tổng của các số trong danh sách. Bạn muốn làm điều này trong khoảng thời gian O ( m 2 ) (kích thước đầu ra), nhưng không gian tuyến tính. Chúng ta có thể đạt được không gian O ( m ) . Chúng tôi giữ một hàng đợi ưu tiên và kéo các khoản tiền ra khỏi hàng ưu tiên theo thứ tự tăng dần.mÔi(m2)Ô ( m )
Hãy để cho danh sách có và b 1 ... b m , sắp xếp theo thứ tự tăng dần. Chúng tôi lấy m khoản tiền một i + b 1 , i = 1 ... m , và đặt chúng trong một hàng đợi ưu tiên.a1Giáo dụcamb1Giáo dụcbmmmộtTôi+ b1i = 1 ... m
Bây giờ, khi chúng ta rút tổng nhỏ nhất còn lại ra khỏi hàng ưu tiên, nếu j < m chúng ta đặt tổng a i + b j + 1 vào hàng ưu tiên. Không gian bị chi phối bởi hàng đợi ưu tiên, luôn chứa tối đa m tổng. Và thời gian là O ( m 2 log m ) , vì chúng tôi sử dụng O ( log m ) cho mỗi hoạt động hàng đợi ưu tiên. Điều này cho thấy chúng ta có thể thực hiện bài toán con trong O ( m 2mộtTôi+ bjj < mmộtTôi+ bj + 1mÔ ( m2đăng nhậpm )O ( nhật kým ) thời gian và không gian O ( m ) .Ô ( m2đăng nhậpm )Ô ( m )
Bây giờ, để sắp xếp tổng của tất cả các tập hợp con của số, chúng ta chỉ cần sử dụng chương trình con này trong đó danh sách a i là tập hợp các tập con của nửa mục đầu tiên và danh sách b i là tập hợp các tập con của nửa sau của các mặt hàng. Chúng ta có thể tìm thấy các danh sách này theo cách đệ quy với cùng một thuật toán.nmộtTôibTôi
Bây giờ chúng tôi sẽ xem xét vấn đề ban đầu. Đặt là tập hợp tọa độ bằng 0 và S 1 là tập hợp tọa độ là 1 . Sau đó
Π i ∈ S 0 p ( v i = 0 ) Π i ∈ S 1 p ( v i = 1 )S00S11
∏i∈S0p(vi=0)∏i∈S1p(vi=1)==∏1≤i≤np(vi=0)∏i∈S1p(vi=1)p(vi=0)∏1≤i≤np(vi=0)exp(∑i∈S1logp(vi=1)p(vi=0)).
Sắp xếp các số này giống như sắp xếp các số , vì vậy chúng tôi đã giảm vấn đề sắp xếp các tập hợp con của n mục.∑i∈S1logp(vi=1)−logp(vi=0)n