Algorithm 在O(n)时间内构造平方矩阵算法的困难
我在回顾过去的一些论文,准备考试,我遇到了一个方阵算法问题/分析,这是我一生都无法解决的 基本上,我得到了一个N乘N的矩阵(基本上是一个平方矩阵),我需要实现一个数据结构,允许我在O(N)时间内将矩阵的大小增加1(行+1,列+1) 在强迫我的导师之后,我意识到最好的数据结构应该是一个数组数组,所以本质上是这样的[{1,2,3},{4,5,6},{7,8,9}],这表示我的矩阵,第1行,第2行,第3行 现在我需要能够在调用increase_size()方法时将这个矩阵扩展1,我已经尝试了一个简单的解决方案,即创建一个大小为4的新空数组,因为我们以前的矩阵有3个元素,将这个数组附加到我们的矩阵_数组中,然后将0添加到所有剩余的数组中,但是这需要O(n^2)时间 我相信这里有一些东西与行和列有关,当我们增加矩阵大小时,我们实际上是在创建一个新的行和列,我相信这与解决方案有关 我已附上以下问题 朴素的解决方案在O(n)中有效实际上:Algorithm 在O(n)时间内构造平方矩阵算法的困难,algorithm,matrix,optimization,time,big-o,Algorithm,Matrix,Optimization,Time,Big O,我在回顾过去的一些论文,准备考试,我遇到了一个方阵算法问题/分析,这是我一生都无法解决的 基本上,我得到了一个N乘N的矩阵(基本上是一个平方矩阵),我需要实现一个数据结构,允许我在O(N)时间内将矩阵的大小增加1(行+1,列+1) 在强迫我的导师之后,我意识到最好的数据结构应该是一个数组数组,所以本质上是这样的[{1,2,3},{4,5,6},{7,8,9}],这表示我的矩阵,第1行,第2行,第3行 现在我需要能够在调用increase_size()方法时将这个矩阵扩展1,我已经尝试了一个简单的
n*n
的矩阵作为数组数组实现(其中数组是动态的)n+1
我们首先创建一个大小n
的新数组,并将其附加到矩阵的末尾,这需要O(n)
时间0
,我们有n+1
行,并且每个行附加1
元素,因此这也需要O(n)
时间O(n)
尝试一个数组:
M = [ A1, A2, ..., An ]
每个数组Ax
包含值a{i,j}
ifmax(i,j)=x
我会让你做证明。嗨,我的导师没有教我们动态数组,所以如果我用这个例子,我需要证明动态数组数据结构。同样,导师说,如果我希望有O(n)时间复杂性,我需要跟踪指针,而不是实际数组“在讲座期间,我们没有介绍动态数组,因此您必须描述您可以对其执行的操作,并说明所有操作都在预定时间内工作。后者将是困难的,因为动态数组在数据完全满后必须复制数据才能进行扩展,因此很可能无法满足扩展矩阵的时间要求。“Well dynamic Array是O(1)摊销的推回操作,在线上有大量的证据,这些证据并不难使用这种方法,在摊销的O(n)时间内增加大小,但最坏的情况是O(n^2)。OneLyner的答案是保证O(n)时间和内存效率更高。这有点令人沮丧,因为我昨天对这个问题写了一个相当长的答案,但在我提交之前,你删除了这个问题,现在你已经重新发布了。