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