时间复杂性O(f(n))
概述
T(n) =次数表示式,表示的是执行的次数; O(n) 通过T(n)的抓大头等操作后这就是时间复杂度,有O(1)、O(logn)、O(n)、O( nlogn)、O(n^2)、O(n^3)、O(2^n) 这些
O(1)
没有for循环体的最上而下的时间复杂性是O(n)
O(n)
有一层for循环的
比如:for(i=1; i=n; i+=2); 的时间复杂度为 A. O(n) # 这种i+=2,i-=2这种是O(1/2 n),但还是O(n), 如果是i*=2就不一样了。
递归也是O(n) :
O(n^k)
有k层for 循环的
特别地:for (int i=0; i < n; ++i) {
for (int j=i; j < n; ++j) {...}
}
这种只需算最深层执行的次数即可,T(n) = n + (n-1) + (n-2) + (n-3) + ... +2+1 = Sn = [(1+n)n]/2 即时间复杂度为O(n^2), 也是符合a层循环,时间复杂度为O(n^a) 的。
O( loga(n) )
上一次查找的量是本次的a倍如果说一个算法的时间复杂度是log2n,那么这个程序有可以是二分查找算法。因为它对n个进行2分查找最多是log2n次。再比如:
int i = 1; while(i<n) { i = i * 2; }
从上面代码可以看到,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。我们试着求解一下,假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2^n
线性对数阶O(nlogN)
其实非常容易理解,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。
for(m=1; m<n; m++) { i = 1; while(i<n) { i = i * 2; } }
注意点
一、注意,1、如果有两个同级的for循环取最大的。 O(n) < O(n^2)
二、有if else语句的,取大的
三、还有一个空间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
2020-12-26 写得少做得多——jQuery
2020-12-26 java中synchronized、Lock实现线程安全 #干货