我在Cracking the Coding Interview中做了一个例子,我读到执行System.out.println(prefix);
(其中前缀是一个字符串)将需要" O(n)时间,因为每个字符都需要打印&#34 ;。如果在O(1)算法中放置类似的print语句(例如哈希表查找等),它会使整个算法成为O(n)吗?
答案 0 :(得分:4)
在描述算法的大O复杂性时,定义表达式中的变量代表什么是至关重要的。可能经常有几个!例如,在二叉树中查找整数,然后打印与该节点关联的字符串可能被表征为O(m + log n)
,其中n
是树中对象的数量,m
是字符串的长度。
使用单个变量来表示多个不同因素(例如,哈希表中的元素数量及其大小)总是错误的,这样做会导致明显荒谬的结果(例如,哈希表)查找为O(n)
)。