该算法用于确定矩阵是否不同。 如何提高此算法的时间复杂度?
int IsMatrixDistinct(int n, int A[0..n-1,0..n-1])
{
for int i=0 to n-1 do
for int j = 0 to n-1 do
for int k = 0 to n-1 do
for int m = 0 to n-1 do
if ( A[i,j] == A[k,m] && !( i==k && j==m) )
return 1
return 0
}
答案 0 :(得分:2)
其他人已经提到过使用hashset。以下是使用排序的另一种方法:
如果矩阵具有M
个元素,则可以将矩阵元素复制到大小为M
的数组中。然后,您可以使用运行时O(M log (M))
的排序算法对数组进行排序。
要检查重复元素,您只需浏览已排序的数组并检查两个相邻元素是否相等,这需要O(M)
时间。
总运行时间为O(M log (M))
。您的原始算法的运行时间为O(M²)
。
答案 1 :(得分:1)
使用Dict(对于python)或Hash Table。时间复杂度为 O(n 2 )
int IsMatrixDistinct(int n, int A[0..n-1,0..n-1])
{
hashTable={}
for int i=0 to n-1 do
for int j = 0 to n-1 do
if A[i,j] in hashTable[A[i,j]]:
return 1
else:
hashTable[A[i,j]]=True
return 0
}