2
A「廣義對角線」在一個NxN矩陣是選擇N個單元,以使得:在二進制矩陣找到一個「廣義對角線」
- 恰好一個單元從每一行和從每一列中選擇
- 每個選定單元格中包含一個非零值
我在尋找一種算法來找到一個廣義的對角線爲O(n^3)。在我看來,以下動態編程算法「足夠好」,但我不知道如何分析其複雜性。
Set<Set<Integer>> failedCache = new HashSet<Set<Integer>>();
List<Integer> find(int[][] matrix, Set<Integer> used, int row) {
int N = matrix.length;
if (failedCache.contains(used))
return null;
if (row == N) return new ArrayList<Integer>();
for (int col = 0; col < N; ++col) {
if (matrix[row][col] == 0)
continue;
if (used.contains(col))
continue;
Set<Integer> newUsed = new HashSet<Integer>(used);
newUsed.add(col);
List<Integer> answer = find(matrix, newUsed, row + 1);
if (answer != null) {
answer.add(col);
return answer;
}
}
failedCache.add(used);
return null;
}
您是否在尋找分析上述算法的幫助,或者在解決O(n^3)中的問題?我認爲我有一個O(n^3)算法,它使用完全不同的技術解決了這個問題,但是如果這裏沒有主題,我不想發佈它。另外,請您詳細介紹該算法的來源?我不明白它是如何工作的或者它想要做什麼,沒有對你如何到達的高層次描述,我不知道我能提供多少幫助。 – templatetypedef 2011-02-05 12:23:51