算法设计与分析 —— 算法的复杂度分析

article/2025/10/28 17:58:28

什么是算法的复杂度

(1)算法复杂度即算法所需要的计算机资源

(2)算法的复杂度可分为算法的时间复杂度 T ( n ) T(n) T(n) 和算法的空间复杂度 S ( n ) S(n) S(n),其中 n n n 是问题的规模(输入大小)

算法的时间复杂度

时间复杂度就是函数中基本操作所执行的次数,记为 T ( n ) T(n) T(n),可分为:

(1)最坏情况下的时间复杂度: T m a x ( n ) = m a x { T ( l ) ∣ s i z e ( l ) = n } T_{max}(n)=max\{T(l)|size(l)=n\} Tmax(n)=max{T(l)size(l)=n}

(2)最好情况下的时间复杂度: T m i n ( n ) = m i n { T ( l ) ∣ s i z e ( l ) = n } T_{min}(n)=min\{T(l)|size(l)=n\} Tmin(n)=min{T(l)size(l)=n}

(3)平均情况下的时间复杂度: T a v g ( n ) = ∑ s i z e ( I ) = n p ( I ) T ( I ) T_{avg}(n)=\sum\limits_{size(I)=n}p(I)T(I) Tavg(n)=size(I)=np(I)T(I)
其中, I I I是问题的规模为 n n n的实例(或称合法输入), p ( I ) p(I) p(I)是实例 I I I出现的概率。

算法的空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记为 S ( n ) S(n) S(n),可分为:

(1)程序的保存所需要的存储空间资源。即程序的大小;

(2)程序在执行过程中所需要消耗的存储空间资源,如中间变量等;

时间与空间复杂度的联系

对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。

算法的渐近时间复杂度

n → ∞ n→∞ n时,若 ( T ( n ) − t ( n ) ) / T ( n ) → 0 (T(n)-t(n))/T(n)→0 (T(n)t(n))/T(n)0,则称 t ( n ) t(n) t(n) T ( n ) T(n) T(n)的渐近性态,为算法的渐近时间复杂度。在直观上, t ( n ) t(n) t(n) T ( n ) T(n) T(n)略去低阶项留下的主项,它比 T ( n ) T(n) T(n)简单。

复杂度排序: ( l o g n ) x &lt; ( l o g n ) x + ε &lt; n x &lt; n x + ε &lt; 2 n &lt; 2 n + ε (logn)^x&lt;(logn)^{x+ε}&lt;n^x&lt;n^{x+ε}&lt;2^n&lt;2^{n+ε} (logn)x<(logn)x+ε<nx<nx+ε<2n<2n+ε

(1)渐近上界记号O —— 大O表示法

N N N充分大时,函数 t ( N ) t(N) t(N)有上界 g ( N g(N g(N),即 t ( N ) &lt; = C g ( N ) t(N)&lt;= Cg(N) t(N)<=Cg(N),记为 t ( N ) = O ( g ( N ) ) t(N)=O(g(N)) t(N)=O(g(N)),此时, t ( N ) t(N) t(N)的阶不高于 g ( N ) g(N) g(N)的阶

  • 满足大O表示法的c和 n 0 n_0 n0的值并不重要,只需要说明存在即可。
  • 大O表示法试图给算法的时间代价找到一个最小上界,这个上界的阶越低,则算法评估就越精确,结果就越有价值
  • 用低次项(如 n n n)的项目替换高次项的项目(如 n 2 n^2 n2),直到剩下一个单项为止

举例如下:

(2)渐近下界记号Ω —— 大Ω表示法

N N N充分大时,函数 t ( N ) t(N) t(N)有下界 g ( N ) g(N) g(N),即 t ( N ) &gt; = C g ( N ) t(N)&gt;= Cg(N) t(N)>=Cg(N),记为 t ( N ) = Ω ( g ( N ) ) t(N)=Ω(g(N)) t(N)=Ω(g(N)),此时, t ( N ) t(N) t(N)的阶不低于 g ( N ) g(N) g(N)的阶

  • 满足大Ω表示法的 c c c n 0 n_0 n0的值并不重要,只需要说明存在即可。

  • 试图给算法的时间代价找到一个最大下界,因为这个下界的阶越高,则算法评估就越精确,结果就越有价值

  • 省略低次项,直到剩下一个单项为止

举例如下:

(3)紧渐近界记号Θ —— Θ表示法

当且仅当 t ( N ) = O ( g ( N ) ) t(N)= O(g(N)) t(N)=O(g(N)) t ( N ) = Ω ( g ( N ) ) t(N)=Ω(g(N)) t(N)=Ω(g(N))时,有 t ( N ) = Θ ( g ( N ) ) t(N)= Θ(g(N)) t(N)=Θ(g(N)),此时, t ( N ) t(N) t(N)的阶等于 g ( N ) g(N) g(N)的阶

举例如下:

(4)非紧上界记号o —— 小o表示法

当且仅当 t ( N ) = O ( g ( N ) ) t(N)= O(g(N)) t(N)=O(g(N)) t ( N ) ≠ Ω ( g ( N ) ) t(N) ≠Ω(g(N)) t(N)̸=Ω(g(N))时,有 t ( N ) = o ( g ( N ) ) t(N)= o(g(N)) t(N)=o(g(N))。即 t ( N ) t(N) t(N)的阶不高于 g ( N ) g(N) g(N)的阶

问题的下界及最优算法

  • 给定充分大的问题规模 N N N,对于这个问题的所有算法的复杂性中取相应的下界

  • 问题的计算时间下界为 Ω ( f ( N ) ) Ω(f(N)) Ω(f(N)),则计算时间复杂性为 O ( f ( N ) ) O(f(N)) O(f(N))的算法为最优算法。

算法分析的基本法则

非递归算法:

(1)for/while循环:循环体内计算时间*循环次数。

(2)嵌套循环:循环体内计算时间*所有循环次数。

(3)顺序语句:各语句计算时间相加。

(4)if-else语句:if语句计算时间和else语句计算时间的较大者。


http://chatgpt.dhexx.cn/article/4flQFKQY.shtml

相关文章

算法设计与分析 第一章 基础知识作业1

目录 算法分析题1.1 函数的渐进表达式1.3 证明对于任何实数x和整数a,b,n:1.7 函数渐进阶 算法实现题1.1 统计数字问题1.3 最多约数问题 算法分析题 1.1 函数的渐进表达式 求下列函数的渐近表达式&#xff1a;3n210n; n2/102n; 211/n; logn3; 10log3n 1.3 证明对于任何实数x…

USTC算法设计与分析-总结

《算法设计与分析》是中国科学技术大学计算机专业的研究生学科基础课&#xff0c;黄刘生老师讲概率算法和近似算法&#xff0c;汪炀老师讲分布式算法&#xff0c;因为课程内容繁杂且难度较大&#xff0c;所以结合了上课所做笔记和期末复习总结成思维导图&#xff0c;梳理下思路…

《算法设计与分析基础》第2版

今天开始学习《算法设计与分析基础》这本书&#xff0c;书中提及的算法均会在后续博客实现。 清华大学出版社。

算法设计与分析重点总结

考试题型&#xff1a; 选择 2* 10个 填空2* 10个 简答 3* 4个 程序分析填空 4* 4个 综合&#xff08;代码&#xff09;8* 4个 第一章基础知识 1.算法的定义 算法就是解决问题的方法&#xff0c;是解决某一特定问题的一组有穷指令的序列&#xff0c;是完成一个任务所需要的具…

算法设计与分析基础 第八章谜题

习题8.1 6.切割木棍问题 为下列问题设计一个动态规划算法。已知小木棍的销售价格pi和长度i相关&#xff0c;i1,2&#xff0c;…&#xff0c;n&#xff0c;如何把长度为n的木棍切割为若干根长度为整数的小木棍&#xff0c;使得所获得的总销售价格最大&#xff1f;该算法的时间效…

算法设计与分析基础(三)

算法设计与分析基础(三) 练习题 根据下列函数的增长次数按照从低到高的顺序对他们进行排序。 解答&#xff1a; 解答&#xff1a; 即&#xff0c;该多项式的始终值为ak*n^k,则结论成立。 考虑下面的算法&#xff1a; 算法Mystery(m) //输入:非负整数n S←0 for i←1 to …

算法设计与分析基础

To All Of You&#xff1a; 一个人在接受科技教育时能得到的最珍贵的收获是能够终身受用的通用智能工具。 在讨论算法的书籍中&#xff0c;一般会采用两种方案中的一种&#xff1a; 1.第一种方案是按照问题的类型对算法进行分类。这类教材安排了不同的章节分别讨论排序&…

第一章 算法设计与分析基础知识

系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 …… [TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 参考教材 《算法设计与分析&#xff08;第2版&#xff09;》是由屈婉玲、刘田、张立昂、王…

算法设计与分析——算法分析基础

算法分析主要是时间复杂度和空间复杂度的两个方面的分析 此处带着问题小预告一把&#xff1a; 时间复杂度&#xff1f;空间复杂度&#xff1f; 大O、大和大分别表示什么&#xff1f; 如何得到递归方程&#xff1f;如何求解递归方程呢&#xff1f; 带着问题来探索吧~ 目录…

算法设计与分析(1)——基础知识

写完 Java 的我又开始对 算法设计与分析 下手了(✿◡‿◡) 内容主要是以 北京大学 屈婉玲老师的 MOOC 视频来写的&#xff0c;视频共是十周的内容&#xff0c;我决定用 五 篇博客完成。 温馨提示&#xff1a;这个课程不仅适用于 算法设计与分析 的学习&#xff0c;也非常适用…

算法设计与分析——算法基础初步了解

算法的概念 算法:一个有计算步骤构成的序列&#xff0c;可以将一组输入值转换成相应的输出值。或可以用例解决一个明确的问题。 问题&#xff1a;输入及相应输出的描述&#xff1a; 算法的特点&#xff1a;确定性、可行性、输入和输出及有穷性。 正确的算法&#xff1b;停机并…

算法设计与分析基础知识

一、算法设计基础 算法是&#xff08;algorithm&#xff09;是对特定问题求解步骤的一种描述&#xff0c;是指令的有限序列。 算法的五个特性&#xff1a; 输入&#xff1a;一个算法可以有零个或多个输入。 输出&#xff1a;一个算法有一个输出或多个输出。 有穷性&#xff08;…

为你的股票绘制趋势图

手里有一点点公司的股票&#xff0c; 拿不准在什么时机抛售&#xff0c; 程序员也没时间天天盯着看&#xff0c;不如动手写个小程序&#xff0c; 把股票趋势每天早上发到邮箱里&#xff0c;用 python 的 pandas, matplotlib 写起来很容易&#xff0c; 几十行代码搞定。 准备环…

用PYTHON画图 看股票/数字货币的趋势分析 带你直观理解指标 K线图

用PYTHON画图 看股票/数字货币的趋势分析 带你直观理解指标 本文章将用PYTHON 画图 以比特币&#xff08;BTC&#xff09;为例 进行画图分析 &#xff08;小白向&#xff09; Pycharm平台编写 所用到的python库 import requests from lxml import etree import math import …

Plotly中绘制三种经典的股票交易图表(含视频讲解)

作者&#xff1a;Lemon 来源&#xff1a;Python数据之道 Plotly中绘制三种经典的 股票交易图表&#xff08;含视频讲解&#xff09; 大家好&#xff0c;我是 Lemon 。 背景 前一段时间&#xff0c; Lemon 发了一期视频&#xff0c;分享了 Plotly 和 Dash 在投资领域的应用案例。…

如何在股票软件画波浪?波浪原理?初级应用画线

如何在股票软件画波浪&#xff1f;波浪原理?初级应用画线 听语音 浏览&#xff1a;1|更新&#xff1a;2018-03-13 10:07|标签&#xff1a;股票 1 2 3 4 5 6 7 分步阅读 波浪理论最主要特征就是它的通用性&#xff0c;在股市中是一个十分重要的技术研究方向&#xff0c;一旦成…

使用Python生成股票K线图

可视化股票数据&#xff0c;这里只做简单的处理&#xff0c;只显示k线图。选取的是海通证券&#xff08;600837&#xff09;2020年1月1日之后150个交易日的数据。这里代码不多&#xff0c;没有封装成方法&#xff0c;代码如下。数据是提前获取的&#xff0c;获取方法见&#xf…

Python获取股票数据并绘制相应K线图,看这个就够了!

Python对股票的K线可视化 前言说明注意 数据获取Tushare获取股票数据获取医疗器械板块数据&#xff08;代码部分&#xff09;获取股票数据&#xff08;代码部分&#xff09; 数据预处理变量中文化&#xff08;代码部分&#xff09; K线绘制代码部分结果展示 写在最后 前言 说明…

使用mpl_finance画股票K线图

使用mpl_finance画股票K线图 前言正文 前言 今天给大家介绍一下如何利用 python 中的 mpl_finance 模块画股票K线图。 该模块在 matplotlib 2.0之前是叫做 matplotlib.finance 但此之后是叫做 mpl_finance。 详细介绍请看https://matplotlib.org/api/finance_api.html 。具体用…

Python画图实战之画K线图【附带自动下载股票数据】

关于Python画图的基本知识可以先查看下面这篇文章Python画图&#xff08;直方图、多张子图、二维图形、三维图形以及图中图&#xff09;https://blog.csdn.net/weixin_41896770/article/details/119798960 对于股民来说&#xff0c;K线图是最常见的一种参考&#xff0c;使用Pyt…