基于交易计算最小账单金额的算法

时间:2014-04-20 05:17:19

标签: java algorithm

我需要在java中开发一个程序,我需要计算给定项目的最小费用。

每件商品的标准价格如下: 洋葱 - Rs.5 番茄 - Rs.10 马铃薯 - Rs.2

还有一个列表包含不同的商品交易。一件商品可以有多笔交易。

2洋葱 - Rs.7.5
3洋葱 - 10卢比

3番茄 - Rs.25
5番茄--Rs.45

3马铃薯 - Rs.5
4马铃薯 - 卢比。 6.5

它可以有更多。 因此,该方法需要以这样的方式计算账单金额:对于任何给定的数量(考虑给定的交易),它应该给出最小的账单金额。

输入将采用以下格式程序应计算要支付的最低金额: -

洋葱,西红柿,洋葱,马铃薯,番茄,洋葱,洋葱

(4)onion -> (10+5)  
(2)tomato -> (10*2)  
(1)potato -> 2  
------------------
minimum bill -> 37

我有两个班,一个叫蔬菜和蔬菜。其他名为Deal的如下

public class Deal {

    private String code;
    private String quantity;
    private String price;

    //getters & setters         
}



public class Vegetable{

private String code;
private String name;
private String price;

//getters & setters 
}

2 个答案:

答案 0 :(得分:0)

确实这是knapsack problem。只需将总数视为背包的体积,将1除以每个项目的价格作为其值。

示例:

(4)洋葱 - > W = 4
项目:
2洋葱 - Rs.7.5 - > w = 2,值= 1 / 7.5
3洋葱 - 10卢比 - > w = 3,值= 1/10

注意:分别为每个项目解决此问题。

顺便说一下,互联网上有许多源代码,如this,但我建议你先试试自己。

答案 1 :(得分:0)

我不打算为你做整件事,但这就是这个算法的样子:

public int getPrice(int code)
{
    int price = getVegetableBasePrice(code);
    Iterator<Deal> it = deals.iterator();
    while(it.hasNext())
    {
        Deal next = it.next();
        if(next.getCode() == code)
        {
            price = Math.min(price, deal.getPrice());
        }
    }

    return price;
}

一次计算所有项目的所有价格会好得多,因为当你可以用线性时间实现这个时,这将导致多项式时间复杂度。这取决于你需要算法有多好。