python:algorithm - 从mean中收集项目

时间:2011-11-14 19:14:27

标签: python algorithm

不确定这是否是正确的地方,但我有一个与算法相关的问题,我不能想到一个有效的算法。 所以想到分享我的问题陈述.. :) 为了简化我想要解释的内容,让我创建一个假设的例子。

假设,我有一个列表,其中包含一个包含两件事的对象..

lets say product id and price

现在,这是一个很长的清单......像库存一样...... 除此之外,我已经定义了三个价格段......低价,中价和高价 然后是k1,k2,k3,其中k1,k2和k3是比率。 因此,现在的工作是,我必须从这个庞大的库存中收集产品,以便从低价格范围中获得n1种产品,来自中等价格范围的n2种产品和来自高价格范围的n3种产品......其中n1:n2: n3 == k1:k2:k3

现在,我如何有效地实现以下目标。 我的目标是低价位是100美元 我必须收集这个系列的20个产品.. 中间价格范围大概是500美元 等等

所以我从100美元开始..然后寻找90到100之间以及100到110之间的项目 假设我在区间1低(90,100)中找到5个产品,在区间1高(100,110)中找到2个产品 然后,我进入下一个低间隔和下一个高间隔。 我继续这样做,直到我得到这个时间间隔内的产品数量。

我该怎么做?还有一种情况,特定价格范围内的产品数量少于我需要的数量......(也许中间价格范围是105美元......)所以在这种情况下该怎么做.. 请原谅我,如果这不是正确的平台..从问题可以看出,这更像是一个辩论性问题,而不是“我得到这个错误”类型的问题。 感谢

3 个答案:

答案 0 :(得分:2)

您可能正在寻找selection algorithm
首先找到n1'最小元素,将其设为e1下限列表是所有元素element <= e1
对其他范围做同样的事情。

下界列表的伪代码:

getLowerRange(list,n):
  e <- select(list,n) 
  result <- []
  for each element in list:
     if element <= e:
         result.append(element)
  return result

注意如果有许多“相同”的项目[结果将是一个更大的列表],此解决方案将失败,但找到这些项目并将其从结果列表中删除并不难。

请注意,选择算法为O(n),因此此算法将消耗与列表大小相关的线性时间。

答案 1 :(得分:2)

方法1

如果分配哪些产品属于三个价格段永远不会改变,为什么不简单地建立3个列表,一个用于每个价格段中的产品(假设这些集合是不相交的)。 然后你可以随机选择这些列表(either with or without replacement - 如你所愿)。每个班级的项目数量由比率给出。

方法2

如果要预先指定产品 - 价格 - 细分 - 分配,例如,通过在函数调用中传递每个细分的相应价格值,您可能希望按价格对产品进行排序并使用二进制搜索来选择m-nearest-neighbors(例如)。可以根据比率指定参数m。如果您指定了最大距离,则可以拒绝超出所需价格范围的产品。

方法3

如果需要自主确定产品价格段分配,您可以应用所选的clustering算法,例如k-means,将产品分配到k = 3价格段。对于实际的产品选择,您可以按上述方式进行类似的操作。

答案 2 :(得分:0)

您似乎应该尝试使用数据库解决方案,而不是使用列表。看看sqlite。默认情况下它在Python中