【问题标题】:Why are strings' space complexity O(n) but numbers are O(1)?为什么字符串的空间复杂度是 O(n) 而数字是 O(1)?
【发布时间】:2020-05-26 20:10:24
【问题描述】:

我对辅助空间复杂性有点迷茫。

在我参加的讲座中,讲师指出字符串的空间复杂度为 O(n),因为字符串 (n) 的长度会有所不同。但是诸如数字、布尔值、未定义等原语具有恒定的空间复杂度 O(1)。

我很困惑,因为如果字符串空间的长度不同,那么数字也会不一样吗?因为它们也会有不同的“长度”?

我确实理解布尔值和未定义是 O(1),我的意思是真/假,未定义和 null 是与长度无关的实例。

如果有人能为我澄清这一点,我将不胜感激。

【问题讨论】:

  • 如果你必须处理任意大的数字,那么存储整数 N 将占用 O(log |N|) 位空间,然后你还必须考虑做算术的时间复杂度对它们进行操作(因为您不能在 O(1) 时间内加/减/乘/除任意大的数字)。为简单起见,通常假设所涉及的数字与问题的实际输入大小相比不会“太大”,但当输入只是一个数字时,您必须更加小心。
  • 一个字符串基本上是一个字符(或字节)数组,一个数组的大小为 O(n),其中n 是元素的数量。
  • 谢谢你们的回答!有道理!

标签: algorithm space-complexity


【解决方案1】:

在现实世界中,数字大小确实是无限的,但这里是关于数字原语。根据定义,每个原语都需要固定数量的存储单元(这就是它只能保存有限范围值的原因)。与数字原语不同,字符串的大小在理论上是无限的,它占用与输入大小相对应的存储空间(即构成字符串的字符)。

【讨论】:

  • 非常感谢!
【解决方案2】:

计算机使用的所有数字都是限制。例如,C's limits are here。因此,如果您尝试分配超出此限制的数字,程序要么出错,要么开始表现得很奇怪。这意味着数字可以并且以恒定数量的字节存储。

字符串没有这样的限制。除了内存,这很少是个问题。

【讨论】:

  • 我认为这不是重点;对于复杂性分析,从这样的固定的有限限制进行推理通常是错误的,因为否则例如平方和乘法算法需要 O(1) 时间,因为只有有限多个可能的输入。举个更微妙的例子,冒泡排序的最坏情况时间是当数组类似于[5, 4, 3, 2, 1] 时,但如果您的数字必须以常数为界,则您不能构造任意长度的这种最坏情况n。跨度>
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多