【发布时间】:2022-01-25 17:29:48
【问题描述】:
我正在尝试找到比当前的蛮力解决方案更快的解决方案,该解决方案假定循环遍历所有元素并且在较大的列表中效率极低。
更具体地说,我有一个包含 N 个元素的列表。这些元素中的每一个都有另一个可变数量的元素列表。我们的目标是找出所有列表中的前 3 个产品,因为任何时候都只能使用任何列表中的一个数字。
例如,如果我们有列表(字典):
MAIN LIST: {'a':0.97,'b':0.88,'c':0.77}
A SUB-LIST: {'a1':0.68,'a2':0.13,'a3':0.04}
B SUB-LIST: {'b1':0.77,'b2':0.66,'b3':0.02}
C SUB-LIST: {'c1':0.99,'c2':0.92,'c3':0.13}
RESULT: 1.c*c1 2.c*c2 3.b*b1
我想从所有可能的产品中获得最高的数字。对列表进行排序、遍历所有元素并将它们添加到具有前 3 个项目的临时列表是当前的解决方案,但在处理具有超过 1,000 个元素的列表时会出现问题。
鉴于每个列表的长度可能超过 1000 个元素,有谁知道此处可能使用的任何类型的算法?
或者,如果在良好的时间复杂度下无法找到 3 - 您是否知道任何可能用于查找的算法,例如在所有列表中排名前 1 的产品?
【问题讨论】:
-
您是否可以更改这些值的存储方式和接收方式,或者这是您无法控制的?
-
有一种方法,如果需要的话。我基本上是自己创建这些列表/字典。重点是找到具有最高产品的子列表的前 3 个键。
-
主列表中有多少键?像a,b,c ...?只是
a与a1或a2或a3...配对? -
它们只能与自己的种类相乘,或者你可以有例如
c * b1? -
@ferdy 主列表中键(元素)的数量可能会有所不同。假设它是 N。
标签: python algorithm math optimization