首页 > 编程语言 >聊聊前端算法复杂度

聊聊前端算法复杂度

时间:2023-10-07 10:05:31浏览次数:40  
标签:function arr obj 聊聊 复杂度 算法 数据量 fn

算法复杂度

前端开发一般:重时间 轻空间

什么是复杂度

  1. 程序执行时需要的计算量和内存空间(和代码简洁度无关)
  2. 复杂度是 数量级,不是具体的 数字
  3. 一般针对一个具体的算法,而非一个完整的系统

时间复杂度

程序执行时需要的计算量(cpu)

  1. O(1) 一次就够
    1. "可数的", 和输入量无关,无论输入量是1还是1000,都只计算一次
  2. O(n) 和传输的数据量一样
  3. O(n^2) 数据量的平方
  4. O(logn) 数据量的对数
  5. O(n*logn) 数据量 * 数据量的对数
// O(1)
function fn(obj = {}, key) {
  return obj[key]

  return obj.a + obj.b + obj.c // 这个计算量虽然大概为4-5,但是也是数量级1,不需要去循环数据量
}
// O(n)
function fn(arr = []) {
  for (let i = 0; i < arr.length; i++) {
    console.log(arr[i])
  }
}
// O(n^2)
function fn(arr = []) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr.length; j++) {
      console.log(arr[j])
    }
  }
}
// O(logn)
// 二分的思想
function fn(arr = []) {
  // 每次都排除一半的数据量
}
// O(n * logn)
// 先循环,再嵌套二分
function fn(arr = []) {

}

空间复杂度

程序执行时需要的内存空间

  1. O(1) 有限的、可数的空间
  2. O(n) 和输入的数据量相同的空间
  3. O(n^2)
// O(1)
function fn(arr = []) {
  // 没有循环,都是可数的
  const a = arr[1]
  const b = arr[2]
}
// O(n)
function fn(arr = []) {
  const arr2 = []
  for (let i = 0; i < arr.length; i++) {
    arr2[i] = arr[i]
  }
  // ...
}

标签:function,arr,obj,聊聊,复杂度,算法,数据量,fn
From: https://blog.51cto.com/u_15669122/7732781

相关文章

  • manacher 回文串处理算法
    忘了具体什么时候写的,应该是2023.8初这算是个算法复习,因为我太菜了以前学的都不会了。manacher回文串处理算法其实这个我已经看两天了却一直没有看懂,觉得自己很愚笨,结果发现是自己一直不想去理解吧,然后今天仔细研究了以后发现就是那么个东西,没有什么很深奥的东西,那就自己整......
  • 10 对比不同的优化算法
    importnumpyasnpimportmatplotlib.pyplotaspltimportscipy.ioimportmathimportsklearnimportsklearn.datasetsfromopt_utilsimportload_params_and_grads,initialize_parameters,forward_propagation,backward_propagationfromopt_utilsimportcomp......
  • 【算法】国庆加班,火锅与Linq.AddRange的奇妙螺旋
    在国庆假期的一个傍晚,小悦正在家中享受火锅美食。她嘴里咀嚼着鲜嫩的牛肉,脸上洋溢着满足的微笑。突然,手机铃声响起,打破了这温馨的氛围。她拿起手机一看,是公司打来的电话。“小悦,有个紧急的项目需要处理,你能来公司加一下班吗?”电话那头传来领导焦急的声音。小悦顿时嘟起嘴,不太情......
  • 扩展欧几里得算法
    算法阅读此篇前可先阅读欧几里得算法。给定\(a,b,s\),求\(ax+by=s\)的任意一组解。证明:由裴蜀定理得:二元一次方程\(ax+by=c\)的有解条件是\(\gcd(a,b)\midc\)。由欧几里得算法得知\(\gcd(a,b)=\gcd(b,a\modb)\)假设我们求出了\(\gcd(b,a\modb)\)的两个解\((x'......
  • 算法性能分析
       1.究竟什么是时间复杂度时间复杂度是一个函数,它定性描述该算法的运行时间。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为O(f(n))2.什么是大O......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在G......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在Go......
  • 算法异或的运用
    题目描述在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,…。每一盏灯只有两种可能的状态,开或者关。如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。如果原来是开,将变成关。如果原来是关,将变成开。在刚开始的时候,所有的灯都是关的。小明每次可以进行如下的操作:指......
  • 算法之动态规划(DP)求解完全背包问题(状态转移式方程推导)
    完全背包是01背包的进阶版。在这里补充一下代码随想录的完全背包状态转移式的推导。有兴趣的可以先看一看原版。状态转移方程状态:dp[i][j]选择前i个物品,容量为j的背包时所选物品价值总和最大。状态转移:dp[i][j]=max(dp[i-1][j-k*v[i]]+k*w[i])(k=0,1,2,3...)(j-k*v......
  • 深入探究数据结构与算法:构建强大编程基础
    文章目录1.为什么学习数据结构与算法?1.1提高编程技能1.2解决复杂问题1.3面试准备1.4提高代码效率2.学习资源2.1经典教材2.2在线学习平台2.3学习编程社区3.数据结构与算法的实际应用3.1排序算法3.2图算法3.3字符串匹配算法4.结论......