【Hello算法】 > 第 1 关 > 初识 算法 与 复杂度分析

初识 算法 与 复杂度分析

    • What are algorithms and data structures ?-什么是算法与数据结构?
    • How to conduct complexity analysis ?-如何进行复杂性分析?
        • 时间复杂度
        • 空间复杂度
    • 小结Tips:

———————————————————————————————————————————————————————————-
————————————————————Hello算法—速通笔记—第一集—start———————–———————————————-

What are algorithms and data structures ?-什么是算法与数据结构?

「算法 algorithm」是在有限时间内解决特定问题的一组指令或操作步骤
「数据结构 data structure」是计算机中组织和存储数据的方式

在这里插入图片描述

How to conduct complexity analysis ?-如何进行复杂性分析?

时间效率 和 空间效率 是衡量 算法优劣 的两个主要评价指标。

常见时间复杂度从低到高排列有 O(1) 、O(logn) 、O(n) 、O(nlgn) 、O(n) 、O( n 2 n^2 n2) 和 O(n!) 等。

空间复杂度的作用类似于时间复杂度,常见空间复杂度从低到高排列有 O(1) 、O(logn) 、O(n) 、O(n) 、O( n 2 n^2 n2) 等。
设算法的操作数量是一个关于输入数据大小 n 的函数,记为 T(n) 。

时间复杂度

第一步:统计操作数量

 忽略  T(n)  中的常数项。因为它们都与 n 无关,所以对时间复杂度不产生影响。省略所有系数。例如,循环  2n 次、5n+1 次等,都可以简化记为 n 次,因为  n 前面的系数对时间复杂度没有影响。循环嵌套时使用乘法。

第二步:判断渐近上界

 时间复杂度由  T(n)  中最高阶的项来决定。这是因为在 n 趋于无穷大时,最高阶的项将发挥主导作用,其他项的影响都可以忽略。
空间复杂度

算法在运行过程中使用的内存空间主要包括:
输入空间、暂存空间(用于存储算法在运行过程中的变量、对象、函数上下文等数据)、输出空间 。
一般情况下,空间复杂度的统计范围是“暂存空间”加上“输出空间”。
我们通常统计暂存数据、栈帧空间和输出数据三部分:
在这里插入图片描述
第一步:以最差输入数据为准

 当 n < 10 时,空间复杂度为 O(1) ;但当 n > 10 时,初始化的数组 nums 占用 O(n) 空间,因此最差空间复杂度为 O(n) 。

第二步:以算法运行中的峰值内存为准

 例如,程序在执行最后一行之前,占用 O(1) 空间;当初始化数组 nums 时,程序占用 O(n) 空间,因此最差空间复杂度为 O(n) 。

注:在递归函数中,需要注意统计栈帧空间。

小结Tips:

- 常见的空间复杂度:展示的是空间复杂度,其反映的是增长趋势,而不是占用空间的绝对大小。
- 函数与方法的区别:函数(function)可以被独立执行,所有参数都以显式传递。方法(method)与一个对象关联,被隐式传递给调用它的对象,能够对类的实例中包含的数据进行操作。
- 尾递归函数的空间复杂度通常认为是O(n),只是说可以优化到O(1)。

————————————————————————————————————————————————————————————
—————————————————————Hello算法—速通笔记—第一集—end—————————————————————–—-

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

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

相关文章

【ubuntu】如何追加path

【背景】 在ubuntu上整备一个项目环境时需要追加Path。 【方法】 先复制下需要加的Path&#xff0c;比如我的是&#xff1a;/home/sheep431/.local/bin 加path命令 nano ~/.bashrc在nano界面输入如下命令 export PATH"/home/sheep431/.local/bin:$PATH"【检验】…

【Golang学习笔记】从零开始搭建一个Web框架(一)

文章目录 net/Http基础框架雏形上下文 学习文档&#xff1a; Go语言标准库文档中文版 7天用Go从零实现Web框架Gee教程 | 极客兔兔 (geektutu.com) gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). net/Http基础 go语言的http包提供了HTTP客户端和HT…

js 函数的数据类型

在JavaScript中&#xff0c;函数是一种特殊的对象&#xff0c;可以存储在变量中&#xff0c;可以作为参数传递给其他函数&#xff0c;也可以作为函数的返回值返回。 函数的数据类型为"function"&#xff0c;可以使用typeof运算符来检测一个变量是否为函数类型&#…

Day101:漏洞发现-漏扫项目篇NucleiYakitGobyAfrogXrayAwvs联动中转被动

目录 特征类-三方Poc调用&模版Poc调用 案例1&#xff1a;单点对某特征点进行安全评估 Goby-综合类 Nuclei-较综合类 Afrog-特征类 Yakit-可特征可综合 案例2&#xff1a;新型对某特征点进行安全评估 综合类-主动漏扫&中转联动&被动联动 案例1&#xff1a;…

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑&#xff0c;这些问题可能会影响我们的开发效率和代码质量&#xff0c;因此我们需要不断总结和学习&#xff0c;以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结&#xff0c;以提高大家的开发质量。本系列文章…

03-进程-网络命令-软件安装-SSH免密登录

软件安装-网络命令-SSH免密登录 一 软件安装 1 在线安装 命令&#xff1a; yum 作用&#xff1a;yum会从指定的服务器自动下载rpm包并且进行安装&#xff0c;优点是可以自动处理依赖关系&#xff0c;并且一次安装所有的软件包。 配置yum的镜像源 yum源有个统一的下载服务…

剖析 SPI 在 Spring 中的应用

一、概述 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是Java内置的一种服务提供发现机制&#xff0c;可以用来提高框架的扩展性&#xff0c;主要用于框架的开发中&#xff0c;比如Dubbo&#xff0c;不同框架中实现略有差异&#xff0c;但核心机制相同…

JavaScript中的cookie、localStorage的区别和特点

在JavaScript中&#xff0c;cookie和localStorage都是用于在客户端存储数据的方法&#xff0c;但它们有一些重要的区别和特点。 Cookie 特点&#xff1a; 存储量小&#xff1a;每个域名下的cookie数量是有限制的&#xff0c;并且每个cookie的大小也是有限制的。一般来说&…

精确号码比例放通算法的设计与实现

精确号码比例放通算法的设计与实现 引言背景问题定义算法设计1. 数据结构2. 算法流程3. 伪代码4. C语言实现 结论参考文献 引言 随着通信技术的飞速发展&#xff0c;呼叫中心和电信运营商面临着日益增长的呼叫管理需求。在某些情况下&#xff0c;为了确保服务质量或者遵守特定…

LeetCode题练习与总结:加一--66

一、题目描述 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#xff1a; 输入&…

浏览器从输入url到渲染的过程

URL 解析&#xff1a; 当用户在浏览器地址栏输入 URL 时&#xff0c;浏览器会首先对 URL 进行解析。这个过程包括解析协议&#xff08;如 HTTP、HTTPS&#xff09;、域名、端口号和路径等信息。 DNS 解析&#xff1a; 把从输入的URL中解析出的域名发送给 DNS 服务器进行解析&a…

方案分享 | 嵌入式指纹方案

随着智能设备的持续发展&#xff0c;指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势&#xff0c;被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域&#xff…

[dvwa] sql injection

sql injection 0x01 low sql语句没有过滤 经典注入&#xff0c;通过逻辑or为真相当于select * from users where true&#xff0c;99换成1也成 用union select 对齐列数&#xff0c;查看数据库信息 1’ union select 1,2# order by探测对齐列数更方便 1’ or 11 order b…

Python数据挖掘项目开发实战:处理作者归属问题

注意&#xff1a;本文下载的资源&#xff0c;与以下文章的思路有相同点&#xff0c;也有不同点&#xff0c;最终目标只是让读者从多维度去熟练掌握本知识点。 Python数据挖掘项目开发实战&#xff1a;处理作者归属问题 一、项目背景与目标 在出版、科研等领域&#xff0c;确定…

05.MySQL索引事务

1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的…

Spring AI 应用 - 智能记者

参考实现&#xff1a; https://github.com/mshumer/ai-journalist 上面是通过 Claude 配合 SERP 搜索 API&#xff0c;使用 Python 语言实现的&#xff0c;本文通过 GitHub Copilot 辅助改为了基于 Spring AI 的 Java 版本&#xff0c;本文使用的 OpenAI。 AIJournalist 实现…

Tomcat源码解析——源码环境搭建

一、源码下载 在进行源码阅读前&#xff0c;先下载源码包&#xff0c;这样便于做笔记和debug。 我所用的版本是Tomcat7.0.68&#xff0c; Tomcat7.0.68下载地址&#xff1a;Index of /dist/tomcat/tomcat-7/v7.0.68/src 所有Tomcat的源码包下载地址&#xff1a;Index of /dist/…

第6章:6.4.2 案例二:爬取成语网站数据 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例用到的网址为&#xff1a;成语大全列表成语大全列表https…

FFmpeg:自实现ijkplayer播放器--11音视频同步

文章目录 音视频同步时钟结构时间api实现过程音视频同步 音视频同步采用以音频为基准的方式,使用时间轴作为参考 如部分音频数据解不出来时,计算音频的pts(时间戳)与时间轴的差值,视频时间为差值加上时间轴,使得时间戳和音频一样 时间轴统是通过av_gettime_relative()获取…

c语言如何理解指针的指针?

1.啥叫指针&#xff1f; 在C语言中&#xff0c;指针是一个非常重要的概念。指针本质上是一个变量&#xff0c;它的值不是数据本身&#xff0c;而是存储数据的内存地址。指针允许程序直接访问和操作内存中的数据&#xff0c;这在很多情况下非常有用&#xff0c;比如在处理数组、…