数据结构——初识数据结构
数据结构——初识数据结构
- 数据结构的概念
- 数据的类型
- 时间复杂度
数据结构的概念
相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机科学中的一个基本概念,它是指数据元素之间的关系和组织方式。数据结构是计算机存储、组织数据的方式,它使得数据可以高效地被访问和修改。数据结构不仅影响程序的性能,还影响算法的效率。
数据结构的逻辑结构总共分为四种它们分别为:
集合,集合是一种基本的数据结构,用于存储一组不重复的元素。集合的概念在数学和计算机科学中都非常重要,它们提供了一种组织和处理数据的有效方式。在集合中所有数据在同一个集合中,关系平等。
线性,在数据结构中,线性结构是指数据元素之间存在一对一的线性关系的数据结构。这种结构中,数据元素之间是有序的,每个数据元素(除了第一个和最后一个)都有一个前驱和一个后继。线性结构的特点是数据元素之间有顺序关系,可以形象地看作是一条线。数据和数据之间是一对一的关系;
树,在数据结构中,树是一种非常重要的非线性结构,它由节点组成,每个节点可以有零个或多个子节点,但只能有一个父节点。树结构通常用于表示具有层次关系的数据集合。
图,在数据结构中,图是一种用于表示节点(也称为顶点或点)之间关系的非线性结构。图可以用来表示复杂的关系,如网络、路径、连接等。图由两个基本元素组成:顶点和边。
在数据结构中物理结构(在内存当中的存储关系)也有两种:
顺序存储,数据存放在连续的存储单位中。逻辑关系和物理关系一致。
链式,数据存放的存储单位是随机或任意的,可以连续也可以不连续。
数据的类型
数据类型是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
数据又可以分为原子类型和结构类型:
原子类型,int,char,float;
结构类型,sturct, union;
其实抽象数据类型等于数学模型 + 操作。
数据结构和算法是息息相关的,程序=数据+算法,那么算法是什么呢?算法,
是解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,每条指令表示一个或多个操作。
算法的特征:
1,输入,输出特性,输入时可选的,输出时必须的。
2,有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。
3,确定性,同一个输入,会得到唯一的输出。
4,可行性,每一个步骤都是可以实现的。
算法的设计:
1,正确性,
语法正确
合法的输入能得到合理的结果。
对非法的输入,给出满足要求的规格说明,虽然说不能做到对所有的错误或者异常都能都做出相应的报错提示但是一个算法不能够有明显的错误;
对精心选择,甚至刁难的测试都能正常运行,结果正确;
2,可读性,便于交流,阅读,理解;
3,健壮性,输入非法数据,能进行相应的处理,而不是产生异常;
4,高效,存储低,效率高 。
时间复杂度
衡量一个算法的好坏的一个关键指标是时间复杂度,什么是时间复杂度呢?
简单来说,算法时间复杂度也就是执行这个算法所花时间的度量,算法的时间复杂度是衡量算法执行时间与输入数据量之间的关系的一个指标。它描述了算法在最坏情况下(有时也考虑平均情况或最佳情况)执行步骤的数量随输入规模增长的变化趋势。时间复杂度通常用大O表示法来表示。
大O表示法
大O表示法描述了算法性能的上界,即随着输入规模的增长,算法执行时间的增长率。常见的时间复杂度表示包括:
O(1):常数时间复杂度,表示算法执行时间不随输入规模变化。
O(log n):对数时间复杂度,表示算法执行时间随输入规模的对数增长。
O(n):线性时间复杂度,表示算法执行时间随输入规模线性增长。
O(n log n):线性对数时间复杂度,常见于高效的排序算法,如快速排序和归并排序。
O(n^2):二次时间复杂度,常见于简单排序算法,如冒泡排序和插入排序。
O(n^k):多项式时间复杂度,其中k是常数,表示算法执行时间随输入规模的k次幂增长。
O(2^n):指数时间复杂度,表示算法执行时间随输入规模的指数增长,这类算法在大规模数据上效率极低。
O(n!):阶乘时间复杂度,表示算法执行时间随输入规模的阶乘增长,这类算法效率非常低。
推算时间复杂度的方法:
1,用常数1 取代运行时间中的所有加法常数。按照我的理解由于CPU的计算速度非常快只要是能说出具体数字的算法的时间复杂度都算做O(1);
2,在修改后的运行函数中,只保留最高阶项。
3,如果最高阶存在且不是1,则取除这个项相乘的常数。
比如说算法的实际时间复杂度为2n^2+3n+1但是在进行具体的表示时只保留最高阶项也就是2n^2,根据第三条规则最高阶项的系数不是1时直接看成1只保留n^2项最后算出的时间复杂度就是n^2。
今天并只是初步地认识一下数据结构往后会更新具体的数据结构比如说顺序表,链表,树之类的,会不定期更新的。
相关文章:
数据结构——初识数据结构
数据结构——初识数据结构 数据结构的概念数据的类型时间复杂度 数据结构的概念 相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机科学中的一个基本概念,它是指数据元素之间的关系和组织方式。数据结构是计算机存储、组织数据的方式,…...
每日搜索论坛回顾:2024年9月13日
Google正在测试一个新的广告标签标题,使广告更加明显。Google搜索排名的波动仍然非常剧烈,即使在核心更新完成一周后仍然如此。Google正在向本地服务广告的广告主发送验证通知。Bing正在测试带有评论来源图标的本地包。Google AdSense正在将自动广告扩展…...

猎板PCB大讲堂:PCB设计铺铜技巧与策略全解析
在电子工程领域,PCB的设计不仅仅是连接电子元件的桥梁,更是确保设备性能和稳定性的关键。铺铜,作为PCB设计中的一个微妙而强大的环节,常常被低估。 猎板PCB带您深入了解铺铜的艺术,探讨其背后的科学原理,以…...

Matplotlib - Statistical Distribution作图
1. 前言 在数据分析和统计学中,绘制统计分布图是非常重要的,因为它帮助我们直观地理解数据的特性,并为进一步的分析提供基础。统计分布图能够揭示数据集的结构、趋势、集中趋势和离散程度等信息,从而使我们更容易做出合理的假设、…...

【机器学习】9 ——最大熵模型的直观理解
系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前奏例子硬币垃圾邮件代码 前奏 【机器学习】6 ——最大熵模型 例子 硬币 假设我们有一枚硬币,可能是公平的,…...
1.单例模式
目录 简介 饿汉式 懒汉式 双重检测锁式 静态内部类式 枚举单例 测试 测试单例模式: 测试五种单例模式在多线程环境下的效率 问题(拓展) 例:反射破解单例模式 例:反序列化破解单例模式 总结:如何…...
数据倾斜问题
数据倾斜:主要就是在处理MR任务的时候,某个reduce的数据处理量比另外一些的reduce的数据量要大得多,其他reduce几乎不处理,这样的现象就是数据倾斜。 官方解释:数据倾斜指的是在数据处理过程中,由于某些键…...

大龄焦虑?老码农逆袭之路:拥抱大模型时代,焕发职业生涯新活力!
其实我很早就对大龄程序员这个话题感到焦虑,担心自己35岁之后会面临失业,有时和亲戚朋友聊天时,也会经常拿这个出来调侃。现在身边已经有很多35岁左右的同事,自己过两年也会步入35岁的行列,反倒多了一份淡定和从容。 …...
Vue 页面反复刷新常见问题及解决方案
Vue 页面反复刷新常见问题及解决方案 引言 Vue.js 是一个流行的前端框架,旨在通过其响应式的数据绑定和组件化的开发模式简化开发。然而,在开发 Vue.js 应用时,页面反复刷新的问题可能会对用户体验和开发效率产生负面影响。本文将深入探讨 …...

Windows上指定盘符-安装WSL虚拟机(机械硬盘)
参考来自于教程1:史上最全的WSL安装教程 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/386590591#%E4%B8%80%E3%80%81%E5%AE%89%E8%A3%85WSL2.0 教程2:Windows 10: 将 WSL Linux 实例安装到 D 盘,做成移动硬盘绿色版也不在话下 - 知乎 (z…...

ffmpeg实现视频的合成与分割
视频合成与分割程序使用 作者开发了一款软件,可以实现对视频的合成和分割,界面如下: 播放时,可以选择多个视频源;在选中“保存视频”情况下,会将多个视频源合成一个视频。如果只取一个视频源中一段视频…...
团体标准的十大优势
一、团体标准是什么 团体标准是指由社会团体(行业协会、联合会、企业联盟等)按照自己确立的制定程序,自主制定、发布、采纳,并由社会自愿采用的标准。简单的说,就是社会团体为了满足市场和创新需要,协调相…...
java spring boot 动态添加 cron(表达式)任务、动态添加停止单个cron任务
java spring boot 动态添加 cron(表达式)任务、动态添加停止单个cron任务 添加对应的maven <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version…...

sqlgun靶场漏洞挖掘
1.xss漏洞 搜索框输入以下代码,验证是否存在xss漏洞 <script>alert(1)</script> OK了,存在xss漏洞 2.SQL注入 经过测试,输入框存在SQL注入漏洞 查询数据库名 查询管理员账号密码 此处密码为MD5加密,解码内容如下 找…...
好用的 Markdown 编辑器组件
ByteMD bytedance/bytemd: ByteMD v1 repository (github.com) 这里由于我的项目是 Next,所以安装 bytemd/react, 阅读官方文档,执行命令来安装编辑器主体、以及 gfm(表格支持)插件、highlight 代码高亮插件…...
uniapp vite3 require导入commonJS 的js文件方法
vite3 导入commonJS 方式导出 在Vite 3中,你可以通过配置vite.config.js来实现导入CommonJS(CJS)风格的模块。Vite 默认支持ES模块导入,但如果你需要导入CJS模块,可以使用特定的插件,比如originjs/vite-pl…...

通义灵码用户说:“人工编写测试用例需要数十分钟,通义灵码以毫秒级的速度生成测试代码,且准确率和覆盖率都令人满意”
通过一篇文章,详细跟大家分享一下我在使用通义灵码过程中的感受。 一、定义 通义灵码,是一个智能编码助手,它基于通义大模型,提供代码智能生成、研发智能问答能力。 在体验过程中有任何问题均可点击下面的连接前往了解和学习。 …...
MySQL中的约束
约束概述 1.1 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信…...

Leetcode 寻找重复数
可以使用 位运算 来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示,统计每一位上 1 的出现次数,并与期望的出现次数做比较。通过这种方法,可以推断出哪个数字重复。 class Solution { public:int findDuplicate(vector<i…...

大一新生以此篇开启你的算法之路
各位大一计算机萌新们,你们好,本篇博客会带领大家进行算法入门,给各位大一萌新答疑解惑。博客文章略长,可根据自己的需要观看,在博客中会有给大一萌新问题的解答,请不要错过。 入门简介: 算法…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...