Thuật toán hiệu quả cho vấn đề tối ưu hóa này? Lập trình năng động?


9

Tôi đã tạo một sơ đồ mô tả những gì tôi đang cố gắng thực hiện.

Biểu đồ

Hình ảnh kích thước đầy đủ

Trong chuỗi đầu vào, các nút càng gần nhau càng tốt. Nhưng tôi muốn các nút trắng càng gần các nút đen tương ứng của chúng càng tốt. Các cạnh giữa các nút có thể được kéo dài để cố gắng giảm thiểu lỗi này. Chúng không thể được rút ngắn. Vì vậy, 1 -> 2có thể không ít hơn 4, ví dụ.

Tôi đã bao gồm một giải pháp có thể. Các cạnh đã được kéo dài được dán nhãn. Lưu ý rằng việc kéo dài một cạnh sẽ dịch chuyển tất cả các nút sang bên phải của nó.

Trục này là liên tục, nhưng tôi có thể có thể rời rạc nó nếu điều đó có ích.

Tôi nghĩ rằng một phương pháp lập trình động có thể hoạt động ở đây nhưng tôi không chắc chắn - tôi chưa bao giờ rất tốt với DP.

Thuật toán chạy nhanh nhất có thể giải quyết điều này là gì? Điều này có thể được phân loại / đóng khung lại như là một vấn đề nổi tiếng?


Để giải quyết vấn đề này với DP, chỉ cần nghĩ về cấu trúc / cấu trúc phụ của giải pháp và giải quyết từ dưới lên. Điều đó sẽ cho một thời gian chạy tuyến tính. Tôi nghĩ rằng nó cũng thường có thể giải được như một hệ phương trình tuyến tính, nhưng việc giải / tối ưu hóa có thể không có thời gian chạy tốt hơn.
Jason

1
Xin vui lòng không đặt chi tiết chính được viết trong văn bản hình ảnh. Ngoài ra, bạn chưa thực sự mô tả chính thức vấn đề (theo thuật ngữ toán học), đó là một nửa trận chiến. "Giảm thiểu sai số bình phương trung bình" của cái gì? tuy nhiên, nó trông giống như một phiên bản 1d của "vấn đề vị trí cơ sở"
vzn

Câu trả lời:


5

Đây chỉ là phần mở rộng cho câu trả lời của @ Sébastien Loisel.

Thông báo giảm thiểu (xTôi-yTôi)2 tùy thuộc vào xTôi-xTôi-1cTôi tương đương với giảm thiểu (xTôi-(yTôi-cTôi))2 tùy thuộc vào xTôixTôi-1. Để chomộtTôi= =yTôi-cTôi, thì đây chính xác là vấn đề hồi quy đẳng hướng . Có tồn tại mộtÔi(n) thuật toán thời gian.


1
Tuyệt vời - Tôi đã thực hiện hồi quy đẳng hướng (thuật toán vi phạm liền kề) và nó hoạt động hoàn hảo và nhanh hơn nhiều so với thuật toán tìm kiếm ghi nhớ của tôi. Cảm ơn!
FogleBird

4

Nếu bạn rời rạc trục thì bạn có thể sử dụng lập trình động. Cho mỗi quả bóngb và vị trí khả thi (trong một số giới hạn hợp lý), tính toán bình phương trung bình tốt nhất cho lần đầu tiên bnhững quả bóng. Điều này có thể được thực hiện thường chỉ cùng một loại thông tin cho bóngb-1.


Bạn có thể xem mã tôi đã viết và cho tôi biết cách tiếp cận DP có thể khác biệt về hiệu năng không?
FogleBird

Nếu cách tiếp cận của bạn làm việc cho bạn, tuyệt vời. Bạn có thể ước tính độ phức tạp của nó? Bạn có thể ước tính sự phức tạp của đề nghị của tôi? Điều đó có thể giúp bạn quyết định xem có đáng để lập trình phương pháp của tôi không. Nếu bạn quyết định rằng nó đáng giá, bạn có thể so sánh hai cách tiếp cận theo kinh nghiệm. Cách tiếp cận nào hoạt động tốt hơn cũng phụ thuộc vào kích thước và bản chất của đầu vào - đảm bảo rằng bạn kiểm tra phương pháp của mình trên đầu vào thực tế.
Yuval Filmus

2

Đây là một chương trình bậc hai. Bạn đang cố gắng giảm thiểu tổng số(xTôi-yTôi)2 tùy thuộc vào xTôi-xTôi-1cTôi.


Câu trả lời này "Điều này có thể được phân loại / đóng khung lại như một vấn đề nổi tiếng không?" nhưng nó sẽ được tốt đẹp để cung cấp thêm chi tiết.
David Richerby
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.