W jaki najbardziej optymalny sposób rozwiązać takie zadanie (będę programował Javie, ale język nieważny):

Zadanie:
Zaprojektuj usługę realizującą zamówienia w pewnym sklepie.

Danymi wejściowymi jest lista dostępnych produktów i ich lokalizacja tak jak w poniższym przykładzie:

LOCATION SKU AMOUNT
Gliwice prod-1 10
Gliwice prod-2 12
Gliwice prod-3 5
Munich prod-1 4
Munich prod-2 4
Munich prod-3 4
Montreal prod-1 4
Montreal prod-4 5

Drugie dane wejściowe to lista zamówionych produktów w następującym formacie:

DESTINATION SKU AMOUNT
Sydney prod-1 14
Sydney prod-2 10
Sydney tprod-3 3
Tokyo prod-2 6
Sydney prod-3 1
Tokyo prod-4 5
where:

LOCATION - lokalizacja, gdzie znajduje się produkt
DESTINATIOn - adres przesyłki
SKU (stock-keeping unit) identyfikator produktu
AMOUNT liczba produktów dostępnych w danej lokalizacja/ liczba zamówionych produktów

Moim zadaniem jest zwrócenie planu dostarczenia tych produktów do podanych lokalizacji, ale tak, aby było to jak najbardziej wydajny plan, aby jak najmniej nadrabiać drogi. To znaczy, że powinienem mieć minimalną liczbę unikalnych par lokalizacji i destynacji w zwracanym wyniku.

Przykładowy wynik:

LOCATION DESTINATION SKU AMOUNT
Gliwice Sydney prod-1 10
Munich Sydney prod-1 4
Gliwice Sydney prod-2 10
Munich Sydney prod-3 4
Gliwice Tokyo prod-2 2
Munich Tokyo prod-2 4
Montreal Tokyo prod-4 5

W tym wyniki jest 5 unikalnych par (Gliwice-Sidney, Gliwice-Tokyo, Munich-Sidney, Munich-Tokyo, Montreal-Tokyo).

Z góry dzięki za pomoc!