Tối thiểu hóa toàn bộ biến thể của một chuỗi các lựa chọn rời rạc


8

Thiết lập của tôi là như thế này: Tôi có một chuỗi các bộ số nguyên , vớitương đối nhỏ - theo thứ tự bốn hoặc năm mặt hàng cho tất cả . Tôi muốn chọn một chuỗi với mỗi sao cho tổng biến thể (hoặc hoặc , tức là hoặc ) được thu nhỏ. Mặc dù có vẻ như sự lựa chọn cho mỗi là 'cục bộ', vấn đề là các lựa chọn có thể lan truyền và có tác động phi cục bộ và do đó, vấn đề có vẻ như toàn cầu về bản chất.Ci(1in)|Ci|ixi(1in)xiCi12i=1n1|xixi+1|i=1n1(xixi+1)2xi

Mối quan tâm chính của tôi là trong một thuật toán thực tế cho vấn đề; ngay bây giờ tôi đang sử dụng các phương pháp ủ dựa trên việc thay đổi các chuỗi ngắn, và trong khi chúng sẽ ổn, có vẻ như tôi phải làm tốt hơn. Nhưng tôi cũng quan tâm đến sự phức tạp trừu tượng - linh cảm của tôi sẽ là phiên bản truy vấn tiêu chuẩn ('có giải pháp cho toàn bộ biến thể k ?') Sẽ được NP hoàn thành thông qua việc giảm một số vấn đề ràng buộc như 3- SAT nhưng tôi không thể thấy giảm. Bất kỳ gợi ý nào cho nghiên cứu trước đều được hoan nghênh - có vẻ như đó là một vấn đề tự nhiên mà tôi không thể tin rằng nó đã không được xem xét trước đó, nhưng các tìm kiếm của tôi cho đến nay vẫn chưa tìm ra thứ gì tương tự như vậy.


Câu hỏi hay! Chỉ là một câu hỏi làm rõ: độ dài của xin , nhưng bạn phải chọn một số phần tử từ mỗi Ci ? Hoặc có ổn không khi có một số bộ mà bạn không chọn từ tất cả?
Juho

@mrm Phải có một phần tử từ mỗi - s được lập chỉ mục trực tiếp từ giống như các s. x 1 ... n CCix1nC
Steven Stadnicki

Câu trả lời:


4

Đây là một chương trình năng động. Giả sử rằng cho tất cả vì mục đích rõ ràng; những điều sau đây có thể được điều chỉnh để hoạt động nếu có các số lượng khác nhau. Đặt là chi phí tối thiểu của một chuỗi trong tập đầu tiên , kết thúc bằng . Đệ quy sau đây mô tả :i [ n ] C i Chi phí ( i , j ) i C i j Chi phíCi={Ci1,,Cim}i[n]CiCost(i,j)iCijCost

Cost(1,j)=0,1jmCost(i,j)=mink=1m(Cost(i1,k)+|C(i1)kCij|) ,2in,1jm.

Tổng chi phí tối thiểu là ; trình tự thực tế của các lựa chọn có thể được xác định bằng cách kiểm tra các argmins trên đường đi. Thời gian chạy là .O ( n m )minj=1mCost(n,j)O(nm)


Tôi đã cố gắng cải thiện sự rõ ràng của câu trả lời của bạn cả về định dạng và cách trình bày; vui lòng kiểm tra xem tôi đã không làm mọi thứ rối tung lên Sẽ thật tốt nếu bạn bao gồm một lập luận tại sao những gì bạn đề xuất là chính xác.
Raphael

Xem xét câu trả lời của Nicholas , điều này tương tự như thuật toán Bellman-Ford, phù hợp với vấn đề hiện tại.
Raphael

Cả hai câu trả lời đều thực sự xuất sắc (và như Raphael ghi chú, rất giống nhau), nhưng trong khi tôi thích khả năng ứng dụng rộng rãi của câu hỏi khác, tôi thực sự thích câu trả lời này cho ứng dụng trực tiếp của nó cho câu hỏi cụ thể của tôi. Cảm ơn bạn!
Steven Stadnicki

4

Dường như điều này có thể được giải quyết bằng cách đơn giản là tính toán một con đường ngắn nhất trong biểu đồ chu kỳ có hướng. Lý do là hàm mục tiêu của bạn giảm thiểu tổng khoảng cách giữa các "hàng xóm" được chọn trong các bộ .C={C1,,Cn}

Xây dựng một đồ thị -staged trong đó mỗi tương ứng với một phần tử duy nhất . Đối với mỗi , hãy thêm cạnh có hướng chi phí là khoảng cách hoặc .G = ( n i = 1 V i , E ) v V i x C i u V i , v V i + 1 ( u , v ) 1 2nG=(i=1nVi,E)vVixCiuVi,vVi+1(u,v)12

Bây giờ thêm một đỉnh nguồn với mép 0 chi phí để và chậu rửa đỉnh với mép 0 chi phí từ . Cho rằng là DAG và cả hai hàm khoảng cách buộc chi phí cạnh không âm, bạn có thể tính đường đi ngắn nhất trong với sắp xếp tôpô và lập trình động (tương tự như mô tả ở đây ).V 1 t V n G O ( V + E )sV1tVnGO(V+E)

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.