2016-07-24 46 views
-2

我目前正在研究一個簡單的個人用腳本,它將列出我想要購買的所有物品以及價格比較器中每件物品的價格,並嘗試找到最便宜的方式來購買所有這些商品(請記住,如果您從同一商店購買多件商品,則只需支付一次運費)。最簡單的方法是什麼?確定最便宜的方式在線購買n種產品

我想過用匈牙利算法對於這一點,但意識到這可能不是來自同一家商店買最好的想法往往正是我們想,不是迴避。另一方面,試圖貪婪地發現手頭物品最多的商店也不足以導致他們出售這些商品並不意味着他們以最優惠的價格出售它們,即使我們只支付一次運輸費用。

你會推薦什麼?有一些容易實現的解決方案嗎?

+0

首先想到的是從一個可行的解決方案開始,以儘量減少不同商店的數量(即儘可能從單一商店購買多個產品),然後對每個產品看看是否從另一個商店購買它會降低總數除非您已經將商品分配給該商店,否則價格差異應抵消增加的運輸成本)。 – CompuChip

回答

0

這不是一個答案,而是對你的問題的澄清。由於評論太長,我在這裏發佈。

讓有M店鋪和N項目。給出矩陣A,其中A(i, j)是從商店i購買商品j的價格(如果商店i不銷售商品j,則我們將A(i, j)設置爲無窮大)。還給出了一個數組S,其中S(i)是店鋪i的運輸成本。

問題:找到函數b:{1,...,N} -> {1,...,M},這意味着從商店b(j),最大限度地減少總成本購買項目j

您已經可以看到這與匈牙利算法的設置不同,後者要求最小化PERMUTATION的排列順序爲{1,...,N}

在這一點上,有關於輸入的性質幾個問題:

  • 什麼是MN範圍?如果其中任何一個非常小(例如< 20),則指數算法可能是可接受的。
  • 是矩陣A稀疏(即大多數商品只能在少數商店購買)或密集(即大多數商品在大多數商店中都可用)?
1

我覺得這是一個很難解決的問題就是這樣,因爲如果你能解決這個問題正是你可能需要從https://en.wikipedia.org/wiki/Set_cover_problem問題,並建立了成本,使確切的解決您的問題將集合覆蓋問題的解決方案。可能在該文章或其他地方給出的一些近似解決方案會有所幫助。將高科技引入它的最簡單方法可能是找到一個整數線性編程包並使用它。

相關問題