You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何检查百万元素集合比判断单个值的执行速度更快?

Collatz猜想验证代码中判断条件变更导致性能暴跌的原因

我在测试验证1至100万数字是否符合Collatz猜想时,写出了最快版本v5,平均耗时1.104s,代码如下:

def v5():  # Avg t: 1.104s
    min_n = 1
    max_n = 1_000_000
    global_steps_list = {1, 2, 4}

    for n in range(min_n, max_n):
        steps_list = set()

        while True:
            if n in global_steps_list:
                global_steps_list.update(steps_list)
                break

            elif n % 2 == 0:
                n /= 2
            else:
                n = 1 + (n * 3)

            steps_list.add(n)

但当我把判断条件if n in global_steps_list:(百万级集合)改成以下几种形式后,执行时间大幅飙升:

  • 改为if n == 4:,耗时31s
  • 改为if n in {4},耗时37s
  • 预定义单元素集合l = {4}后用if n in l:,耗时约42s

核心原因

  1. 原逻辑终止时机更早:global_steps_list会持续记录所有已验证过的Collatz序列节点(包括中间值)。只要当前n属于这个集合,就能立刻终止循环——绝大多数数字不需要走完整个序列到4,中途遇到已记录的节点就会停止,迭代次数被大幅压缩。

  2. 修改后逻辑终止时机极晚:三种修改后的判断条件,只有当n等于4时才会终止循环。这意味着每个数字都必须完整走完Collatz序列直到降到4,迭代次数暴增数倍,直接导致总耗时飙升。

  3. 单元素集合判断的额外开销:n in {4}或n in l比n ==4更慢,是因为集合的in操作虽为O(1),但相比直接的整数相等判断,多了哈希计算、查找表访问等额外步骤;预定义集合l的耗时略高,还可能涉及变量查找的微小成本。


内容的提问来源于stack exchange,提问作者Perseus_Lynx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:54:55