Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 矩阵中零的最大路径搜索_Arrays_Performance_List_Python 3.x_Matrix - Fatal编程技术网

Arrays 矩阵中零的最大路径搜索

Arrays 矩阵中零的最大路径搜索,arrays,performance,list,python-3.x,matrix,Arrays,Performance,List,Python 3.x,Matrix,给定1和0的10 x N矩阵,例如: 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 注: 列中的零总是在连续两次1之间。例如,不允许使用列,例如101011 每个列中必须至少有一个0的间隙,即不允许出现列,例如:1 我想

给定1和0的10 x N矩阵,例如:

1 1 1 1 1 1 1 1
1 1 0 1 1 0 0 1
0 0 0 1 1 0 0 1
0 0 0 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
注:

  • 列中的零总是在连续两次1之间。例如,不允许使用,例如
    101011

  • 每个列中必须至少有一个0的间隙,即不允许出现列,例如:
    1

我想找到从左到右最长的连续零条纹。在这种情况下,这将是4,对应于从顶部开始的第5行第二列中开始的路径

第二长是3,有3个例子

我对此有点困惑,特别是对于非常大的N(~10M)。我正在寻找正确的方法/数据结构的建议,或者类似的问题和使用的算法。建模问题的另一种可能方法是使用两个列表表示问题:

L1 = [2, 2, 1, 4, 4, 1, 1, 3]
L2 = [6, 3, 5, 5, 5, 5, 5, 5]
但是仍然不太确定如何使用、
sum()
max()
函数提出有效的解决方案:

import itertools

m = [
    [1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 0, 1, 1, 0, 0, 1],
    [0, 0, 0, 1, 1, 0, 0, 1],
    [0, 0, 0, 1, 1, 0, 0, 0],
    [1, 0, 0, 0, 0, 1, 0, 0],
    [1, 0, 1, 1, 1, 1, 1, 1],
    [1, 0, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1]
]

max_zero_len = max(sum(1 for z in g if z == 0) 
                   for l in m for k,g in itertools.groupby(l))

print(max_zero_len)
输出:

4

在itertools中,对于m中的l,对于k,对于g。groupby(l)
-将为每个嵌套列表的
1
0
值的每个连续序列生成一个单独的组。(如
[1,1],[0],[1,1],[0,0]…

sum(如果z==0,则g中的z为1)
-仅考虑
0
的序列,并使用
sum
函数计算其长度


max(…)
-获取零(
0
)序列中的最大长度

N有多大?因为数组中最多有10个零,并且只有
1
0
,所以可以为所有行生成字符串,并检查行中是否有
'0000000000'
。如果不是,则继续使用9个零,依此类推。对于10万行来说可能不太好。给一些足够的理由支持下表决,如果你不是胆小鬼,我没有下表决,你能再解释一下代码中发生了什么吗?@dimebucker91,请看我的解释。我只是尝试创建一些N值更大的测试用例,你认为这对如此大的输入有什么作用?试着做一个测试。作为替代,我们可以考虑使用<代码> NoMPy < /Cult>模块。