我正在阅读Python中的《编程元素》采访(Aziz,Lee,Prakash),并且不了解其中一种算法的时空复杂性。该问题要求以螺旋顺序返回矩阵(示例here)。
在算法的最后,作者指出这是O(n ^ 2)时间复杂度和O(1)空间复杂度。自从我正式研究复杂性已经过去了几年了,所以我对这些说法都不了解。在下面的代码中,我们构建了一个全新的数组,其中所有元素都以螺旋顺序排列,这使我相信这不是就地操作,因此空间复杂度为O(nxn)。
对于时间的复杂性,我也感到困惑。对于每个元素,我们仅对2D数组进行一次迭代。因此,它不被视为O(n)吗?与将其展平成一维数组并进行一次处理有何不同?
sudo chef-solo -c /vagrant/solo.rb -j /vagrant/node.json
我最终使用其他解决方案递归解决了这个问题,但仍然想了解他们是如何对上述算法进行分析的。
答案 0 :(得分:1)
似乎他们对N的定义是矩阵边的长度,而您对N的定义是矩阵边的乘积。这似乎是六分之一,六分之一,尽管对于哪个会减少误导尚有争议。
关于空间的复杂性,再一次,听起来好像他们的解释是返回的结果不计算在内。这是很公平的,但确实需要明确,我认为就您对这两种说法都表示怀疑的直觉。
作为旁注,我同意@Blorgbeard的观点,即他们提供的算法不如示例性。