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)
。谢谢