我重新開發一個籃子用戶選擇零售產品匹配到一個或多個有效促銷遺留系統。這些促銷活動是行業標準的BOGOF(買一送一),買二送三,購買產品X和Y並獲得10%折扣等等,但都要求您可以將潛在物品列表過濾爲那些滿足這些促銷活動。組合,形成促銷
我想解決方案採取整個購物籃零售項目和分析他們在一個操作,而不是現行的方法匹配單個產品,當它是訂購。 (目前的解決方案導致不受歡迎的限制)
每個促銷都有一系列必須存在的合格產品才能觸發促銷活動。這些被佈置在組(或位置)n編號,例如:
Example "Buy two get third free" Promotion =
| Item 1 | | Item 1 | | Item 2 |
| or | | or | | or |
| Item 2 | AND | Item 4 | AND | Item 6 |
| or | | or | | or |
| Item 3 | | Item 9 | | Item 4 |
Set 1 Set 2 Set 3
每個促進必須從每個本組恰好一個產品中,除項目出現在同一組多次。該促銷活動可以具有無限制(但通常是「套」)產品。
作爲一個簡單的例子,Item 1, Item 4 and Item 6
的購物籃會觸發促銷, 類似的Item 1, Item 1 and Item 2
的購物籃也會觸發它。 然而,Item 1, Item 2 and Item 3
的籃子不會因爲每個集合都不滿意。
除了明確檢測何時觸發促銷活動的明確方法之外,我還需要恢復該物品已匹配到的集合(位置)以處理定價的細節等。如果更昂貴(以貨幣計算)的項目在將其分配給促銷時比較便宜(等同匹配)的項目更受歡迎,那麼也是可取的。
希望下一部分將有助於解決方案,而不是聽起來不清楚,它會造成不必要的噪音,隨意忽視!
到目前爲止,我的最佳解決方案是在「購物籃」中爲每個零售商品 創建一個新套餐,並保存該商品滿足的促銷套餐(位置)。 即。
Item 1 satisifies sets: {1,2}
Item 4 satisifies sets: {2,3}
Item 6 satisifies sets: {3}
然後我的理論是,你「檢查」是套這個列表包含在每個位置,每個位置的推廣充滿了獨特的項目。到目前爲止,我的工作示例都使用蠻力,循環或遞歸來產生所有組合集合(以上),試圖檢查是否存在唯一的組合。這非常嚴重,除了一個非常微不足道的例子,在現實世界中根本不起作用。 (這個功能將在物品添加到購物籃時實時調用,所以需要快速)
很多研究表明,二分匹配會產生一些期望的結果,但我只能找到研究文章和相當複雜的數學關於這個問題的文本。一些僞代碼或基本邏輯會很好。
我的兩個問題基本上都是:
1)是否有人看到一個更好/更快/更簡單的分析顧客籃生產配套的促銷方式。
2)假設我已經確定了將物品匹配到相關位置的最有效方式,那麼確定零售物品列表以記錄促銷活動的最便宜方式是什麼?
任何援助將感激地收到,因爲我不能再看到隧道盡頭的光! (最終的解決方案將在.NET中,我們使用SQL Server 2008 R2)。
快速澄清 - 爲什麼項目1,2,3不能滿足您的例子?項目1滿足{1,2},項目2滿足{1,3},項目3滿足{1}。所以我們可以讓項目3滿足{1},項目1滿足{2},項目2滿足{3}。除非我錯過了什麼 – Mshnik
每個促銷有多少套?任何特定的促銷活動都可以減少到一個狀態機,但是狀態的數量隨着數量的增加而快速增長。 – QuestionC