面试复杂度问题:如果陈述和比较复杂

时间:2019-01-07 23:21:45

标签: if-statement comparison complexity-theory

我正在研究一些面试问题,并在这里遇到了这个问题。 Question Image

除了红色框内的部分,我大部分时间都了解所有内容。如果数组中的每个字符串都已排序。然后,不应该对数组进行排序仅取O(log a)吗?为什么将它们乘以O(s)?它解释说,排序时的字符串比较将花费O(s),其中s是最大的字符串大小。这是有道理的...但是,我认为比较看起来像这样...

if ( array[x].equals(array[y]) ) {...}

语句是否采用O(1)的复杂度?那不应该忽略它吗?我可能是错的,但我想我已经读过执行if语句和任何其他嵌入式语句(非循环)将花费O(1)的复杂性。如果我错了,请纠正我,并启发我如何正确地计算复杂度。

1 个答案:

答案 0 :(得分:0)

正在排序,因此比较为'a'>'b'。 现在,想象一下您有两个这样的字符串:

'aaaaaaaa'
'aaaaaaab'

需要S个步骤才能到达最后一个字符,以确定哪个字符串更大。每次字符串比较都会执行此操作,因此我们将其乘以S。