Math, asked by diliprathod02750, 10 months ago

Fill in the blanks.

1) Stacking rectangles in a linear fashion gives us a

.

.​

Answers

Answered by tapatidolai
2

Answer:

GeeksforGeeks

Hire with us!

Login

Courses

Home

Algorithms expand_moreData Structures expand_moreLanguages expand_more

Interview expand_more

Students expand_more

GATE expand_more

CS Subjects expand_more

Quizzes expand_more

GBlog

Puzzles

What’s New?

perm_identity

Find the largest rectangle of 1’s with swapping of columns allowed

Given a matrix with 0 and 1’s, find the largest rectangle of all 1’s in the matrix. The rectangle can be formed by swapping any pair of columns of given matrix.

Example:

Input: bool mat[][] = { {0, 1, 0, 1, 0},

{0, 1, 0, 1, 1},

{1, 1, 0, 1, 0}

};

Output: 6

The largest rectangle's area is 6. The rectangle

can be formed by swapping column 2 with 3

The matrix after swapping will be

0 0 1 1 0

0 0 1 1 1

1 0 1 1 0

Input: bool mat[R][C] = { {0, 1, 0, 1, 0},

{0, 1, 1, 1, 1},

{1, 1, 1, 0, 1},

{1, 1, 1, 1, 1}

};

Output: 9

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

The idea is to use an auxiliary matrix to store count of consecutive 1’s in every column. Once we have these counts, we sort all rows of auxiliary matrix in non-increasing order of counts. Finally traverse the sorted rows to find the maximum area.

Note : After forming the auxiliary matrix each row becomes independent, hence we can swap or sort each row independently.It is because we can only swap columns, so we have made each row independent and find the max area of rectangle possible with row and column.

Below are detailed steps for first example mentioned above.

Step 1: First of all, calculate no. of consecutive 1’s in every column. An auxiliary array hist[][] is used to store the counts of consecutive 1’s. So for the above first example, contents of hist[R][C] would be

0 1 0 1 0

0 2 0 2 1

1 3 0 3 0

Time complexity of this step is O(R*C)

Step 2: Sort the columns in non-increasing fashion. After sorting step the matrix hist[][] would be

1 1 0 0 0

2 2 1 0 0

3 3 1 0 0

This step can be done in O(R * (R + C)). Since we know that the values are in range from 0 to R, we can use counting sort for every row.

The sorting is actually the swapping of columns. If we look at the 3rd row under step 2:

3 3 1 0 0

The sorted row corresponds to swapping the columns so that the column with the highest possible rectangle is placed first, after that comes the column that allows the second highest rectangle and so on. So, in the example there are 2 columns that can form a rectangle of height 3. That makes an area of 3*2=6. If we try to make the rectangle wider the height drops to 1, because there are no columns left that allow a higher rectangle on the 3rd row.

Step 3: Traverse each row of hist[][] and check for the max area. Since every row is sorted by count of 1’s, current area can be calculated by multiplying column number with value in hist[i][j]. This step also takes O(R * C) time.

Similar questions