一:O(n)、o(n)![](https://img-blog.csdnimg.cn/direct/7653713395c74f97b911d72b2b73916e.png)
![](https://img-blog.csdnimg.cn/direct/6b380285bb204ea4b51b249e160dca9a.png)
![](https://img-blog.csdnimg.cn/direct/64955493a40c4da4bdeea12a4cca1993.png)
import matplotlib.pyplot as plt
import numpy as np
# 定义 n 的范围
n = np.linspace(1, 100, 400)
# 定义 O(n) 和 o(n) 的函数
O_n = n
o_n = n / np.log(n)
# 创建图像
plt.figure(figsize=(10, 6))
plt.plot(n, O_n, label="O(n) = n", color='blue')
plt.plot(n, o_n, label="o(n) = n / log(n)", color='green')
plt.ylim(0, 120) # 限制 y 轴范围以便更好地展示
# 添加标题和标签
plt.title("O(n) vs o(n)")
plt.xlabel("n (输入规模)")
plt.ylabel("时间复杂度")
plt.legend()
# 显示图像
plt.grid(True)
plt.show()
二:时间复杂度
如果你运行上面的代码,图像会显示以下几条曲线,分别代表不同的时间复杂度:
-
O(1) - 蓝色:
- 这是一条水平线,表示常数时间复杂度,无论输入规模 n 多大,执行时间保持不变。
-
O(log n) - 绿色:
- 这是一条渐渐上升的曲线,表示对数时间复杂度。随着 n增加,执行时间增加得很慢。
-
O(n) - 红色:
- 这是一条直线,表示线性时间复杂度。执行时间随着输入规模线性增加。
-
O(n log n) - 紫色:
- 这是一条曲线,表示线性对数时间复杂度。增长速度比线性快,但比平方慢。
-
O(n^2) - 橙色:
- 这是一条抛物线,表示平方时间复杂度。执行时间随着输入规模平方增加,增长速度非常快。
总结
通过这些曲线,我们可以直观地看到不同时间复杂度的增长情况。常数时间最优,平方时间最差,而对数、线性和线性对数时间复杂度介于两者之间。了解这些复杂度可以帮助我们选择和优化算法,以提高性能。
三:极限
四:导数
五:求导方法
六:导数应用:费马定理
七:导数应用 函数逼近
函数逼近是数学中一种重要的技术,用于通过简单或者已知的函数逼近复杂的函数或数据。这种技术在数值分析、统计学、工程学等领域中有广泛的应用。
函数逼近的方法和技术
-
泰勒级数展开:
- 泰勒级数是一种将函数在某一点附近展开成无穷级数的方法。通过泰勒级数展开,可以用多项式来逼近任意光滑函数,其中高阶项的贡献会随着阶数的增加而减小。
-
插值法:
- 插值法通过已知点的函数值来构造一个多项式,使得该多项式通过这些点。常见的插值方法包括拉格朗日插值和牛顿插值,它们可以精确地逼近给定的数据点,但在一些情况下可能会引入振荡或者不稳定性。
-
最小二乘法:
- 最小二乘法通过最小化观测数据与理论模型之间的残差平方和来找到最佳拟合曲线。这种方法广泛应用于回归分析和数据拟合中,例如线性回归、多项式拟合等。
-
傅立叶级数:
- 傅立叶级数将周期函数分解成一系列正弦和余弦函数的和,通过控制各个分量的振幅和相位可以逼近任意的周期函数。
-
样条插值:
- 样条插值通过分段低阶多项式(通常是三次样条)来逼近函数。这种方法可以在每个分段内保持多项式的光滑性,并且可以通过插值点处的导数信息进一步优化拟合效果。
-
小波变换:
- 小波变换通过将信号分解成不同尺度和频率的小波基函数来进行函数逼近。小波变换在信号处理和图像处理领域中有重要应用。
应用和实际意义
-
数据拟合和预测:函数逼近使得可以从有限的数据点或者观测中推导出更广泛的结论或预测,例如天气预报中的气温变化预测。
-
数值计算:在数值分析中,函数逼近是求解微分方程、积分和求根问题的重要工具。
-
图像处理和模式识别:函数逼近在图像处理中用于去噪、图像压缩和特征提取。
-
优化和控制:函数逼近在优化问题中用于构造代价函数或者目标函数,帮助寻找最优解或者设计控制策略。
函数逼近方法的选择通常依赖于问题的具体性质、数据的性质以及对逼近精度的要求。不同的方法在不同的场景中可能会有各自的优势和局限性。
八:导数应用 泰勒展开
九:凸函数