O(log n) 与 O(n) 的核心区别

把复杂度想成“当数据量 n 越来越大时,程序要跑多少步”。
O(log n) 与 O(n) 的核心区别,用一句大白话:

O(log n) 每翻一倍数据,只多跑一步
O(n) 每翻一倍数据,得多跑一倍步数


1 先抓直觉:电话簿翻名字

  • O(n):从第一页开始逐页扫描,3000 页就要看 3000 行。

  • O(log n):电话簿已按字母排序,你直接对半翻、再对半翻——最多翻 log₂3000 ≈ 12 次就能找到。
    数据量翻 10 倍到 30 000 页,也只再多 3~4 次翻开而已。


2 数学图像
把 n 从 1 涨到 100 万:

数据量 nO(log n) 步数O(n) 步数
1 000≈101 000
1 000 000≈201 000 000

O(log n) 曲线几乎躺平;O(n) 是45° 直线往上冲。


3 代码层面怎么一眼识别

  • 一层循环把问题“砍掉一半” → O(log n)
    例:二分查找、平衡二叉树查找、堆的插入/删除。

    while lo <= hi:          # 区间每轮减半
        mid = (lo + hi) // 2
        ...
    
  • 一层循环把问题“逐个扫一遍” → O(n)
    例:数组求和、链表遍历、顺序查找。

    for x in arr:            # 每个元素都碰一次
        s += x
    
  • 两层嵌套,每层都几乎扫 n → O(n²)
    例:冒泡排序、暴力两数之和。


4 速记口诀
折半砍 = log n,挨个扫 = n,套两层 = n 方。”

记住电话簿例子,以后看到“区间减半”“树往下走”就条件反射:
哦,这是 **O(log n)**,数据再大也不慌!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值