Algorithm 如何改进该算法以测试所有矩阵项是否不同?

Algorithm 如何改进该算法以测试所有矩阵项是否不同?,algorithm,time-complexity,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] &

这个算法是用来计算一个矩阵是否不同。 如何提高该算法的时间复杂度

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
}

其他人已经提到了hashset的使用。以下是使用排序的另一种方法:

如果矩阵具有
M
元素,则可以将矩阵元素复制到大小为
M
的数组中。然后可以使用运行时
O(M log(M))
的排序算法对数组进行排序

要检查重复的元素,只需遍历已排序的数组并检查两个相邻元素是否相等,这需要
O(M)
时间


总运行时间为
O(M log(M))
。原始算法的运行时为
O(M²)

其他人已经提到了hashset的使用。以下是使用排序的另一种方法:

如果矩阵具有
M
元素,则可以将矩阵元素复制到大小为
M
的数组中。然后可以使用运行时
O(M log(M))
的排序算法对数组进行排序

要检查重复的元素,只需遍历已排序的数组并检查两个相邻元素是否相等,这需要
O(M)
时间

总运行时间为
O(M log(M))
。原始算法的运行时为
O(M²)

使用(python)或。时间复杂度为O(n2)

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
}
使用(python)或。时间复杂度为O(n2)

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
}

遍历矩阵中的每个项,并检查每个项是否在字典/哈希表中。如果该项目不是,则添加它。如果是,则返回
false
。如果遍历整个矩阵,则返回
true
。如果两个矩阵的阶数均为m x n,且在(i,j)处的元素相同,则矩阵是不同的,对吗?那么两个for循环就可以做到了吗?@zenwraight在这种情况下,算法是检查矩阵中的每个值是否唯一。哦,我的坏丫头知道了,所以Hashmap可以在O(n^2)时间内完成这个技巧,即使是一个集合也可以。。。。比如,如果你发现集合中存在任何元素,那么就在集合中出现它自己……迭代矩阵中的每一项,并检查每一项是否在字典/哈希表中。如果该项目不是,则添加它。如果是,则返回
false
。如果遍历整个矩阵,则返回
true
。如果两个矩阵的阶数均为m x n,且在(i,j)处的元素相同,则矩阵是不同的,对吗?那么两个for循环就可以做到了吗?@zenwraight在这种情况下,算法是检查矩阵中的每个值是否唯一。哦,我的坏丫头知道了,所以Hashmap可以在O(n^2)时间内完成这个技巧,即使是一个集合也可以。。。。比如,如果你在集合中找到任何元素,然后在集合中出现……如果你使用哈希表,时间复杂度不是预期的O(n^2)吗?O(logn)术语从何而来?@templatetypedef它的更新。我的错误是,python中dict的平均查找时间是LogN,而不是
O(1)
。谢谢如果使用哈希表,时间复杂度不是预期的O(n^2)吗?O(logn)术语从何而来?@templatetypedef它的更新。我的错误是,python中dict的平均查找时间是LogN,而不是
O(1)
。谢谢