【问题标题】:size & complxity of lower triangular matrix in 1D array一维数组中下三角矩阵的大小和复杂度
【发布时间】:2021-12-25 19:53:45
【问题描述】:

我有 (n×n) 个下三角矩阵,那么它的复杂度是多少?它说这将是O(n ^ 2)。 那么如果我使用一维数组来显示这个下三角矩阵,那么这次的复杂度是多少?O(n)还是其他? 比较每一回合的两种复杂性。 在 c++ 上运行的动作。 我需要每回合的数组大小。

【问题讨论】:

  • "如果我使用一维数组来显示这个下三角矩阵,那么这次的复杂度是多少?" -- 在这种情况下你的n 是什么?如果您想将此空间要求与之前的空间要求进行比较,n 更好地表示相同的东西,即三角矩阵的一维。就n 而言,您的一维数组的大小是多少?
  • 是的,实际上我认为我们应该得到 (n) 的数组大小,所以我们可以解释每个数组的复杂性和大小
  • @mia.tt 当你说 O(n^2) 和 O(n) 时,n 指的不是同一个数量。第二个 n 与第一个 n^2 的大小相同。询问矩阵的复杂性也是没有意义的。复杂性是指应用于数据类型的算法,例如将其打印为 O(n^2) 或将其乘以标量为 O(n^2)。
  • @user904963 Big-O 表示法也用于表示空间要求。虽然“复杂性”是一个奇怪的词,但我认为初学者使用它是可以理解的。
  • @mia.tt " 我认为我们应该得到 (n) 的数组大小" -- 如果 n 是你的数组的大小,那么这两种情况使用 O(n) 空间,因为每个数组都和它自己一样大。

标签: c++ arrays matrix


【解决方案1】:

复杂性通常是指特定的算法。所以让我们更准确地说

在没有其他辅助空间的情况下处理下三角矩阵的空间复杂度是多少?

方阵 (N, N) 的空间复杂度为 O(NxN)。三角矩阵 (N, N) 的复杂度相同,因为 N x (N + 1) / 2 = O(NxN)。

当您将矩阵展开为向量时,这不会改变。它仍然是相同数量的条目,只是以不同的模式存储。

当然,当您更改算法时,情况就会发生变化。如果不是一次计算整个矩阵,而是一次只对一行或一列进行操作,那么是的,空间复杂度将降低到 O(N)

【讨论】:

  • 空间复杂度通常是指算法,因此说“矩阵具有空间复杂度......”“一次计算整个矩阵”和“操作[ing]”没有什么意义在单行或单列上”可能是空间 O(n^2)、O(n) 或 O(1),具体取决于正在进行的操作及其实现方式。你可能会说存储三角矩阵的算法有 O(n^2) 的空间。
  • @user904963 这就是为什么我说“没有其他辅助空间”,意思是任何就地算法。如果我们在吹毛求疵,存储矩阵是一种算法吗?
  • 不使用辅助空间的算法需要 O(1) 空间。我知道你说的是“其他”,但输入矩阵不是辅助空间。
  • @Homer512 "存储矩阵是一种算法吗?" -- 它涉及一步一步的过程,所以是的。对于传统的矩阵,算法是微不足道的,但它仍然是一种算法。对于稀疏矩阵的空间有效存储,该算法可能更复杂。
  • @JaMiT 所以……根据你的说法,存储是主动操作?我猜您将其定义为初始化或复制?我认为它是保持记忆中的被动状态。但是无所谓。当我们在这里时:您是否将算法的输出视为其空间需求的一部分?因为如果不是,那么“存储”矩阵将需要恒定的空间,因为根据您的评论不需要辅助空间。恕我直言,这是一个完全没有帮助的定义。
猜你喜欢
  • 2018-02-16
  • 2018-12-28
  • 2011-06-16
  • 2022-10-25
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
相关资源
最近更新 更多