मान लीजिए हमारे पास एक m x n बाइनरी मैट्रिक्स है, हम मैट्रिक्स के कॉलम को किसी भी क्रम में रिअरेंज कर सकते हैं। हमें मैट्रिक्स के भीतर सबसे बड़े सबमैट्रिक्स का क्षेत्रफल ढूंढना है जहां कुछ रिऑर्डरिंग करने के बाद सबमैट्रिक्स का हर एलिमेंट 1 हो।
उदाहरण के लिए, यदि इनपुट है:
| 1 | 0 | 1 |
| 1 | 1 | 1 |
| 0 | 0 | 1 |
तो आउटपुट 4 होगा क्योंकि, कॉलम स्वैप करने के बाद हमें मैट्रिक्स मिलता है:
| 1 | 1 | 0 |
| 1 | 1 | 1 |
| 0 | 1 | 0 |
यहां अधिकतम सबमैट्रिक्स चार 1's के साथ वर्गाकार आकार का है।
हल करने के चरण
row :=मैट्रिक्स की पंक्ति संख्या,col :=मैट्रिक्स की कॉलम संख्याjको 0 सेcol - 1तक लूप चलाएं:iको 1 सेrow - 1तक लूप चलाएं:- यदि
matrix[i][j] == 1, तोmatrix[i][j] := matrix[i][j] + matrix[i-1][j]
- यदि
ans := 0iको 0 सेrow - 1तक लूप चलाएं:matrix[i]सूची को सॉर्ट करेंjकोcol-1से 0 तक घटाते हुए लूप चलाएं:- यदि
matrix[i][j] == 0, तो लूप से बाहर निकलें ans = max(ans, (col-j) * matrix[i][j])
- यदि
ansवापस करें।
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
def solve(matrix):
row, col = len(matrix), len(matrix[0])
for j in range(col):
for i in range(1, row):
if matrix[i][j]:
matrix[i][j] += matrix[i-1][j]
ans = 0
for i in range(row):
matrix[i].sort()
for j in range(col-1, -1, -1):
if matrix[i][j] == 0:
break
ans = max(ans, (col-j) * matrix[i][j])
return ans
matrix = [[0,0,1],[1,1,1],[1,0,1]]
print(solve(matrix))
इनपुट
[[0,0,1],[1,1,1],[1,0,1]]
आउटपुट
4