【LeetCode修行之路】算法的时间和空间复杂度分析
🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)
🌵文章目录🌵
- 前言
- 💡一、时间、空间复杂度简介
-
- 🥭1.1.时间复杂度
- 🍅1.2.空间复杂度
- 🍓1.3.大O表示法
- 📝二、时间、空间复杂度计算方法
-
- 🍉2.1.常见的复杂度形式
- 🍏2.2.如何计算时间复杂度
- 🍐2.3.如何计算空间复杂度
- 🎯三、常见数据结构与算法的时间、空间复杂度总结
-
- 🍊3.1.数据结构时间与空间复杂度
- 🌶️3.2.堆的时间与空间复杂度
- 🥕3.3.图的时间与空间复杂度
- 🥦3.4.`排序算法的时间与空间复杂度`
- 🌽3.5.搜索算法的时间与空间复杂度
- 🔄四、Master Theorem解决递归复杂度求解
-
- 🧀4.1.Master Theorem概念
- 🥐4.2.当运行时间主要由leaves决定
- 🥪4.3.当运行时间均匀分布在整个树中
- 🌮4.4.当运行时间主要由root决定
- 🍦五、 总结与重要性
- 🤝期待与你共同进步
- 📚参考文档
前言
一般来说,解决问题的方法不止一种。我们需要学习如何比较不同算法的性能,并选择最佳算法来解决特定的问题。一个算法的好坏,我们可以从时间和空间两个维度去衡量。并且,一般分为两个阶段,一是算法完成前的理论分析
,二是算法完成后实际分析
。
理论分析
:这种算法的效率分析是通过假设所有其他因素,如处理器的速度等是恒定的,对算法的实现没有影响。实际分析
:当算法实现后,我们需要考虑算法采用编程语言,然后在特定计算机上执行该算法,其消耗的时间与计算机的硬件水平相关。在此分析中,我们要收集实际的统计数据,如运行时间和所需空间。
本篇文章要讨论的主要是算法的理论分析,从常见的时间、空间复杂度入手,介绍各种时间、空间复杂度的特点,并总结一些通用数据结构、排序算法、搜索算法相关操作的时间和空间复杂度。最后,针对递归操作,使用Master Theorem来分析其复杂度。
💡一、时间、空间复杂度简介
🥭1.1.时间复杂度
时间复杂度是指执行这个算法所需要的计算工作量,其复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好地反映出算法的优劣与否。一个算法花费的时间与算法中语句的执行次数成正比,执行次数越多,花费的时间就越多。一个算法中的执行次数称为语句频度或时间频度,记为T(n),其中n称为问题的规模,当n不断变化时,它所呈现出来的规律,我们称之为时间复杂度。
比如: T ( n ) = n 2 + 1 T(n)=n^2+1 T(n)=n2+1
与 T ( n ) = 5 n 2 + 2 n + 1 T(n)=5n^2+2n+1 T(n)=5n2+2n+1
,虽然算法的时间频度不一样,但他们的时间复杂度却是一样的,时间复杂度只关注最高数量级,且与之系数也没有关系。通常一个算法由控制结构(顺序,分支,循环三种)和原操作(固有数据类型的操作)构成,而算法时间取决于两者的综合效率