Algorithm 在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的矩阵(基本上是一个平方矩阵),我需要实现一个数据结构,允许我在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)中有效实际上:

  • 考虑任何大小为
    n*n
    的矩阵作为数组数组实现(其中数组是动态的)
  • 要达到大小
    n+1
    我们首先创建一个大小
    n
    的新数组,并将其附加到矩阵的末尾,这需要
    O(n)
    时间
  • 然后,对于矩阵中的每一行,我们在末尾附加一个
    0
    ,我们有
    n+1
    行,并且每个行附加
    1
    元素,因此这也需要
    O(n)
    时间
  • 总运行时间为
    O(n)

  • 尝试一个数组:

    M = [ A1, A2, ..., An ]
    
    每个数组
    Ax
    包含值
    a{i,j}
    if
    max(i,j)=x


    我会让你做证明。

    嗨,我的导师没有教我们动态数组,所以如果我用这个例子,我需要证明动态数组数据结构。同样,导师说,如果我希望有O(n)时间复杂性,我需要跟踪指针,而不是实际数组“在讲座期间,我们没有介绍动态数组,因此您必须描述您可以对其执行的操作,并说明所有操作都在预定时间内工作。后者将是困难的,因为动态数组在数据完全满后必须复制数据才能进行扩展,因此很可能无法满足扩展矩阵的时间要求。“Well dynamic Array是O(1)摊销的推回操作,在线上有大量的证据,这些证据并不难使用这种方法,在摊销的O(n)时间内增加大小,但最坏的情况是O(n^2)。OneLyner的答案是保证O(n)时间和内存效率更高。这有点令人沮丧,因为我昨天对这个问题写了一个相当长的答案,但在我提交之前,你删除了这个问题,现在你已经重新发布了。