递归方法花费太长时间来计算结果

时间:2016-11-25 09:35:06

标签: algorithm recursion dynamic-programming

我有一组offers,我有一个cart of Items。该套优惠使得该套优惠中的所有优惠都是相互冲突的优惠,这意味着可以在购物车中的商品上应用多个商品。

示例:

These are my offers:
offerId  Offer Description
1        vim+cabbage will give discount of 500
2        cabbage has rs 50 discount
3        vim has Rs. 30 discount

This is my cart:

Item      : quantity
cabbage   : 10
vim       : 5

现在我想找到可以应用于购物车的最佳优惠。在上面的情况下,我最好的报价是我每次提供5个数量的vim和卷心菜的优惠1,这将给我5 * 500的总折扣和剩余的5个卷心菜我申请优惠2,这将给我5 * 50的折扣

所以我的总折扣是:5 * 500 + 5 * 50 = 2750。

要注意的是,另一个选择是在10个数量的卷心菜上应用优惠2,并在5个量的vim上提供3个。这会给我一个折扣:10 * 50 + 5 * 30 = 650,这比第一种情况要小。但这是错误的,因为最好的报价将是上述报价。

现在这只是其中一个例子。我可以在购物车中有许多重叠的商品和许多商品,这些商品会在哪些商品上重叠。

我尝试了一种递归方法来解决这个问题。伪代码在这里:

 func recursive(offers, cartItems){
       if(offers[0] is applicable on cartItems){
       lDiscount = recursive(offers-offer[0], cartItems -variantsOnWhichOfferApplied) + discount 

        rDiscount = recursive(offers - offers[0],cartItems)
        if (lDiscount > rDiscount){
             return lDiscount
         } else{
             return rDiscount
        }  

 }else{
         recursive(offers-offer[0],cartItems)
    }
        }

offer是一系列优惠:

在这种情况下:优惠1可以在购物车上应用5次,优惠2可以应用10次,提供3次可以应用5次。所以在offers数组中我有这样的条目:

offers = [1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3]

我得到了正确的答案,但递归花了太长时间来解决这个问题。

任何人都可以告诉我如何将其转换为dp,或者如果有其他方法可以减少此方法的时间复杂度。

感谢。

0 个答案:

没有答案