例如,假设您要遍历列表中的字母,但是必须检查标点符号。以下代码是否仍然是O(n),n是一行中的最大字符?我认为这是因为标点列表是固定大小的,因此if语句仍然是O(1)吧?
punctuation = [',', '.', '?', '!', ':', ';', '"', ' ', '\t', '\n']
for letters in line:
if letters not in punctuation:
word += letters
答案 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