算法时间复杂度,大O表示法, 最好、最坏、平均时间复杂度
定义
时间复杂度就是用来方便开发者估算出程序的运行时间。
我们该如何估计程序运行时间呢,我们通常会估计算法的操作单元数量,来代表程序消耗的时间, 这里我们默认CPU的每个单元运行消耗的时间都是相同的。
假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示。
随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。
时间复杂度表示算法的执行时间与数据规模之间的增长关系。
大O表示法只考虑算法时间复杂度的主导部分,即把算法的时间复杂度的低阶项和系数去除的一种表示方法。
复杂度量级
常数阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
平方阶 O(n^2),立方复杂度....
指数阶 O(2^n)
阶乘阶 O(n!)
各个时间复杂度量级的图像
程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import numpy as np import matplotlib.pyplot as plt x = np.linspace( 0.01 , 5.01 , 100 ) y = np.zeros( 100 ) plt.plot(x, y, c = 'black' ) plt.plot(x, np.log2(x), label = 'log2(n)' ) plt.plot(x, x, label = 'n' ) plt.plot(x, x * np.log2(x), label = 'nlog2(n)' ) plt.plot(x, x * * 2 , label = 'n^2' ) plt.plot(x, 2 * * x, label = '2^n' ) plt.xlim( 0.01 , 5.01 ) plt.xticks(np.arange( 0.0 , 5.0 , step = 0.5 )) plt.legend(loc = 'best' ) plt.grid() plt.show() |
下面的内容摘自知乎:什么是最好、最坏、平均、均摊时间复杂度?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通