首页 > 编程语言 >数据结构速成--数据结构和算法

数据结构速成--数据结构和算法

时间:2024-04-10 09:58:50浏览次数:30  
标签:存储 -- 复杂度 元素 速成 算法 数据结构 数据

        由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。

目录

一、数据结构

二、逻辑结构

三、存储结构

四、算法

五、算法分析


一、数据结构

        数据是对客观事物的符号表示,如图像、声音等。
        数据元素是数据的基本单位。
        数据项是构成数据元素的不可分割的最小单位。

        一个数据元素可由若干个数据项组成,例如,一位学生的信息记录为一个数据元素,它是由学号、姓名、性别等数据项组成。
        数据对象是具有相同性质的数据元素的集合。
        数据结构是相互之间存在一种或多种特定关系的数据元素的集合
        数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。
        数据结构的形式定义为:数据结构是一个二元组如下

        其中:D是数据元素的有限集,S适用于表示数据元素相互关系的有限集。 

        第一部分大家主要掌握概念内容,分清基本单位、最小单位以及数据结构是数据元素的集合即可!

二、逻辑结构

        逻辑结构是指数据元素之间的逻辑关系,与数据的存储无关,独立于计算机。

        第二部分大家只要记住逻辑结构中,线性和非线性结构都有哪些,记住他们的名称即可。

三、存储结构

        存储结构(物理结构)是指数据结构在计算机中的表示,它包括数据元素的表示和关系的表示。

        顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系
由存储单元的邻接关系来体现。
        链式存储:借助指示元素存储地址的指针来表示元素之间的逻辑关系。
        索引存储:在存储元素信息的同时,还建立附加的索引表
        散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(hash)存储。 

        第三部分大家记住四种存储结构,以及我重点标红的地方即可! 

四、算法

         算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列个重要特性:
(1)有穷性。一个算法必须总是在执行有穷步后结束,且每一步都是在有穷时间内完成。
(2)确定性。算法中每条指令必须有确切的含义,且相同的输入只能得到相同的输出
(3)可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
(4)输入。一个算法有零个或多个输入
(5)输出。一个算法有一个或多个输出

注意:一个算法可以没有输入,但是必须要有输出!!!

        通常设计一个“好”的算法应考虑达到以下目标:

  • 正确性。算法应能够正确地求解问题。
  • 可读性。算法能具有良好的可读性,以帮助人们理解。
  • 健壮性。输入非法数据时,算法能做出反应或处理,而不会产生莫名其妙的输出结果。
  • 效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需的最大存储空间。 

        第四部分大家重点记住算法的五大特性,以及实现优秀算法的四大目标,一定不要弄混了!

五、算法分析

        我们进行算法分析的目的就是分析算法的效率以求改进

        算法效率的度量是通过时间复杂度和空间复杂度来描述的。

        一个语句的频度是指该语句在算法中被重复执行的次数。

        算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析的T(n)数量级。 

注意:常系数全部去掉,比如O(4n)就把4去掉,应该是O(n)。

        空间复杂度一般不会让大家来算,就记住一下概念,他是算法所占额外空间的量度。 

例1:

        本道题选D。A算得O(2n^{^{3}}) ,去掉常系数2,就是O(n^3{^{}});B也是O(n^3{^{}});C是O(n^{2}log_{2}n);D是O(n^{2})。

例2:

//求时间复杂度
for(i=2;i<=n;++i)
    ++x;
    for(j=1;j<=i-1;++j)
        a[i][j]=x;

         上面代码是嵌套for循环,i<=n 和 j<=i-1两层应该是O(n^{2})。二维数组访问都要嵌套,一般都是O(n^{2})。

例3:

//求时间复杂度
i=1;
while(i<=n)
    i=i*2;

        上面代码我们注意i每次变化都是成2倍递增的,假设第x次变化就要跳出循环,这时候就是2^{x}=n,就能算到x=log_{2}n。一共重复log_{2}n次,因此时间复杂度是O(log_{2}n)。

例4:

        这段代码复杂度可以看到(y+1)^{2}<=n,则y+1<=n^{\frac{1}{2}},变成1次幂才可以计算,因为y+1,在循环条件里其实变了两次,因此时间复杂度为O(n^{\frac{1}{2}})。

        第五部分是本章最重要的内容,大家一定要记住如何计算时间复杂度,加法/乘法规则,以及常见时间复杂度的大小比较,看看例题熟练掌握!

标签:存储,--,复杂度,元素,速成,算法,数据结构,数据
From: https://blog.csdn.net/2301_79676950/article/details/137541305

相关文章

  • NzN的数据结构--插入排序
         排序排序我要Disney,今天我们先来看看经典排序算法里的插入排序,先三连后看才是好习惯!!!目录一、排序的概念及应用1.排序的概念2.排序的应用3.常见的排序算法二、插入排序1.基本思想2.直接插入排序3.希尔排序(缩小增量排序)一、排序的概念及应用1.......
  • 基于java+springboot+vue实现的农产品智慧物流系统(文末源码+Lw)23-239
    摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用农产品智慧物流系统可以有效管理,使信息管......
  • 数据库性能优化调优
    0,创建的时候分库分表。表大小超过一定范围如2G1,主键顺序插入,性能好于乱序插入。推荐使用自增。2,合理索引设计,降低主键长度。在查询时,创建列的索引,然后查询用索引列升序降序查询。分页查询limit,最好覆盖索引。部分查询条件会使其索引失效,导致全盘扫描:w......
  • 基于java+springboot+vue实现的人事管理系统(文末源码+Lw)23-242
    摘 要使用旧方法对人事管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在人事管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的人事管理系统对字典管理、公告管理、绩效管理、......
  • docker安装emqx
    1.端口介绍1883MQTT/TCP协议端口11883MQTT/TCP协议内部端口,仅用于本机客户端连接8883MQTT/SSL协议端口8081management/HTTP/S协议端口8083MQTT/WS协议端口8084MQTT/WSS协议端口2拉取镜像dockerpullemqx/emqx:v4.0.03.启动临时容器dockerrun-itd--name......
  • 子网划分
    概念IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过网关(Gateway)才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为子网(Subnet)。在线网络计算器https://......
  • [网鼎杯 2020 朱雀组]Nmap
    [网鼎杯2020朱雀组]Nmap类似Nmap的功能,一个输入命令行,提示输入ip地址,尝试输入正常内容:127.0.0.1nmap命令将扫描结果保存在文件里面:例如:将nmap127.0.0.1的结果保存在test.txt里面nmap127.0.0.1-oNtest.txtnmap其他写文件命令:-oN(标准输出)-oX(XML输出)-oS(ScR......
  • 删除文件文件夹时报错:系统找不到指定文件
    windows系统删除文件或文件夹时,报错提示,系统找不到指定文件,或是提示找不到该项目方法一重启电脑后重试方法二任务管理器CPU资源查询中检查文件的占用状态,结束相关联的进程后重试删除方法三结束explorer进程后,以cmd形式进入目标所在路径,使用del或rd命令删除之方法四chkdsk......
  • 技术公司与非技术公司的区别,真实!
    有人的地方就有江湖,就有人情世故,就算在大厂工作,技术是很重要,但不是最重要的。粉丝中有很多小伙伴是初入职场的,也有一些是工作几年的职场老鸟。不管初入职场还是职场老鸟,都要选择适合自己的公司,遵守职场的潜规则。所以对于程序员而言,选择一家技术公司还是非技术公司就显得尤为重要,......
  • 发布一个自己的composer包
    首先我们创建一个空的目录,并且运行以下命令初始化一个空白的composer包composerinit可以在命令窗口看到有返回提示;需要输入包名Thiscommandwillguideyouthroughcreatingyourcomposer.jsonconfig.`Packagename(<vendor>/<name>):我这里写的是chaoyang/test,回......