Algorithm 打印字符串真的需要O(n)吗?

Algorithm 打印字符串真的需要O(n)吗?,algorithm,big-o,Algorithm,Big O,我正在做一个破解编码面试的例子,我读到执行System.out.println(前缀)(其中前缀是字符串)将花费“O(n)时间,因为每个字符都需要打印”。如果在O(1)算法(如哈希表查找等)中放置了类似的打印语句,是否会使整个算法成为O(n)?在描述算法的大O复杂性时,定义表达式中的变量表示什么是至关重要的。可能经常有几个!例如,在二叉树中查找一个整数,然后打印与该节点关联的字符串可能被描述为O(m+logn),其中n是树中对象的数量,m是字符串的长度 使用单个变量表示多个不同的因素(例如,哈希

我正在做一个破解编码面试的例子,我读到执行
System.out.println(前缀)(其中前缀是字符串)将花费“O(n)时间,因为每个字符都需要打印”。如果在O(1)算法(如哈希表查找等)中放置了类似的打印语句,是否会使整个算法成为O(n)?

在描述算法的大O复杂性时,定义表达式中的变量表示什么是至关重要的。可能经常有几个!例如,在二叉树中查找一个整数,然后打印与该节点关联的字符串可能被描述为
O(m+logn)
,其中
n
是树中对象的数量,
m
是字符串的长度


使用单个变量表示多个不同的因素(例如,哈希表中的元素数量及其大小)总是错误的,这样做会导致明显荒谬的结果(例如,哈希表查找是
O(n)
)。

在描述算法的大O复杂性时,定义表达式中的变量表示什么是至关重要的。可能经常有几个!例如,在二叉树中查找一个整数,然后打印与该节点关联的字符串可能被描述为
O(m+logn)
,其中
n
是树中对象的数量,
m
是字符串的长度


使用单个变量来表示多个不同的因素(例如,哈希表中的元素数量及其大小)总是错误的,这样做会导致明显荒谬的结果(例如,哈希表查找为
O(n)
)。

什么是
n
?您需要更密切地跟踪
n
是什么来解决这个问题。@user2357112@khЛö我认为user2357112的意思是,在这种情况下
n
是什么。我将对此进行详细说明。:)@可以是哈希表中的iterm数,也可以是字符串中的字符数。所以,
println(table[key])
仍然在表中查找O(1),但是println是O(n)(n现在是字符数)。@crmk。事实上,我认为他们可能没有正确理解的部分原因是,他们将哈希映射的大小与哈希映射中字符串的大小混为一谈,作为n的可能值?您需要更密切地跟踪
n
是什么来解决这个问题。@user2357112@khЛö我认为user2357112的意思是,在这种情况下
n
是什么。我将对此进行详细说明。:)@可以是哈希表中的iterm数,也可以是字符串中的字符数。所以,
println(table[key])
仍然在表中查找O(1),但是println是O(n)(n现在是字符数)。@crmk。事实上,我认为他们可能没有正确理解的部分原因是,他们将哈希映射的大小与哈希映射中字符串的大小混为一谈,作为n的可能值。“例如,在二叉树中查找字符串,然后打印它可能被描述为
O(m+logn)
”-或
O(m*log(n))
,由于字符串比较可能需要
O(m)
时间,并且除非您的BST是专门的,否则它可能没有额外的元数据或专门的查找代码来利用早期的比较来加速后期的比较。@user2357112也许这不是最好的示例!例如,在二叉树中查找一个字符串,然后打印它可能会被描述为
O(m+logn)
”-或者
O(m*log(n))
,因为字符串比较可能需要
O(m)
时间,除非您的BST特别专业化,它可能没有额外的元数据或专门的查找代码来利用早期的比较来加速后期的比较。@user2357112也许这不是最好的例子!我已经对它进行了调整,以消除歧义。