2010-09-01 41 views
9

Câu hỏi thực tế diễn ra như sau:Giảm thiểu tổng khoảng cách: Vấn đề tối ưu hóa

McDonald's đang có kế hoạch mở một số khớp (n) dọc theo đường cao tốc thẳng. Các khớp này yêu cầu kho chứa thực phẩm của chúng. Một nhà kho có thể lưu trữ thực phẩm cho bất kỳ số lượng khớp, nhưng phải được đặt tại một trong các khớp. McD có một số lượng hạn chế kho (nói k) có sẵn, và muốn đặt chúng theo cách sao cho khoảng cách trung bình của các khớp từ kho gần nhất của chúng được giảm thiểu.

Cho một mảng (n phần tử) của tọa độ của các khớp và số nguyên 'k', trả về một mảng các phần tử 'k' cho tọa độ vị trí tối ưu của kho.

Rất tiếc, tôi không có sẵn bất kỳ ví dụ nào kể từ khi tôi viết xuống từ bộ nhớ. Dù sao, một mẫu có thể là:

array = {1,3,4,5,7,7,8,10,11} (n = 9)
k = 1

Ans: {7 }

Đây là những gì tôi đã suy nghĩ: Đối với k = 1, chúng ta chỉ cần tìm ra vị trí trung bình của tập hợp, sẽ cho vị trí tối ưu của nhà kho. Tuy nhiên, đối với k> 1, tập hợp đã cho nên được chia thành các tập con 'k' (phân tách, và các phần tử tiếp giáp của siêu bên), và trung bình cho mỗi tập con sẽ cung cấp cho các vị trí kho. Tuy nhiên, tôi không hiểu về cơ sở nào các tập con 'k' nên được hình thành. Cảm ơn trước.

EDIT: Có một biến thể cho vấn đề này: Thay vì tổng hợp/avg, hãy giảm thiểu khoảng cách tối đa giữa doanh nghiệp và nhà kho gần nhất. Tôi cũng không nhận được điều này.

+0

Đây có phải là bài tập về nhà không? Nếu có, hãy gắn thẻ như vậy. –

+0

Điều này đã đến trong một cuộc thi. –

+0

@ArpitTarang Tôi gặp phải vấn đề tương tự. Bạn có thể giải quyết nó không? – user3634974

Trả lời

0

Đường cao tốc thẳng làm cho bài tập này hoạt động trong lập trình động, hoạt động từ trái sang phải dọc theo đường cao tốc. Một giải pháp một phần có thể được mô tả bởi vị trí của kho hàng ngoài cùng bên phải và số lượng kho được đặt. Chi phí của giải pháp từng phần sẽ là tổng khoảng cách đến nhà kho gần nhất (đối với cố định k giảm thiểu điều này giống như giảm thiểu mức trung bình) hoặc khoảng cách tối đa cho đến kho gần nhất.

Ở mỗi giai đoạn, bạn đã tìm ra câu trả lời cho các khớp N tận cùng bên trái và được lập chỉ mục theo số lượng kho được sử dụng và vị trí của kho hàng ngoài cùng bên phải - bạn chỉ cần tiết kiệm chi phí tốt nhất. Bây giờ hãy xem xét phần tiếp theo và tìm ra giải pháp tốt nhất cho các khớp N + 1 và tất cả các giá trị có thể có của k và nhà kho tận cùng, sử dụng câu trả lời bạn đã lưu trữ cho N khớp để tăng tốc độ này. Một khi bạn đã làm việc ra các giải pháp chi phí tốt nhất bao gồm tất cả các khớp bạn biết nơi kho hàng ngoài cùng bên phải của nó là, cung cấp cho bạn vị trí của một nhà kho. Quay trở lại giải pháp có kho đó là khớp nối ngoài cùng bên phải và tìm ra giải pháp dựa trên đó. Điều đó mang lại cho bạn một kho hàng ngoài cùng bên phải - và vì vậy bạn có thể làm việc theo cách của bạn trở lại vị trí của tất cả các kho để có giải pháp tốt nhất.

Tôi có xu hướng nhận được chi phí làm việc này sai, nhưng với N khớp và kho k để đặt bạn có N bước để thực hiện, mỗi dựa trên xem xét không quá Nk giải pháp trước đó, vì vậy tôi nghĩ chi phí là kN^2.

+0

"Bây giờ hãy xem xét phần tiếp theo và tìm ra giải pháp tốt nhất cho các khớp N + 1 và tất cả các giá trị có thể có của k và nhà kho tận cùng, sử dụng câu trả lời bạn đã lưu trữ cho N khớp để tăng tốc độ này." Bạn có thể đưa ra ít nhất một gợi ý về cách thực hiện việc này không? –

+0

Ý tưởng cơ bản là câu trả lời tốt nhất cho một điểm nhất định có thể được mô tả giống như "đặt kho tại điểm này và sau đó sử dụng câu trả lời cho điểm 4 ở bên trái để nói nơi đặt kho khác" - nhưng ở đó thường là một vài chi tiết cần phải lo lắng về sự khác biệt đó. Nếu bạn không quen với giao diện lập trình động, ví dụ: hai ví dụ đầu tiên tại http://mat.gsia.cmu.edu/classes/dynamic/dynamic.html - hoặc tìm kiếm các hướng dẫn khác. – mcdowella

1

Đây KHÔNG phải là vấn đề về phân cụm, đây là trường hợp đặc biệt của sự cố vị trí cơ sở. Bạn có thể giải quyết nó bằng cách sử dụng một gói lập trình số nguyên/tuyến tính chung, nhưng vì vấn đề nằm trên một dòng, có thể có các thuật toán hiệu quả hơn (và ít tốn kém hơn về phần mềm) sẽ hoạt động. Bạn có thể xem xét lập trình động vì có thể có sự kết hợp các cơ sở có thể được loại bỏ khá nhanh. Nhìn vào P-Median problem để biết thêm thông tin.

+0

Tôi đã không nhận được nhiều từ các bài báo vấn đề p-median .. hầu hết trong số họ có một tham số thêm của 'chi phí vận chuyển' mà làm cho vấn đề phức tạp hơn. Hãy giúp tôi. –

+0

Tôi phát hiện ra đó là 'vấn đề vị trí cơ sở'. Tuy nhiên, họ vẫn có những thuật toán phức tạp cho các vấn đề 2d ... chỉ 1d của tôi. Cứu giúp? –

+0

Không quan trọng. Bạn vẫn có khoảng cách, chúng chỉ ở một chiều. – Grembo

Các vấn đề liên quan