我正在回顾过去的一些论文,以进行考试,并且遇到了方阵算法问题/分析,这是我一生无法解决的。
[基本上,我得到一个N×N的矩阵(基本上是一个正方形矩阵),我需要实现一个数据结构,该结构允许我在O中将矩阵的大小增加1(行+ 1,列+ 1) (n)时间。
[强迫我的老师之后,我意识到最好的数据结构将是一个数组数组,因此本质上是这样的东西[{1,2,3},{4,5,6},{7,8,9 }]这将表示我的矩阵,第1行,第2行,第3行
现在我需要能够在调用gain_size()方法时将该矩阵扩展1,我已经尝试过一个幼稚的解决方案,即创建一个新的大小为4的空数组,使先前的矩阵具有3个元素,追加该数组添加到我们的matrix_array中,然后将0添加到所有其余数组中,但这需要O(n ^ 2)时间。
我相信这里与行和列有关,当我们增加矩阵大小时,我们实质上是在创建新的行和列,我认为这与解决方案有关。
我附上下面的问题。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9udVBKNC5wbmcifQ==” alt =“在此处输入图像描述”>
天真的解决方案实际上在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}
包含值max(i,j) == x
。
我让你做证明。