我的解決方案是我們首先假設所有列都有1,然後我們一行一行,遍歷我們現有的可能解決方案,然後剪切不能成爲解決方案的列。
該溶液是用Java編寫:
解決方案1:爲O(n^2)直線前進
public class Main
{
// Given A: an M x N matrix
public static ArrayList<Integer> solve (Integer [][] matrix)
{
// Assuming all columns have 1s, we have list S
ArrayList<Integer> S = new ArrayList<Integer>();
// S = { 1, 2, .., N }
for (int i=0; i < matrix[0].length; i++)
{
S.add(i);
}
// For Row i: 1..M
for (Integer i = 0; i < matrix.length; i++)
{
// For Column j in list S
for (Integer j : S)
{
if (matrix[i][j] != 1)
{
S.remove(j);
}
}
}
return S;
}
public static void main (String [] args)
{
int [][] matrix =
{
{1,1,1},
{0,1,1},
{0,0,1},
};
ArrayList<Integer> columns = solve (matrix);
System.out.print(" columns that have 1s are: ");
for (Integer n : columns) System.out.print(n+" ");
}
}
解決方案2:O(N)使用定製的數據結構
private class Column
{
public ArrayList<Integer> data;
public int count;
public Column()
{
data = new ArrayList<Integer>();
count = 0;
}
public void add (int val)
{
data.add(val);
count += val;
}
}
public class Main
{
public static void main (String [] args)
{
Column [] matrix =
{
new Column(),
new Column(),
new Column()
};
matrix[0].add(1);
matrix[0].add(0);
matrix[0].add(0);
matrix[1].add(1);
matrix[1].add(1);
matrix[1].add(0);
matrix[2].add(1);
matrix[2].add(1);
matrix[2].add(1);
System.out.print(" columns that have 1s are: ");
for (Column column : matrix)
{
if (column.count == column.data.size())
System.out.print(n+" ");
}
}
}
'n'是矩陣或其維度中元素的數量? – millimoose
您需要並行化您的算法以使用一個線程或進程來處理一列。這就是相機中的矩陣圖像處理如何完成的。 – shazin
@shazin這不會改變算法的複雜性。 – millimoose