Hello算法——笔记

news2024/10/6 8:36:43

文章目录

  • 1 引言
    • 算法
    • 数据结构
    • 算法和数据结构的关系
  • 2 复杂度分析
    • 时间复杂度
    • 空间复杂度
  • 3 数据结构
    • 数据与内存
    • 数据结构分类
  • 4 数组与链表

参考资料

1 引言

算法

算法是一组用于解决特定问题或执行特定任务的明确定义的计算步骤或指令集合。算法可以被视为一种解决问题的方法或策略,它描述了如何将输入转换为输出,通过一系列的逻辑和数学操作来实现预期的结果。

算法可以用来解决各种不同的问题,例如排序数据、搜索元素、图形处理、数据压缩、机器学习等。它们是计算机科学和计算机编程的核心概念

良好的算法通常具有以下特点:

  • 正确性:算法应该能够产生正确的输出,解决给定的问题。
  • 效率:算法应该能够在合理的时间内完成任务,避免不必要的计算和资源消耗。
  • 可读性:算法应该易于理解和阅读,便于他人理解和维护。
  • 可扩展性:算法应该能够处理不同规模和复杂度的问题,并且在输入规模增加时仍保持良好的性能。

算法的设计和分析是计算机科学的重要研究领域,有许多经典的算法被广泛应用于各种领域。常见的算法设计方法包括贪婪算法、分治算法、动态规划、回溯法、图算法等。算法的复杂性分析涉及时间复杂度、空间复杂度、最坏情况复杂度等概念,用于评估算法的效率和可行性。

总之,算法是计算机科学中非常重要的概念,它们是解决问题和执行任务的基础工具,对于计算机程序的设计和优化起着关键作用。

数据结构

数据结构是一种组织和存储数据的方式,旨在使数据的访问和操作更加高效。它定义了一种数据元素之间的关系,并提供了对这些元素进行插入、删除、查找和修改的操作。

常见的数据结构包括:

  • 数组(Array):将相同类型的数据元素按照一定的顺序存储在连续的内存空间中。
  • 链表(Linked List):通过指针将不同类型的数据元素连接起来,每个元素包含一个指向下一个元素的引用。
  • 栈(Stack):一种先进后出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
  • 队列(Queue):一种先进先出(FIFO)的数据结构,允许在队尾进行插入操作,在队头进行删除操作。
  • 树(Tree):一种由节点组成的层次结构,每个节点可以有多个子节点。
  • 图(Graph):由节点和节点之间的边组成的数据结构,用于表示各种实体之间的关系。
  • 堆(Heap):一种特殊的树结构,具有最大堆和最小堆两种形式,用于高效地获取最大或最小元素。
  • 散列表(Hash Table):根据关键字直接访问数据的数据结构,通过哈希函数将关键字映射到存储位置。

数据结构的选择取决于问题的性质和需求。不同的数据结构在空间占用、时间复杂度和操作效率等方面有所不同,合理选择和使用数据结构可以提高程序的性能和效率。

数据结构和算法是计算机科学的核心内容,它们相互依赖,共同构建了计算机程序的基础。理解和掌握不同的数据结构对于解决复杂的计算问题和设计高效的程序非常重要。

算法和数据结构的关系

算法依赖于数据结构来实现具体的操作和计算,而数据结构提供了算法所需的存储和组织数据的方式。良好的数据结构选择和设计可以提供更好的算法效率和性能。
因此,算法和数据结构是相辅相成的,它们共同构建了计算机科学中的基础。深入理解和掌握数据结构和算法对于设计和开发高效的计算机程序至关重要。

在这里插入图片描述

2 复杂度分析

算法效率评估,方法:
时间效率:算法运行速度的快慢。
空间效率:算法占用内存空间的大小。

我们的目标是设计“既快又省”的数据结构与算法。

时间复杂度

时间复杂度是一种衡量算法运行时间随输入规模增长的增长率。它表示算法执行所需的时间与输入规模之间的关系。常见的时间复杂度表示方法包括大O表示法,用于描述最坏情况下的运行时间。
在这里插入图片描述
「平均时间复杂度」可以体现算法在随机输入数据下的运行效率。

在进行时间复杂度分析时,我们通常关注最坏情况下的时间复杂度,因为它提供了算法在最不利情况下的性能保证。同时,还可以考虑平均情况下的时间复杂度和最好情况下的时间复杂度。

空间复杂度

空间复杂度是一种衡量算法所需的额外空间随输入规模增长的增长率。它表示算法执行所需的额外空间与输入规模之间的关系。与时间复杂度类似,常见的空间复杂度表示方法也使用大O表示法。
在这里插入图片描述
降低时间复杂度通常需要以提升空间复杂度为代价,反之亦然。我们将牺牲内存空间来提升算法运行速度的思路称为“以空间换时间”;反之,则称为“以时间换空间”。

选择哪种思路取决于我们更看重哪个方面。在大多数情况下,时间比空间更宝贵,因此以空间换时间通常是更常用的策略。当然,在数据量很大的情况下,控制空间复杂度也是非常重要的。

3 数据结构

数据与内存

基本数据类型:
数据是指以某种形式或格式表示的信息。在计算机科学和数据结构领域,数据通常是由位(0和1)组成的二进制序列。数据可以包括数字、文字、图像、音频、视频等各种形式的信息。

在计算机科学中,数据可以被组织成不同的数据结构,如数组、链表、栈、队列、树、图等。不同的数据结构适用于不同的场景和问题,可以提供高效的数据存储和访问方式。

「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。
在这里插入图片描述
浮点数可以进行各种数学运算,包括加法、减法、乘法、除法等。然而,由于浮点数的内部表示是有限的,存在舍入误差和精度损失的问题。在比较浮点数时,应使用适当的容差值而不是直接进行相等性比较

计算机内存:
算法运行过程中,相关数据都存储在内存中。
在数据结构与算法的设计中,内存资源是一个重要的考虑因素。

数据结构分类

4 数组与链表

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

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

相关文章

【iOS】--手势操作

文章目录 UIGestureRecognizer 的继承关系: 使用手势步骤UIPanGestureRecognizer(拖动)UIPinchGestureRecognizer(拖动)UIRotationGestureRecognizer(旋转)UITapGestureRecognizer(点按&#xf…

浅谈造纸配电室环境监控系统的应用案例

摘要:智能配电室环境监控系统可实现自动巡检、自动预警等功能,减少人员到现场巡视次数,能及早发现设备的潜在风险,迅速检测故障,节约维护保养时长,为配电生产检修、运行、各业务的标准化、规范化管理提供有…

【Flowable】Flowable候选人和候选人组

在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或者候选人组,可以从候选…

IntelliJ IDEA编辑模板变量详解(Edit Template Variables)

函数描述annotated(“annotation qname”)使用驻留在指定位置的注释创建类型符号。 例如,请参见迭代组中的活动模板。anonymousSuper()为Kotlin对象表达式建议一个超类型。arrayVariable()建议当前作用域中适用的所有数组变量。 例如,请参见迭代组中的活…

ACM - DP习题集(word里面的一小部分题集)

DP 一、经典问题1、编辑距离2、扔鸡蛋问题3、整数背包4、最大独立集5、最长公共子序列6、最长公共递增子序列7、最长公共子串(ing)8、最长上升子序列9、最长回文子序列10、最长回文子串(ing)11、最长不重复子字符串(in…

OpenGL教程中矩阵Matrix的介绍

变换 原文Transformations作者JoeyDeVries翻译Django, Krasjet, BLumia校对暂未校对 尽管我们现在已经知道了如何创建一个物体、着色、加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣。我们可以尝试着在每一帧改变…

Python 操作 Excel,如何又快又好?

➤数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道。Python处理Excel 常用的系列库有:xlrd、xlwt、xlutils、openpyxl ◈xlrd - 用于读取 Exce…

import一个“太极”库,让Python代码提速100倍!

众所周知,Python的简单和易读性是靠牺牲性能为代价的—— 尤其是在计算密集的情况下,比如多重for循环。 不过现在,大佬胡渊鸣说了: 只需import 一个叫做“Taichi”的库,就可以把代码速度提升100倍! 不信…

0-1规划在编程问题中的应用(UnityC#脚本/折返约瑟夫/OpenGL机器人摆臂循环)

一、0-1规划的定义 百度百科的解释:0-1规划是决策变量仅取值0或1的一类特殊的整数规划。在处理经济管理中某些规划问题时,若决策变量采用 0-1变量即逻辑变量,可把本来需要分别各种情况加以讨论的问题统一在一个问题中讨论。 如上面所说&…

记csdn打不开或打开缓慢后的修复--如何查找dns并修改hosts文件

记csdn打开缓慢后的修复–如何查找dns并修改hosts文件 问题: CSDN文章打开的十分缓慢,经常出现无法打开页面的错误提示 (以前用的好好的,现在不知道公司局域网改了什么东西,导致我的电脑打开CSDN经常缓慢好久&#x…

ACM - 其他算法 - 基础(前缀和 + 差分)

ACM- 其他算法 一、前缀和模板例题1、区间余数求K倍区间个数:AcWing 1230. K倍区间例题2、前缀和哈希求最长个数平分子串:Leetcode 面试题 17.05 字母与数字 二、差分1、一维差分2、二维差分 一、前缀和 模板 //一维前缀和 S[i] a[1] a[2] ... a[i] a[l] ... …

【行情速递】MLCC龙头涨价;车厂砍单芯片;台积电28nm设备订单全部取消!

导语:进入第二季度,MLCC龙头三环集团官宣涨价!风华高科紧随其后。车市价格战蔓延至芯片端,车厂开始砍单芯片,短短半年时间不到,车用芯片市场从价格飞涨和一片难求的背景,转为砍单与降价促销...更多详情请阅…

智能警示输出器在ESD系统中的作用

ESD(Electrostatic Discharge)是指静电放电,是一种电子元器件损坏的主要原因之一。在电子制造业中,ESD防静电系统是非常重要的,可以有效地保护电子元器件,避免因静电放电而造成的损坏和故障。而智能警示输出…

Spring事务(编程式事务声明式事务)

Spring中编程式事务的实现: 此方式包含了三个重要的操作:获取事务、提交事务、回滚事务。 以及依赖两个重要的对象:DataSourceTransactionManager、TransactionDefinition 使用编程式事务示例: RestController public class Use…

进程间通信都有哪些方法?

进程间通信是架构复杂系统的基石。复杂系统往往是分成各种子系统、子模块、微服务等等,按照 Unix 的设计哲学,系统的每个部分应该是稳定、独立、简单有效,而且强大的。系统本身各个模块就像人的器官,可以协同工作。而这个协同的枢…

后端常用的加密算法及hash运算

文章目录 基础知识1.加密三要素2.常用的两种加密方式⭐️3.凯撒密码 对称加密1. 编码概念2. DES — Data Encryption Standard3. 3DES — Triple-DES4. AES — Advanced Encryption Standard5. 分组密码模式6. 在golang中使用对称加密⭐️6.1 填充函数6.2 DESCBC API接口6.3 AE…

Git Clone 报错 `SSL certificate problem: unable to get local issuer certificate`

如果您在尝试克隆Git存储库时得到 “SSL certificate problem: unable to get local issuer certificate” 的错误,这意味着Git无法验证远程存储库的SSL证书。如果SSL证书是自签名的,或者SSL证书链有问题,就会发生这种情况。 $ git clone https://githu…

2021年上半年网络工程师真题详解(全套)

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、以下关于RISC和CISC计算机的叙述中,正确的是( )。 A、RISC不采用流水线技术,CISC采用流水线技术 B、RISC使用…

若依框架AjaxResult改造适应Swagger接口文档

概述 若依框架后端使用的响应对象AjaxResult,和Swagger存在不兼容问题,导致返回体即使使用了Swagger注解,但是Swagger接口文档中,不显示返回体的对象Swagger文档: [外链图片转存失败,源站可能有防盗链机制,建议将图片…

【Linux】Linux入门学习之常用命令二

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…