高效解決多商品組合滿減優惠計算:JavaScript回溯法實現
本文提供一種基于回溯法的JavaScript解決方案,用于計算包含單品折扣和多商品組合滿減優惠的最終價格。 該方案能夠在考慮所有商品組合的基礎上,找到最大優惠,并詳細分解優惠明細。
已知條件:商品信息(包含商品ID、名稱、價格和關聯優惠ID)、優惠規則(包含優惠ID、類型、滿減條件和優惠幅度),以及購買商品清單(包含商品ID和數量)。目標是計算最終價格和優惠分解。
我們采用回溯法遍歷所有可能的滿減優惠組合。 首先計算單品折扣價,然后遞歸探索所有可能的滿減優惠組合,找出最大化優惠金額的組合。
立即學習“Java免費學習筆記(深入)”;
以下是一個JavaScript實現,包含核心算法和輔助函數:
let tb_goods = [ { id: 1, goodsName: "A", price: 10, spceList: [101, 102, 105] }, { id: 2, goodsName: "B", price: 6, spceList: [101, 102, 105, 106] }, { id: 3, goodsName: "C", price: 7, spceList: [101, 103, 107] }, { id: 4, goodsName: "D", price: 7, spceList: [101, 104, 107] }, ]; let tb_spce = [ { id: 101, type: "滿減", msg: "滿20減2", full: 20, reduction: 2 }, { id: 102, type: "滿減", msg: "滿35減6", full: 35, reduction: 6 }, { id: 103, type: "滿減", msg: "滿28減3", full: 28, reduction: 3 }, { id: 104, type: "滿減", msg: "滿30減5", full: 30, reduction: 5 }, { id: 105, type: "折扣", msg: "2件9.5折", full: 2, reduction: 0.95 }, { id: 106, type: "折扣", msg: "3件7折", full: 3, reduction: 0.7 }, { id: 107, type: "折扣", msg: "2件8折", full: 2, reduction: 0.8 }, ]; // ... (compute函數以及其他輔助函數的代碼,與答案中提供的一致) ...
compute 函數是核心算法,discomposebacktrace 和 composebacktrace 函數分別處理單一滿減優惠和組合滿減優惠的遞歸搜索。 通過調用 compute 函數并傳入購買商品清單,即可獲得最終的優惠計算結果。 代碼包含多個測試用例,確保算法的準確性。 需要注意的是,由于回溯法的特性,在商品數量或優惠規則非常復雜的情況下,計算時間可能會較長。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END