读《趣学算法》:重开算法之门,时间复杂度与空间复杂度

news/2024/5/14 1:33:16/文章来源:https://blog.csdn.net/yyzsyx/article/details/127433073

14天阅读挑战赛

一、前言

程序 = 数据结构 + 算法

  • 时过境迁,自己早已把算法的基础忘记得干干净净,最近看到CSDN发起了《趣学算法》的14天阅读挑战赛,兴趣再次油然而起,既然想学,就不用那么计较,马上就开始!

二、算法复杂度

作为一名从事代码工作的程序员,在设计和优化算法时,首先就会关注到算法的复杂度。算法的复杂度,又分为时间复杂度和空间复杂度。

2.1 复杂度的表示

(1)常数阶: O(1)
  • 这应该是程序员追求的复杂度,随着n的增长,复杂度却是常数,例如1,10, 20。通常用 O(1)表示。
(2)多项式阶:O(nnn)、O(n2n^{2}n2)、O(n3n^{3}n3)
  • 就像我们日常学习的函数多项式,其特点是指数部分为常数,通常用:O(nnn)、O(n2n^{2}n2)、O(n3n^{3}n3)来表示,也就是多项式的最高高阶的项。
(3)指数阶:O(2n2^{n}2n)、O(nnn^{n}nn)、O(n!n!n!)
  • 算法效率极差,其复杂度随n呈现指数增长。通常用O(2n2^{n}2n)、O(nnn^{n}nn)、O(n!n!n!)表示
(4)对数阶:O(log⁡(n)\log(n)log(n))、O(nlog⁡(n)n\log(n)nlog(n))
  • 算法效率较高,通常用O(log⁡(n)\log(n)log(n))、O(nlog⁡(n)n\log(n)nlog(n))表示

算法执行效率, O(1) 最高, 而O(nnn^{n}nn) 最低,依次如下:
O(1) > O(log⁡(n)\log(n)log(n)) > O(nnn) > O(nlog⁡(n)n\log(n)nlog(n)) > O(n2n^{2}n2) > O(n3n^{3}n3) > O(2n2^{n}2n) > O(n!n!n!) > O(nnn^{n}nn)


2.2 时间复杂度

  • 时间复杂度, 即算法运行所需的时间。

例子:实现算法,计算1到n之间所有整数的和,并计算其时间复杂度。

2.2.1 青铜:O(nnn)

int SumFun(int n)
{int sum = 0;  // 计算 1 次int i=1; //计算1次for( ; i<=n; ) //计算n次{sum += i; //计算n次i++;  //计算n次}return sum; //计算1次
}

即,计算运行时间为:T(nnn) = 1+1+n+n+n+1= 3n+3 ,所以,其算法复杂度可表示为O(nnn)。

2.2.2 王者:O(111)

int SumFun(int n)
{int sum = 0;  // 计算 1 次sum =  (1+n) * n / 2; //加1次赋值,姑且就算4次return sum; //计算1次
}

举例:

(1)当n=5时,
1+2+3+4+5⏟15\underbrace{1+2+3+4+5}_{15}151+2+3+4+5

(2)当n=6时,
1+2+3+4+5+6⏟21\underbrace{1+2+3+4+5+6}_{21}211+2+3+4+5+6

即,计算运行时间为:T(nnn) = 1+4+1=6次 ,所以,其算法复杂度可表示为O(111)。

备注:计算复杂度时,一般可舍弃不重要的部分,只关心n的最高阶的项

2.3 空间复杂度

空间复杂度, 即算法运行所需的内存空间。

2.3.1 例子:空间复杂度 O(111)

int SumFun(int n)   //参数入栈,占用空间 1 个 int
{int sum = 0;  //局部变量,占用空间 1 个 intint i=1;     //局部变量,占用空间 1 个 intfor( ; i<=n; ){sum += i; i++;  }return sum;
}

即,计算运行时间为:T(nnn) = 1+1+1= 3 ,所以,其算法复杂度可表示为O(111)。

2.3.2 例子:空间复杂度 O(nnn)

  • 下面以一个递归函数举例

n为正整数,试求n的阶乘,即 f(n) = n! = n*(n-1)*(n-2) … *2 * 1

int fac( int n)
{if((n==0)  || (n==1))return 1;elsereturn n * fac(n-1);
}

假设 n=3, 即计算 3! = 3x2x1

  1. fac(3) = 3 x fac(2) = 3x2xfac(1) = 3x2x1 = 6

在这里插入图片描述

分析:如上图所示,每次递归,都要占用1个栈空间,当n=3时,就占用3个,所以可以估算出其空间复杂度为 O(n)

三、结束语

读完第一章,根据个人理解,做了小小的读书笔记,如有错误,麻烦指正~

四、课后问题

  • 谁能帮忙解答一下~
  • 请问:1.下图中 f(nnn) 是指 f(nnn)=n2n^2n2吗?Cf(nnn) ==2f(nnn) ?
  • 请问:2.下图中的n0n_0n0是如何计算的? 当T(n)≤\leqCf(n)时,n0n_0n0是不是该等于 -1?-_-||
  • 在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_404155.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web权限提升-令牌窃取烂土豆dll劫持

目录 &#xff08;一&#xff09;Windows2008&7令牌窃取提升-本地 0x01 前置知识——令牌&#xff08;TOKEN&#xff09; 令牌有很多种&#xff1a; MSF伪造令牌实战 0x02 原理和利用范围 &#xff08;二&#xff09;烂土豆提权 1. 原理&#xff1a; 总结 2.环境搭…

Cosmos模块化功能链 走向亿级用户的超级Dapp时代

前言 加密不缺故事&#xff0c;而 Aptos 贡献了一次事故。 Move 生态的威力不应被轻视&#xff0c;跟随 Aptos 主网上线的&#xff0c;已经有域名服务 Aptos Names、钱包 Pontem、多签钱包 Momentum Safe、NFT 市场 Souffl3、借贷协议 Argo。 这是第一次众多应用和主网一起上…

【预测模型-DELM分类】基于哈里斯鹰算法改进深度学习极限学习机实现数据分类附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Kubernetes—k8s介绍

文章目录k8s是什么kubernetes的主要概念PodReplicaSetDeploymentLabelServiceKubernetes 架构及组件Kubernetes架构kubernetes组件k8s是什么 官方介绍&#xff1a; Kubernetes 也称为 K8s&#xff08;中间8个字母&#xff0c;省略好记&#xff09;&#xff0c;是用于自动部署、…

垂钓图解教程: 鱼钩 All In One

垂钓图解教程: 鱼钩 All In One 鱼钩分类 鱼钩选择 线组搭配垂钓图解教程: 鱼钩 All In One 鱼钩分类有倒刺,无倒刺伊势尼 伊豆 新关东型号1, 2, 3, 4, 5, 6, 7, 8, 9 ...鱼钩选择依据目标鱼的类型 淡水鱼,海水鱼 底层鱼,中层鱼,上层鱼 食草性鱼,杂食性鱼,食肉性鱼目标鱼…

选择和循环结构的机器级表示

if-else两种机器级表示 注意区分条件转移和无条件转移指令 switch-case机器级表示 此处机器级代码是先判断了a>17和a<10时的default情况&#xff0c;然后10到17引用了跳转表&#xff0c;跳转表在目标文件的只读节中&#xff0c;按4字节边界对齐 但对于范围较大的swith-…

Spring Cloud Sleuth系列(1) — Sleuth环境搭建以及Feign整合调用分析

文章目录前言一、基础环境搭建1、项目环境搭建2、zipkin server启动3、基于Feign进行服务调用二、Sleuth Feign调用源码分析1、调用链分析2、Sleuth针对Feign进行的改造总结前言 该篇文章&#xff0c;主要介绍Spring Cloud Sleuth Zipkin基础环境搭建&#xff0c;以及基于源…

文华财经多个非常实用的期货指标公式,文华财经支撑压力自动画线公式

期货指标公式是通过数学逻辑角度计算而来&#xff0c;仅是期货分析环节中的一个辅助工具。期货市场具有不确定性和不可预测性的&#xff0c;请正常对待和使用指标公式! 期货指标公式信号本身就有滞后性&#xff0c;周期越大&#xff0c;滞后性越久。指标公式不是100%稳赚的工具…

畅享云原生超融合技术成果

作者&#xff1a;Vishal Ghariwala&#xff0c;SUSE 亚太及大中华区 CTO 超融合是服务器虚拟化和 VSAN 存储的必然发展结果。通过将存储、计算和网络这三大要素相集成&#xff0c;理论上数据中心对基础设施的控制能力可以无限扩展。这与超大规模运营商的发展目标高度契合&#…

电影主题HTM5网页设计作业成品——爱影评在线电影(10页面)使用dreamweaver制作采用DIV+CSS进行布局

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

【AGC035E】Develop(图论,DP)

对于某个集合 S⊆{1,⋯,n}S\subseteq\{1,\cdots,n\}S⊆{1,⋯,n}&#xff0c;考虑能不能删去 SSS。 对于任意 x∈Sx\in Sx∈S&#xff0c;连边 x→x−2x\to x-2x→x−2&#xff08;如果 x−2∈Sx-2\in Sx−2∈S&#xff09;及 x→xkx\to xkx→xk&#xff08;如果 xk∈Sxk\in Sx…

Ajax的概念及jQuery中的Ajax的3种方法,模仿jQuery封装自己的Ajax函数

目录一、网页中如何请求数据资源的请求方式二、Ajax1、什么是Ajax2、Ajax的特点3、Ajax工作原理4、同步与异步的区别三、jQuery中的Ajax1、$.get()函数2、$.post()函数3、$.ajax()函数四、模仿jQuery封装自己的Ajax函数实现效果1、定义options参数选项2、定义resoveData()函数处…

Clustering and Projected Clustering with Adaptive Neighbors

摘要 在本文中&#xff0c;提出了一种新的聚类模型来同时学习数据相似矩阵和聚类结构。新模型通过基于局部距离为每个数据点分配自适应和最优邻居来学习数据相似性矩阵。同时&#xff0c;对数据相似性矩阵的拉普拉斯矩阵施加新的秩约束&#xff0c;使得得到的相似性矩阵中的连…

特殊的线性规划:目标函数中的变量数目少于约束中的变量数目

如下&#xff0c;目标函数为min(x1)&#xff0c;该函数中只存在一个变量x1&#xff0c;但是约束中存在x2变量&#xff0c;线性规划还能求解吗&#xff1f;如下&#xff0c;目标函数为min (x_1)&#xff0c;该函数中只存在一个变量x_1&#xff0c;但是约束中存在x_2变量&#xf…

ES Elasticsearch

ES 本章知识点 三 ES简介 3.1 数据分类 我们生活中的数据总体分为三种&#xff1a;结构化数据&#xff0c;非结构化数据&#xff0c;半结构化数据结构化数据&#xff1a;指具有固定格式或有限长度的数据&#xff0c;如数据库&#xff0c;元数据等。 非结构化数据&#xff1…

【百日刷题计划 第十一天】——熟悉函数,递归及递推 函数,递归及递推基础题

文章目录&#x1f4a5;前言&#x1f609;解题报告&#x1f4a5;[NOIP2001 普及组] 数的计算&#x1f914;一、思路:&#x1f60e;二、源码&#xff1a;&#x1f62e;三、代码分析&#xff1a;&#x1f917; 鸡汤来咯&#xff1a;&#x1f4a5;前言 ☀️大家好☀️&#xff0c;我…

2018年美亚杯电子数据取证大赛-团体赛

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;正在自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 目…

RISC-V学习基础(五)

RISC-V汇编语言 C程序翻译成为可以在计算机上执行的机器语言程序的四个经典步骤。 函数调用规范&#xff08;Calling convention&#xff09; 函数调用过程通常分为6个阶段&#xff1a; 将参数存储到函数能够访问的位置。跳转到函数开始位置&#xff08;使用RV32I的jal指令…

考研图论算法

图论——txf 倘若考研需要像写算法题目那样&#xff0c;写出图论的代码&#xff0c;那无疑图论是最难级别的。 -----Williams Tian 1. 重点表述 ①线形表可以空表&#xff0c;树可以空树&#xff0c;但是图不能一个顶点也没有&#xff08;允许一条边也没有&#xff09;. ②…

ETC-4 week 3th

ETC-4 week 3th 出奇至胜 read They are only charged for the amount of power they consume on rainy days.They needn’t pay a single cent for their power consumption(消耗能量) on sunny days.(13 june) consume v 消耗 耗尽 吃光 喝光 沉溺 浪费LOL consumes(消耗…