二维数组中元素比较的算法

时间:2014-10-19 00:58:38

标签: python arrays algorithm

我正在为销售iPhone配件的公司创建一个Python程序。该程序将具有一个函数,该函数接受列表列表作为参数,其中每个列表元素包含两个描述产品的值 - 价格和估计质量(整数值)。我想找一个案例,其中一个项目的价格低于另一个项目,但其质量高于另一个。例如,我将把这个列表传递给我的函数:

some_inventory = [[11.95, 10], [7.95, 12], [6.50, 3],...]

在此列表中,元素[7.95,12]将比[11.95,10]具有更低的价格和更高的质量。如果存在这种情况,我想返回一个类似good_deal = True的布尔值。

some_inventory中有大约十万个这些列表元素。我可以使用蛮力方法将每个价格与所有其他价格进行比较,然后相互检查它们的质量,但这非常慢。我尝试先按价格排序,对于价格相同的物品,我会消除质量较低的物品,只需将最高质量的物品添加到新的清单中(例如,如果有[4.50,2],[4.50,5]的物品,[4.50,8]我只将[4.50,8]添加到新列表中。但这似乎太耗费时间了。

有没有更有效的算法来进行这些比较?它不必是python,伪代码或C / C ++就好了。

1 个答案:

答案 0 :(得分:1)

def has_good_deal(deals):
    return sorted(deals) != sorted(deals, key=lambda x: list(reversed(x)))

表达式的左侧按价格对交易进行排序,如果它们的价格相等,则按其质量进行排序。表达式的右侧按交易质量对交易进行分类,如果它们的质量相等,则按其价格进行分类。

如果排序不相同,则至少有两个交易[p1, q1][p2, q2]已交换位置。如果他们交换了地点p1<p2q1>q2,这意味着与[p1, q1]相比,[p2, q2]是一个很好的交易。如果排序相同,那就没有什么好处。