如何改进此算法以测试所有矩阵条目是否不同?

时间:2017-09-20 15:04:18

标签: algorithm time-complexity

该算法用于确定矩阵是否不同。 如何提高此算法的时间复杂度?

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
}

2 个答案:

答案 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
}