【问题标题】:Python time complexity of graph drawing function绘图函数的Python时间复杂度
【发布时间】:2020-01-17 13:16:34
【问题描述】:

我正在尝试计算此图形绘制函数的时间复杂度。我认为时间复杂度为 O(N^2),因为 drap_graph 中有 2 个 for 循环,但 check_letters 函数让我不确定。

谁能帮我理解如何计算?

def check_letters(word1, word2):
    if(word1 == word2):
        return False
    matches = [] 
    letters = word1[-4:]
    for char in letters:
        if char in word2:
            matches.append(char)

    result =  all(elem in matches for elem in letters)
    matches = None
    return result

def draw_graph(words):
    G = nx.DiGraph()
    G.add_nodes_from(words)

    for word1 in words:
        for word2 in words: 
            if(check_letters(word1, word2)):
                G.add_edge(word1, word2)
    nx.draw_networkx(G)
    return G

draw_graph(words)

编辑:每个单词都是 5 个字母。

【问题讨论】:

  • 如果词长有最大值,则为O(n^2),否则还要考虑check_letters的复杂度
  • 您不能忽略列表中每个单词的大小,因为check_letters 会遍历它们。

标签: python time-complexity big-o


【解决方案1】:

计算复杂度是对“运行时如何随输入大小进行缩放?”问题的答案。

在这里,您的draw_graph()O(n^2),因为

  1. 它遍历输入的每个部分 (n)
  2. 对于其中的每一个,它再次遍历输入的每个部分 (n)

因为第二个事件依赖于第一个,所以我们相乘:n * n = n^2。随着words中的字数线性增加,函数的运行时间呈二次方增加。

实际上,在分析draw_graph()时,我们大多可以忽略check_letters()的运行时间,因为随着时间的推移,单词的平均大小会变平,我们可以将其视为相对于draw_graph()的常数时间操作.

【讨论】:

  • 如果作者暗示平均(theta)时间复杂度,而不是最坏情况(big-Oh),则同意上述。
  • Theta 不表示“平均”,O 不表示“最坏情况”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多