ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 算法时间复杂度 **不是算法的逻辑代码到底被执行了多少次,而是随着输入规模的增大,算法对应执行总次数的变化趋势** 1. 时间复杂度是怎么算出来的 思路: 计算 T(n) --> 推导 O(n) T(n) 是代码执行的次数 推导: * 若 T(n) 是常数,那么无脑简化为1 * 若 T(n) 是多项式,比如 3n^2 + 5n + 3,我们只保留次数最高那一项,并且将其常数系数无脑改为1。 遍历 N 维数组,需要 N 层循环,我们只需要关心其最内层那个循环体被执行多少次就行了。 常见的时间复杂度表达,除了多项式以外,还有`logn` ``` function fn(arr) { const len = arr.length for(let i=1;i<len;i=i*2) { console.log(arr[i]) } } ``` 我们关心的就是`console.log(arr[i])`到底被执行了几次,换句话说,也就是要知道`i<n`( len === n) 这个条件是在`i`递增多少次后才不成立的。 也就是 2^x >= n 成立 ![](https://img.kancloud.cn/a7/32/a732fa96bf34e80369a96a09ed21b68a_366x162.png) 2. 常见的时间复杂度按照从小到大的顺序排列 ![](https://img.kancloud.cn/0a/6f/0a6f97c2fe358592693dbe29ad0f3fdd_1148x414.png) ## 空间复杂度 算法在运行过程中临时占用**存储空间大小的量度**, 它是内存增长的**趋势**。 常见的空间复杂度有 O(1) 、O(n) 和 O(n^2)。 1. 如果算法在运行过程中,对内存的占用量是恒定的,它对应的空间复杂度就是`O(1)`