Big o 扫描有界长度字符串的复杂性。O(n)还是O(1)?

Big o 扫描有界长度字符串的复杂性。O(n)还是O(1)?,big-o,complexity-theory,analysis,Big O,Complexity Theory,Analysis,假设我们有一个由唯一ASCII字符组成的字符串,这意味着它的长度永远不会超过128个字符 如果我要扫描这个字符串,其中扫描意味着对每个字符执行一个常数时间操作,那么这个扫描是算作O(n)还是O(1) 其中n是字符串的实际长度。一方面,它是O(n),因为程序的复杂性取决于某个变量n,该变量可以在[0,128]范围内改变宽度 另一方面,如果程序总是执行相同数量的操作,则会有O(1)。事实并非如此,因为如果长度越大,则需要更多的工作 尽管考虑到最坏的情况是O(128),因此答案是O(1) 当根据n询问

假设我们有一个由唯一ASCII字符组成的字符串,这意味着它的长度永远不会超过128个字符

如果我要扫描这个字符串,其中扫描意味着对每个字符执行一个常数时间操作,那么这个扫描是算作O(n)还是O(1)

其中n是字符串的实际长度。

一方面,它是O(n),因为程序的复杂性取决于某个变量n,该变量可以在[0,128]范围内改变宽度

另一方面,如果程序总是执行相同数量的操作,则会有O(1)。事实并非如此,因为如果长度越大,则需要更多的工作

尽管考虑到最坏的情况是O(128),因此答案是O(1)

当根据
n
询问算法的时间或空间复杂性时,您需要定义
n
是什么


如您所知,对
n
字符数组进行线性扫描的时间复杂度为
O(n)
。由于将相同的算法应用于字符串数组,因此
128
中没有
n
,因此它不能是
O(n)
@LeandroCaniglia n是实际的字符串长度!是的,但是你的推理很好,但是在实践中,我们总是知道字符串长度永远不会超过Ram容量,Ram容量也是恒定的!然而,我们认为它是线性时间!正确的。但是内存量理论上是无限的,而在您的例子中,有一个“硬”上限128。