在给出一个价值表的情况下,在"团购"中寻找最佳"交易"

ano*_*ard 3 php python math

使用PHPPython,但我确信基本功能是不可知的.

我不确定正确的术语,数学理论或算法是什么,否则我肯定Google会在几分钟内为我解决这个问题.

我有一个类似于以下的数据集:

cost | qty | ppl | store
------------------------
   30|  500|   10|     1
   40|  600|   12|     2
   35|  500|   14|     3
   50|  700|   10|     1
   30|  700|   12|     1
   40|  250|   14|     2
Run Code Online (Sandbox Code Playgroud)

我要做的是找到基于这些限定符的"最佳"行:

  • 成本:越低越好.
  • 数量:越高越好.
  • ppl:越低越好.
  • store:在这种情况下无关紧要,但后来用于根据'store'找到"best".

从本质上讲,我试图在"团购"的情况下找到最好的特定"交易",在这种情况下,需要最少数量的人才能获得最佳的"价值"(数量 - 成本 - 成本).

在我看来,由于数量的增加,最好的整体将是第5行.

如果有一个名称,以及关于这个主题的好文章(维基百科?),我很乐意自己完成这个.谢谢你的时间!

Gab*_*aru 5

qty / (cost * ppl)按该数字计算和排序列表.这个数字将更高更高qty和更低的costppl.

你可能想要使用这样的东西(python):

def cmp(a, b):
    return (a["qty"] / (a["cost"] * a["ppl"])) - (b["qty"] / (b["cost"] * b["ppl"]))

list = sorted(list, cmp)
Run Code Online (Sandbox Code Playgroud)

解释:想想如果qtycost * ppl不变的情况下变得更大会发生什么.这个比例会增加,因为a/x > b>x如果a > b.现在有了另外两个价值观,反之亦然; 那么x/a > x/b,如果a < b这个比例实际上会在减少costppl增加时减少(想想如果你将100美元分成两个人而不是三个人会发生什么;如果你将它分成两个,每个人将获得100/2 = 50美元.如果你分裂它到三,每个将得到100/3~ = 33 $,这是更少).(对不起,如果我说得不够清楚;我很累)