我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

  • 基础

  • 框架

  • 情商

  • 算法

    • 说说对二分查找的理解
    • 说说对动态规划、分而治之的理解
    • 说说对图的理解
    • 说说对堆的理解
    • 说说对归并排序的理解
    • 说说对快速排序的理解
    • 说说对插入排序的理解
    • 说说对数据结构的理解
    • 说说对栈、队列的理解及应用
    • 说说对树(二叉树)的理解
    • 说说对算法的理解及应用场景
    • 说说对贪心算法,回溯算法的理解
    • 说说对选择排序的理解
    • 说说有哪些排序算法及理解
    • 说说算法复杂度有哪些?
      • 是什么
        • 衡量算法优劣维度
      • 时间复杂度
        • 嵌套循环取最大
      • 空间复杂度
        • 举例
    • 说说对冒泡排序的理解
  • 网络

  • 千锤百炼
  • 算法
fangdown
2021-10-08
目录

说说算法复杂度有哪些?

# 是什么

# 衡量算法优劣维度

  1. 时间维度: 执行当前算法消耗的时间
  2. 空间维度: 执行当前算法占用的内存空间

通常时间和空间不能兼顾, 需取得平衡点

# 时间复杂度

  1. 理解: 执行次数越多, 花费的时间就越多
  2. 定义: T(n)= O(fn(n))
  • O(1)
  • O(log n)
  • O(n)
  • O(nlog n)
  • O(n^2)
  • O(n^3)
  • O(n^k)
  • O(2^n)
  1. 效率 Ο(1)<Ο(log n)<Ο(n)<Ο(nlog n)<Ο(n2)<Ο(n3)<…<Ο(2^n)<Ο(n!)
  • O(n)
function process(n) {
  let a = 1
  let b = 2
  let sum = a + b
  for(let i = 0; i < n; i++) {
    sum += i
  }
  return sum
}
  • O(n ^ 2)
function process(n) {
 let count = 0
  for(let i = 0; i < n; i++){
    for(let i = 0; i < n; i++){
      count += 1
    }
  }
}
  • O(log n)
function process(n) {
  let i = 1; // ①
  while (i <= n) {
     i = i * 2; // ②
  }
}

循环语句中以2的倍数来逼近n,每次都乘以2。如果用公式表示就是1 * 2 * 2 * 2 … * 2 <=n,也就是说2的x次方小于等于n时会执行循环体,记作2^x <= n,于是得出x<=logn

# 嵌套循环取最大


function process(n) {
  let sum = 0
  for(let i = 0; i < n; i++) {
    sum += i
  }
  for(let i = 0; i < n; i++){
    for(let i = 0; i < n; i++){
      sum += 1
    }
  }
  return sum

O(n) < O(n^2), 那么复杂度为O(n^2)

# 空间复杂度

  1. 理解:执行算法占用的内存大小
  • O(1)
let a = 1
let b = 2
let c = 3
  • O(n)
let arr []
for(i=1; i<=n; ++i){
  arr.push(i)
}

# 举例

  • 栈、递归空间复杂度为O(1)
  • 一维数组 O(n)
  • 二维数组 O(n^2)
#算法
上次更新: 2021/12/19, 18:05:42
说说有哪些排序算法及理解
说说对冒泡排序的理解

← 说说有哪些排序算法及理解 说说对冒泡排序的理解→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式