如果列表大小固定,则此代码是否为O(1)

时间:2019-03-17 02:34:02

标签: python-3.x time-complexity big-o computer-science

例如,假设您要遍历列表中的字母,但是必须检查标点符号。以下代码是否仍然是O(n),n是一行中的最大字符?我认为这是因为标点列表是固定大小的,因此if语句仍然是O(1)吧?

punctuation = [',', '.', '?', '!', ':', ';', '"', ' ', '\t', '\n']   
for letters in line:
        if letters not in punctuation:
            word += letters

1 个答案:

答案 0 :(得分:1)

是的,因为标点列表的大小是固定的(并且不依赖于N),所以代码的总体时间复杂度应为O(N)。 正如其他评论员所指出的那样,O(N * M)可能更精确,其中N为您正在阅读的总字符数,M为标点字符的数量。

如果要在此处进行优化,可以将标点符号存储在set中,其中in会恒定运行:

punctuation = {',', '.', '?', '!', ':', ';', '"', ' ', '\t', '\n'} 
for letter in line:
    if letter not in punctuation:
        word += letter
相关问题