【问题标题】:Algorithm to pick elements of collection to achieve average price选择收藏元素以实现平均价格的算法
【发布时间】:2020-04-02 17:53:58
【问题描述】:

我需要解决以下问题:

我有一系列附有价格的商品,我需要选择给定数量以达到给定的加权平均价格。

例如。

我可以以相同的价格将数量分组,以便更好地理解:

price    qty
$1.00    60
$1.04    80
$0.99    55
$1.10    130   

现在我需要从每个 bin 中选择我需要多少元素才能以平均价格 = 1.035 实现 100 个元素

您知道一种无需暴力组合即可搜索近似解的算法吗? - 我也时间有限。

它看起来像是某种背包算法,虽然我不确定我必须使用的约束。

谢谢

【问题讨论】:

    标签: algorithm combinatorics


    【解决方案1】:

    这是一个整数线性规划问题。

    将其表示为线性规划问题意味着变量abcda+b+c+d=100a*1+b*1.04+c*0.99+d*1.10=1.035*1000<=a<=600<=b<=800<=c<=550<=d<=130

    您没有明确说,但可能想要整数解(即购买的数量必须是整数),因此这是整数线性规划问题,而不是线性规划问题。虽然 ILP 问题通常是 NP-hard,但您可以在网上找到可以轻松解决这个小问题的求解器和算法。例如,试试 GLPK。

    另请注意,蛮力在这里可以很好地发挥作用; a,b,c,d 的组合只有 176851 种可供尝试。

    【讨论】:

    • 不错的答案。你确定有大约 450 万种组合吗?由于我们知道总共必须有 100 个元素,因此最大组合数(如果允许每个元素重复 100 次)将是 nCr(4 + 100 - 1, 4) = 176851 (en.wikipedia.org/wiki/…)。确切地说,我从给定的多集中获得了 147616 个长度为 100 的总组合。
    • @JosephWood nCr(103, 4) 大约是 450 万。我认为您计算错误。
    • 我很抱歉,我匆忙写了我的第一条评论。那应该是 nCr(4 + 100 - 1, 100),即 176851。记住,nCr 中的第二个数字是组合的大小,这意味着 nCr(100 + 4 - 1, 4) 意味着我们有 100独特的元素。这里我们只有 4 个独特的元素。
    • @JosephWood 你是对的,已编辑。我正在计算加起来等于或小于 100 的 a, b, c, d 的数量。 nCr(103, 3) 是正确的(或者你建议的等价的 nCr(103, 100) )。
    猜你喜欢
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2020-05-05
    • 2018-02-18
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多