Largest rectangular sub matrix with the same number

后端 未结 4 1047
醉梦人生
醉梦人生 2020-12-12 17:36

I am trying to come up with a dynamic programming algorithm that finds the largest sub matrix within a matrix that consists of the same number:

example:



        
4条回答
  •  借酒劲吻你
    2020-12-12 18:06

    This question is a duplicate. I have tried to flag it as a duplicate. Here is a Python solution, which also returns the position and shape of the largest rectangular submatrix:

    #!/usr/bin/env python3
    
    import numpy
    
    s = '''5 5 8
    5 5 7
    3 4 1'''
    
    nrows = 3
    ncols = 3
    skip_not = 5
    area_max = (0, [])
    
    a = numpy.fromstring(s, dtype=int, sep=' ').reshape(nrows, ncols)
    w = numpy.zeros(dtype=int, shape=a.shape)
    h = numpy.zeros(dtype=int, shape=a.shape)
    for r in range(nrows):
        for c in range(ncols):
            if not a[r][c] == skip_not:
                continue
            if r == 0:
                h[r][c] = 1
            else:
                h[r][c] = h[r-1][c]+1
            if c == 0:
                w[r][c] = 1
            else:
                w[r][c] = w[r][c-1]+1
            minw = w[r][c]
            for dh in range(h[r][c]):
                minw = min(minw, w[r-dh][c])
                area = (dh+1)*minw
                if area > area_max[0]:
                    area_max = (area, [(r, c, dh+1, minw)])
    
    print('area', area_max[0])
    for t in area_max[1]:
        print('coord and shape', t)
    

    Output:

    area 4
    coord and shape (1, 1, 2, 2)
    

提交回复
热议问题