Algorithm 复杂性-输入长度

Algorithm 复杂性-输入长度,algorithm,time-complexity,complexity-theory,Algorithm,Time Complexity,Complexity Theory,我目前正在学习复杂性(或效率,不管你怎么称呼它),我在我得到的一本书中读到了它。 我觉得有些东西写得很无聊,我需要一个解释。我试着在网上查找,但对于他们给出的这个特定示例,我没有找到答案 对于在一维数组中获取最大数的算法,n的大小将是n “对于在二维数组中获取最大数的算法,n*n的大小仍然是n” 我不明白为什么在这两种情况下输入长度都是“n”,即使对于二维,您必须通过n*n数字。。。 上面说 输入长度=完成的工作量 对我来说没有任何意义。 有人愿意解释吗?他们肯定不会在这里解释。读到评论说这本书

我目前正在学习复杂性(或效率,不管你怎么称呼它),我在我得到的一本书中读到了它。 我觉得有些东西写得很无聊,我需要一个解释。我试着在网上查找,但对于他们给出的这个特定示例,我没有找到答案

对于在一维数组中获取最大数的算法,
n
的大小将是
n

“对于在二维数组中获取最大数的算法,
n*n
的大小仍然是
n

我不明白为什么在这两种情况下输入长度都是“
n
”,即使对于二维,您必须通过
n*n
数字。。。 上面说

输入长度=完成的工作量

对我来说没有任何意义。
有人愿意解释吗?他们肯定不会在这里解释。

读到评论说这本书是用希伯来语写的,我认为这是翻译错误或其他校对错误。“输入长度”注释中给出的定义“输入长度是表示算法工作量的度量”,与您认为该术语在英语中的含义完全不符

为了回答关于复杂性的问题,他们在多个地方重复使用变量“n”,这使它有点混乱。他们使用“n”来描述数组的维度和复杂性。O(n)简单地表示复杂性与输入是线性的。O(n^2)将是指数复杂性。在这种情况下,对于n*n个元素的数组,输入是n*n或n^2,但算法的复杂度仍然是O(n)(或线性)。这是因为算法仍然只对每个输入元素操作一次,无论输入是n还是n*n。当3n和n都是线性函数(任何x*n都是线性函数)时,如果它对每个元素操作一次,它仍然是线性的


我希望这有帮助

一个常见的误解是(在这里可以看到很多),使用
n*n
元素扫描二维数组的复杂性是
O(n^2)
。它不是,它是
O(n)
。扫描是一个线性操作,一个元素接着一个元素

2D数组是一种有礼貌的虚构,它实际上只是访问1D数组的一种方便。毕竟,在正确实现数组的语言中(即没有指向内存块的指针数组),2D数组只是一组相邻的内存位置。即使在实现2D数组作为指针数组的语言中,它们也只是内存的线性段,有中断

如果二维数组中的扫描是
O(n^2)
,那么您可以通过忽略二维属性,只扫描底层1d内存块,将其神奇地转换为
O(n)


O(n^2)
描述了一种不同的操作复杂性类别,例如对输入中的每对元素进行操作的操作。

Big-O符号用于对算法类型(复杂性类别)进行分类,而不一定是实际运行所需的时间。例如O(cn)就是O(n),其中c是常数


n是输入的大小,无论该输入是一个nxn矩阵还是一个长度为“n”的数组。big-O'n'和程序变量名指的不是同一件事。

它们是如何定义
输入长度的?按照你问题中的书准确地写下定义。@I_确实有用,而且是我写的。“输入长度是表示算法工作量的度量”——大致翻译自希伯来语。。。我没有用英语学习这些材料。那么,根据这本书,工作量是如何定义的呢?是要考虑作为输入的元素数,还是计算该数组中最大元素的复杂性?@Am_I_有帮助工作负载是计算机执行的操作数。例如:“如果(hm)这可能会帮助你-->。我觉得他们假设2d数组的元素总数为
n
,否则就不可能在O(n)复杂度下完成。不过我可能错了。
…O(n^2)将是指数复杂度…
-->不,不会!是的,指数更像O(c^n)如果您将
nxn
矩阵的大小定义为
n
,那么扫描所有元素实际上就是
O(n^2)
。然而,这样的定义并不十分有用,基于您给出的原因,
nxn
矩阵的大小最好定义为
n^2
。如果书中没有使用相同的变量,那么您所说的是有意义的。尽管,书中对一维数组和二维数组使用了相同的
n
m我的理解是,如果
n=2
,那么4个操作和2个操作的输入长度是相同的。-只是这没有意义。除非它们不是实际相同的
n
,而是使用相同的字母。。@YuvalRoth我想你可以放心地认为书中使用相同的变量名是错误的。它是直到正确为止,但这会让我更难理解他们想说什么。@biziclop只是为了确保我理解。你可以说
O(n^2)==O(n)
,因为它们都是线性的?@YuvalRoth是的,2x2数组的输入长度是4。至少这是标准的(而且是合理的)从这个角度来看,我还应该指出,@highperformancemark是正确的。我只是为了澄清一件似乎有些混乱的小事。