该解决方案的时间复杂度是否为O(logn)?

时间:2019-01-13 13:21:57

标签: python time-complexity big-o

我为挑战编写了以下解决方案,但不确定其时间复杂度:

def ASCIIConversion(string): 
    newStr = ''

    for chr in string:
        if chr.isspace(): 
            newStr = newStr + ' '
        else:
            newStr += str(ord(chr))

    return newStr

由于else语句,程序的复杂度O(logn)吗?

3 个答案:

答案 0 :(得分:6)

最坏情况下的时间复杂度计算如下(假设字符串最大长度为n):

newStr = ''  # will be done once so 1 time.

for chr in string: # is iterating on the input with max length of n so n times.
    if chr.isspace(): # will be checked once it is in the loop so 1 time per each iteration.
        newStr = newStr + ' ' # also once per iteration if the if condition is satisfied
    else: # will be chehcked once per iteration
        newStr += str(ord(chr)) # if else is satisfied

return newStr # will be done 1 time.

我们将假设恒定时间为c,所以:

  

Time complexity = 1 + n(c*c + c*c) + 1 = 2+Cn => O(n)

答案 1 :(得分:4)

此解决方案仍为O(n)。我不完全确定为什么else语句实际上会影响这一点。您正在对字符串中的每个字符执行一项操作。

即使对于每个字符,您正在执行多个指令(比较等),您可能会认为复杂度类似于O(3n),但您当然会忽略系数。我敢肯定您知道这一点,但是对于以后查看此问题的人,对else语句感到困惑,这可能会有所帮助。

答案 2 :(得分:0)

无论if-else条件如何,都循环遍历字符串的每个字符,因此时间复杂度为O(n)。