当前位置: 首页 > 知识库问答 >
问题:

谁能解释一下这一行的复杂性吗?

裴华荣
2023-03-14

我在计算这条线的时间复杂度时遇到了麻烦。在我看来是二次O(n**2)。因为如果不使用列表理解,这里必须经过嵌套循环。

    AB = Counter([(a+b) for a in A for b in B])

共有1个答案

孙承
2023-03-14

您的行:

AB = Counter([(a+b) for a in A for b in B])

相当于(忽略列表理解更快,不逐个追加*):

# given lists A, B
AB0 = []

# this is O(n2)
for a in A:
    for b in B:
        AB0.append(a+b) 

AB = {}

# this is O(m), m=n2
for ab in AB0:
    if ab not in AB:
        AB[ab] = 0
    AB[ab] += 1
  • 关于与列表理解的区别:理解实现更快(在此解释),但这并不意味着它具有与O(n2)不同的时间复杂度。另外:append是O(k)。

所以总而言之,它是以O(n2)为界的。

 类似资料:
  • 这是我从骡子3到骡子4转换的第一个项目。我与mule4一起工作,但在Mule3是新的。有谁能帮帮我吗?你能告诉我这些自定义处理器和变压器在这个mule3代码中的用途吗?而Mule4中的等价代码会是什么呢?在骡子4中没有像这样的自定义变压器。请帮帮我..

  • 我对javascript还是个新手,只知道基本知识。有人能解释一下下面的代码,就像在调用init函数时发生的流中一样吗? 我对下面代码的理解是,一旦调用init函数,就会设置一个全局变量输出,该输出映射到一个带有id输出的HTML元素。然后调用。这将创建一个WebSocket对象。这之后是我不完全理解的部分。 在行中,WebSocket对象有一个名为open的属性,我们将它设置为任何返回的属性 。

  • 我不太理解while循环中的条件,以及它代表什么'>>>='。

  • 我是Hibernate和JPA的新手,我对这个注释有问题。有人能简单地解释一下这个注释到底在做什么吗?因为在这种情况下,文档对我来说很难理解。 编辑我明白什么是持久上下文,但在代码中,我有这样的例子: 我对@PerustenceContext做什么有问题。抱歉,也许我没有具体说明。

  • 问题内容: 我是新手。我在宁静的api调用中看到了检查诺言的信息。 被用来保留promise对象。我读了诺言,但一无所获。尽管我可以不带api进行api调用,但是在文章中的某处使用了它。 所以我想知道在没有的情况下进行api调用的确切用法和区别。 请帮助。谢谢 问题答案: 我认为我写的有关$ q的文章可能会对您有所帮助。 $ q简介 $ q是角度定义的服务。与新的Promise()相同。但是$ q

  • 它通常会打印“z”。为什么它不返回分段错误?因为我试图访问一个不应该存在的索引,因为strB的大小(索引数量)等于tam_strA,它等于3。 另外,做有什么不同/问题吗?