通过优化选择最佳行

时间:2013-12-17 16:49:29

标签: python algorithm optimization

我有一个二维数组,如下所示:

243 432
342 540
150 250
430 100
.   .
.   .
.   .
.   .

现在我必须选择一个"完整的行"来自给定的2d数组,这是"最好的"。 "最佳"定义为选择第一列中第一列为最大值(或最接近最大值)的行,第二列中第二列中所有值的最小值(或最接近最小值)。

有没有最佳的执行此操作的方法,最好是在python中?

编辑:在选择行

期间,第二列的权重更大

3 个答案:

答案 0 :(得分:2)

为什么不对它进行排序并取第一个值? sorted可以使用一个关键函数来提供值进行排序。

myData = [                                                                       
    [1.0, 2.0, 3.0, 4.0],                                                        
    [1.1, 2.1, 3.1, 4.1],                                                        
    [1.2, 2.2, 3.2, 4.2],                                                        
    [1.3, 2.3, 3.3, 4.3]                                                         
]
w1 = 1    # First column weight
w2 = 2    # Second column weight                                                       

myRow = sorted(myData, key=lambda x: w2 * x[1] - w1 * x[0])[0]                         
print(myRow)

对数据没有任何限制,你不能以比线性时间更快的速度执行此操作。

答案 1 :(得分:0)

  1. 让maxval为max(col0)和minval - min(col1)
  2. 使用下面的排序功能
  3. 对矩阵内的行进行排序
  4. 获取排序数组的第一项
  5. def mycmp(a, b):
        ret = cmp(a[1] - minval, b[1] - minval)
        if ret != 0:
            return ret
    
        return cmp(maxval - a[0], maxval - b[0])
    
    matrix.sort(cmp=mycmp)
    print "Optimal: ", matrix[0]
    

答案 2 :(得分:0)

  1. 按第二列升序排序
  2. 选择第二列中最小的所有行(它们在排序数组中排在第一位)
  3. 按第一列降序排列那些行
  4. 第一行是“最好的”。
  5. 如果这不是您想要的,那么您需要更准确地指定何时用较小的第二列值进行权衡,以获得更大的第一行第一列。

    如果您无法仅对数组的一部分进行排序(步骤3),则只要您的排序稳定,您也可以使用步骤3,1,4。

    请注意,这不是最佳算法,但它会相当接近。