[英]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.