指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
时间复杂度-关于 O(n) 和 O(log n)的定义

“O(n)” 和 “O(log n)” 是算法分析中的时间复杂度(Time Complexity)表示方式,用来衡量算法随着输入规模增大时,运行时间的增长趋势。我们来详细对比这两者:


🔢 O(n)(线性时间复杂度)
  • 含义:随着输入数据量 n 的增加,算法的运行时间也线性增加。

  • 举例:

    function sum(arr) {
      let total = 0;
      for (let i = 0; i < arr.length; i++) {
        total += arr[i];
      }
      return total;
    }
    

    这个函数会对每个元素做一次操作,所以时间复杂度是 O(n)。

  • 特点:

    • 效率中等;
    • 适用于遍历型操作;
    • 如果 n = 1000,就需要大约 1000 次操作。

🪜 O(log n)(对数时间复杂度)
  • 含义:随着 n 的增加,运行时间只增加对数倍数,增长非常慢。

  • 举例:二分查找:

    function binarySearch(arr, target) {
      let left = 0;
      let right = arr.length - 1;
    
      while (left <= right) {
        let mid = Math.floor((left + right) / 2);
        if (arr[mid] === target) return mid;
        if (arr[mid] < target) left = mid + 1;
        else right = mid - 1;
      }
    
      return -1;
    }
    

    每次都将搜索区间减半,所以是 O(log n)。

  • 特点:

    • 效率非常高;
    • 常见于排序数组上的查找、树结构操作(如平衡二叉树);
    • 如果 n = 1024,最多只需要大约 log₂(1024) = 10 次操作!

⛳ 比较总结
时间复杂度操作数增长举例效率
O(n)成正比遍历数组中等
O(log n)成对数增长二分查找非常高效
可视化对比(大致数量):
n 值O(n) 操作次数O(log n) 操作次数
10104
1001007
1000100010
1,000,0001,000,00020