毕达哥拉斯三倍效率

2024-03-06

我需要创建一个函数,它接受整数列表并返回列表中是否存在毕达哥拉斯三元组。例如,[3, 5, 7, 4]回报True因为 3, 4, 5 是毕达哥拉斯三元组。到目前为止我有这个(Python):

def containsPythagoreanTriple(a): 
    for i in xrange(len(a)): #square the numbers
        num = a[i]
        a[i] = num**2
    a = sorted(a)
    for start in xrange(len(a)): #compare every pair
        for i in xrange(start+1, len(a)):
            if a[start] + a[i] in a:
                return True
    return False

有没有办法让它变得更有效率?


就性能而言,该代码中有一些可以改进的地方。

目前的实现是O(N**3) (where N is len(a)),当您检查方格列表是否包含每对项目的每个总和时。会员资格测试list is O(N)并且有O(N**2)配对进行测试。

您可以通过使用来改进这一点set而不是存放物品的清单。测试项目成员资格set is O(1),所以你会得到一个O(N**2)算法是这样的。

还有一些进一步的变化可能会加快速度,但它们都不会进一步改变渐近复杂性。首先,您不需要调用sorted,因为无论如何您都将测试每对项目。您还可以使用集合理解来进行平方,而不是覆盖原始的a列表。最后,您可以使用itertools.combinations生成你的方块对,并且any在生成器表达式上测试它们的总和是否在集合中。

这是使用相同算法的一些更优化的代码:

import itertools

def containsPythagoreanTriple(a):
    squares = {x*x for x in a} # set comprehension
    return any(x+y in squares for x,y in itertools.combinations(squares))

通过以更基本的方式改变算法,可能还有进一步优化的空间。例如,您不需要测试每一对,因为某些值永远不可能是三角形的“短边”(例如最大值)。您可以过滤传递给的方块itertools.combinations这样它们只包括那些小于或等于max(squares)-min(squares)。我不确定这是否值得,除非您的值列表变得非常大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

毕达哥拉斯三倍效率 的相关文章

随机推荐

  • 如何关闭窗口.打开

    我知道你可以用 window close 关闭 window open 但还有其他方法吗 我有一个打开 facebook 连接的弹出窗口 我想在用户连接到 facebook 时关闭弹出窗口 然后刷新父窗口 我认为过去我使用过 TARGET
  • 一元 & 运算符并在 Ruby 中将过程作为参数传递

    我无法理解下面的这段代码 我了解一元与运算符并将过程作为参数传递给方法的想法 但我实在无法接受过去的事self to the language call 我是这样理解的 我们正在过去self作为 proc block 语言的参数 这对我来说
  • GNU Smalltalk 80 调试器。如何调试smallcode代码?启动调试器?

    在 GNU Smalltalk 80 中 可以用您自己的普通代码编写 Smalltalk 代码 个人选择的文本编辑器 因此 调试代码非常重要 首先 将文件另存为 txt 文件 然后 您可以使用 工具 从程序员文本编辑器中打开该文件 这里的工
  • 2D 缩放到 webgl 中的点

    我正在尝试使用 WebGL 更具体地说 是 regl 创建 2D 图形可视化 通过我当前的实现 我已经可以看到力布局应用于每个节点 这很好 当我尝试相对于当前鼠标位置进行缩放时 问题就出现了 根据我的研究 要实现这种行为 需要按以下顺序应用
  • ITemplate 的 InstantiateIn() 方法中的动态控件类型基于 DataItem 的属性。有办法吗?

    我有一个简单的GridView 对于普通人来说是这样的Item or AlternatingItem row ID Description Value 01 Some text 0 082 02 Some text Yes 02 Some
  • 使用闪亮仪表板在 R Shiny 应用程序中包含从 RMarkdown 渲染的 HTML 文件会导致 tabItems 损坏

    Problem 当使用shinydashboard在ShinyApp中包含从RMarkdown渲染的HTML文档时 只有当RMarkdown文件的YAML块中的设置 self contained 设置为true时 HTML文档才能正确渲染
  • 在 Oracle 中的 to_char() 中显示时区描述

    我有一个 SQL 查询 select to char cast sysdate as timestamp with LOCAL time zone YYYY MM DD HH24 MI SS TZR from dual 此返回输出为 201
  • PostgreSQL:使用动态名称的多个表的联合

    我的模式中有一组表 大约 100 个 名为qgep以及哪些名字开头vl 它们具有相同的列 colA colB colC 我想做的是得到一张大桌子 它是我所有的的联合体vl 表 还有一列包含原始表的名称 我可以获得表格列表 SELECT ta
  • 我可以依赖 malloc 返回 NULL 吗?

    我在 Unix 系统上读到过 malloc即使内存实际上不可用 也可以返回非 NULL 指针 并且稍后尝试使用该内存将触发错误 由于我无法通过检查 NULL 来捕获此类错误 因此我想知道检查 NULL 到底有多大用处 在相关的说明中 Her
  • android 使用 AudioTrack 播放声音

    你好 我有这个代码 AudioTrack audioTrack public void playAccordeon int minBufferSize AudioTrack getMinBufferSize 44100 AudioForma
  • static_cast(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

    我在无法访问 C 标准库的环境中编写 C 代码 特别是无法访问std numeric limits 假设我想实现 template
  • 如何使用 API (curl) 编辑 github 问题? (特别是:关闭)

    我计划将另一个 本地 系统中跟踪的数百个错误迁移到 GitHub 的问题系统中 大多数这些错误在过去都已被修复 我可以使用 github 的 API 来创建问题 例如 curl u GITHUB TOKEN x oauth basic ht
  • 片段添加或替换不起作用

    我正在使用这里的代码参考 http developer android com guide components fragments html When I put in that code in my program I get an e
  • 如何从Sqlite获取最后一条记录?

    我有一张桌子question table和一个ImageButton Back 单击后我需要从数据库中获取最后插入的记录Back 我的行包含以下列 question optionA optionB optionC optionD 我需要这些
  • 关于java设计模式的建议

    我需要一些关于 Java 中以下问题的设计模式的有用建议 我有三门课 class A extends X implement Y doA class B extends X implement Y doB class C extends X
  • 如何在 Spark SQL 中压缩两个数组列

    我有一个 Pandas 数据框 我尝试首先将包含字符串值的两列连接到一个列表中 然后使用 zip 我用 连接列表的每个元素 我的数据集如下 df column 1 abc def ghi df column 2 1 0 2 0 3 0 我想
  • Spring MVC 中的 WebRequest 和 HttpServletRequest

    两者有什么区别 两者都有一个getParameter方法以及setAttribute方法 那么两者的区别在哪里呢 1 一般情况下使用哪一种更好 2 请说明具体的使用场景 The WebRequest 的 javadoc http docs
  • pop eip 指令合法吗?

    我正在参加大学的理论考试 并被问到这个问题 经过一些指令后 esp 增长了 4 eip 增长了 20 该指令可能是什么 我标记了 pop eip 和 ret nasm 32位汇编中是否可以执行pop eip指令 pop eip不是真正的 x
  • 在 Shopify 中更新/删除购物车属性

    我使用购物车属性将每个产品的额外信息添加到购物车 从产品页面 我专门使用购物车属性 over 行项目属性因为客户需要能够稍后按订单编辑此信息 而订单项属性不允许 添加信息工作得很好 当客户决定从购物车中删除商品时 问题就出现了 因为尽管该商
  • 毕达哥拉斯三倍效率

    我需要创建一个函数 它接受整数列表并返回列表中是否存在毕达哥拉斯三元组 例如 3 5 7 4 回报True因为 3 4 5 是毕达哥拉斯三元组 到目前为止我有这个 Python def containsPythagoreanTriple a