关于Python“in”的时间复杂度的简单查询

时间:2018-05-03 03:56:38

标签: python complexity-theory

我有一个函数strip_punctuation(text),它接受一个文本字符串并使用标点符号列表删除其中的所有标点符号。我不确定时间复杂度是O(N)* N还是O(N ^ 2)。我认为它适用于N文本长度的O(N),然后是标点符号长度的O(N)。愿某人 澄清这段代码的时间复杂度?

def strip_punctuation(text):
    punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~'''
    stripped = ""
    for i in text:
        if i not in punctuations:
            stripped = stripped + i

    return stripped

1 个答案:

答案 0 :(得分:1)

如果N是import csv example_list = [[1,2,3], [4,5,6], [7,8,9]] with open('example.csv', 'w') as f: writer = csv.writer(f, delimiter='\t') for line in example_list: writer.writerow(line) ,那么这是O(N):

len(text)

如果M是for i in text ,则此代码为O(M ^ 2):

len(punctuations)

这是因为整个if i not in punctuations: stripped = stripped + i (长度大于&gt; = M)必须复制M次(stripped复制stripped + i)。

所以,如果strippedtext都是输入,那么复杂度就是O(N)* O(M ^ 2),但在这种情况下,M是常数,所以<强>复杂性是O(N)。

注意,如果punctuations非常大,那么函数会非常慢,但它的复杂性仍然只是O(N),这只意味着当输入为N时它的速度慢了N倍倍大。