2015-12-31 58 views
0

我想要获取包含矩阵中行的最小元素。查找Python中包含矩阵的最小元素

示例输入:

lst = [[1, 2, 3], [2, 3], [3]] 

输出:

[3] 

又如输入:

lst = [[1], [2, 3], [2, 3]] 

输出:

[1, 2], [1, 3] 

我试着考虑组合行,但是当我们有大矩阵时,它会花费很长时间和大量的RAM。

+4

请问您可以指定“覆盖行”的含义吗?另外,你提到的矩阵在哪里? – Amnon

+0

为什么第二个'[[1,2],[1,3]]'而不是'[1,3]'? – TigerhawkT3

+0

,因为我们可以用两种方式覆盖行,两者都是最小的: [1,2],[1,3]都有两个元素,都覆盖所有行 – samer226047

回答

0

为user2357112说这个问题,你可以找到关于维基百科这里关于它的更多信息: https://en.wikipedia.org/wiki/Set_cover_problem 这里我提出这个增强的贪心算法来解决这个问题唯一且仅当每一行中的元素独特台(套)。

from collections import Counter 
matrix = [[1,2,3],[2,3],[2,3]] 
minimum =[] 
while len(matrix)!=0: 
    coun = Counter(reduce(lambda x, y: x+y,matrix)) 
    value = coun.most_common()[0][0] 
    matrix = [s for s in matrix if value not in s] 
    minimum.append(value) 
print minimum 

这个解决方案将只提供一个解决方案,我相信这是大多数情况下,接受的近似。