簡體   English   中英

如何從多種產品中找到最便宜的組合

[英]How to find the cheapest combinations from a number of products

給我一張桌子

專賣店

[A][B][C]

產品展示

[P1][P2][P3][P4]

其價格列出如下

[  ][A][B][C]
[P1][6][4][2]
[P2][3][5][7]
[P3][1][9][9]
[P4][8][4][9]

假設用戶想盡可能便宜地在2家商店中購買所有商品,那么是否只有高效的算法可以做到?

這是旅行購買者問題嗎?

假如說:

用戶想在2家商店中購買所有商品

算法草圖:
使用二維查詢表,其中存儲為列和行。

[x][A]  [B]  [C]  
[A][inf][]   []  
[B][]   [inf][]  
[C][]   []   [inf]

對角線初始化為無窮大,因為您需要選擇兩個不同的存儲。
現在,填充查找表的右上三角形或左下三角形。

例如,在位置[A],[B]中,您選擇了商店A和商店B。因此,只能從這兩個商店中購買產品,這意味着您可以采取貪婪的方法(以便宜的一種為准)。 最后,將價格總和存儲在查找表中。
數值最小的條目是解決您的問題的方法。 此外,您需要檢查一個商店的每種產品都比另一商店便宜的情況,因此在此草圖中,所有產品都將在一個商店中購買。

算法的復雜度應為O(n²m),其中n是商店數量,m是產品數量。

我覺得只能使用排除功能。 在每次裝訂時,您都會刪除一個效率最低的存儲。 這使Polynomail解決方案的O(N³)時間復雜度最差。

您可以再添加三列。

一分鍾(A,B)

一分鍾(A,C)

一分鍾(B,C)

計算這三列的總和。 如果最低的總和是列min(A,C),則轉到存儲區A和C。

就復雜性而言,該算法將非常有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM