第1章 绪论

《数据结构》学习笔记

第1章 绪论

在这里插入图片描述

1.1 数据结构的研究内容

计算机计算数值时,一般经过一下步骤:
1.从具体问题抽象出数学模型(实质是分析问题)。
2.设计一个解次数学模型的算法。
3.编写程序,进行测试、调试,直到问题解决。

数据结构要研究非数值计算问题,非数值计算问题无法用数学方程建立数学模型。

1.2 基本概念和术语
在这里插入图片描述
1.2.1
数据项(Data Item):是组成数据元素、有独立含义的、不可分割的最小单位。
数据元素(Data Element):是数据的基本单位,也称为元素、记录等;用于完整地描述一个对象。
数据对象(Data Object):是性质相同的数据元素的集合,只要集合内元素的性质均相同,都可称之为一个数据对象;是数据的一个子集。
数据(Data):是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
(数据项<数据元素<数据对象<数据)

1.2.2 数据结构
在这里插入图片描述
数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是带“结构”的数据元素的集合,“结构”就是指元素之间存在的关系。

-1.逻辑结构
从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。
分为两个要素:

  1. 数据元素
  2. 关系

常见的四类基本结构:
图1.3
(1)集合结构:数据元素之间除了“属于同一个集合”的关系外,别无其它关系。
(2)线性结构:数据元素之间存在一对一的关系。
(3)树结构:数据元素之间存在一对多的关系。
(4)图结构或网状结构:数据元素之间存在多对多的关系。

-2. 存储结构
数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。
(1)顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助数组来描述。要求所有元素依次存放在一片连续的存储空间中。
表1.2

(2)链式存储结构:无需占用一整块存储空间。给每个结点附加指针字段,用于存放后继元素的存储地址,从而来表示结点之间的关系。
图1.5

1.2.3 数据类型和抽象数据类型
-1. 数据类型(Data Type)
是高级程序设计语言中的一个基本概念,在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定来数据的取值范围,存储方式以及允许进行的运算,数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

-2. 抽象数据类型(Abstract Data Type, ADT)
一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合、数据对象的基本操作的集合。
在高级语言中,则给出更高一级的数据抽象,出现了数据类型,如整形、实型、字符型等,可以进一步利用这些类型构造出线性表、栈、队列、树、图等复杂的抽象数据类型。

1.3 抽象数据类型的表示与实现
表示和实现抽象数据类型,最好用面向对象的方法。

1.4 算法和算法分析
在这里插入图片描述

1.4.1 算法的定义及特性
算法(Algorithm)是为了解决某类问题而规定的一个有限长的操作序列。五个重要特征:

  1. 有穷性
  2. 确定性
  3. 可行性
  4. 输入
  5. 输出

1.4.2 评价算法优劣的基本标准

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 高效性

1.4.3 算法的时间复杂度
算法效率分析的目的是看算法实际是否可行,并在同一问题存在多个算法时,可进行时间和空间性能上的比较,以便从中挑选出较优算法。

-1. 问题规模和语句频度。
问题规模:算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。n越大算法的执行时间越长。
语句频度(Frequency Count):一条语句的重复执行次数。

算法中基本语句重复执行的次数是问题规模n度某个函数f(n);算法的时间复杂度为:T(n)=O(f(n))
算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度(Time Complexity)。
为了方便比较不同算法的时间效率,我们仅比较它们的数量级(最高次幂),数量级越小,算法越优。

-2. 计算时间复杂度基本方法

  1. 找出语句频度最大的语句(也就是执行次数最多的语句)。
  2. 执行次数表示为关于问题规模n的某个函数f(n)。
  3. 取其数量级(最高次幂)。

-3. 算法的时间复杂度分析举例
例1.

x=0, y=0;                  #执行1for(int k=0; k<n; k++)     #从0~n,结束循环要多判断一次,所以执行n+1次x++;                   #从0~n,执行n次
for(int i=0; i<n; i++)     #执行n+1for(int j=0; j<n; j++) #外层没执行一次,内层执行n+1次,所以n(n+1)次y++;               #n乘以n次

上述代码,数量级最大的为二次方,所以T(n)=O(n*2)

例2.
在这里插入图片描述

例3.
在这里插入图片描述

例4.
在这里插入图片描述

1.4.4 算法的空间复杂度

…持续修改完善中

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

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

相关文章

C#中泛型约束的具体用法

前言上一篇博文简单介绍了泛型的约束&#xff0c;说是通过where<>来实现具体委托占位符的约束。那么约束又有什么类型和次序呢。这篇文章咱们一起看看。目前共5种类型的约束。类名&#xff1a;只有这个类型的类或从它继承的类才能用作类型实参class&#xff1a;任何引用类…

系统架构:Web应用架构的新趋势 前后端分离的想法

最近研究servlet&#xff0c;看书时候书里讲到了c/s架构到b/s架构的演变&#xff0c;讲servlet的书都很老了&#xff0c;现在的b/s架构已经不是几年前的b/s架构&#xff0c;其实b/s架构就是web应用开发&#xff0c;对于这样的架构我们现在应该考虑的是前端和后端的分离&#xf…

Asp-Net-Core学习笔记:身份认证入门

前言过年前我又来更新了~我就说了最近不是在偷懒吧&#xff0c;其实这段时间还是有积累一些东西的&#xff0c;不过还没去整理……所以只能发以前没写完的一些笔记出来就当做是温习一下啦PS&#xff1a;之前说的红包封面我还没搞&#xff0c;得抓紧时间了最近在准备搞一个我之前…

第1章 大数据挖掘及应用概论

《大数据挖掘及应用》学习笔记。 第1章 大数据挖掘及应用概论 数据挖掘是数据分析的提升。 1.1 大数据智能分析处理的普及和应用 1.1.1 云计算(cloud computing) 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可配…

浮点型数据的输出格式

2019独角兽企业重金招聘Python工程师标准>>> float的占位符为f%,默认输出六位小数&#xff0c;如果要限制位数的输出&#xff0c;可以用%.2f这样的格式&#xff0c;double同上。 如果是浮点型转换成整型不会进行四舍五入&#xff0c;浮点型的输出如果截取了位数进行…

linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)

一、介绍基于TCP协议通过socket实现网络编程常用API 1、读者如果不是很熟悉,可以先看我之前写的几篇博客,有socket,地址结构的理解,更加方便读者理解 地址分别是: 1)、http://blog.csdn.net/u011068702/article/details/56479927 2)、http://blog.csdn.net/u01106870…

VS2010下Boost1.55.0配置

为什么80%的码农都做不了架构师&#xff1f;>>> 打开程序菜单&#xff0c;选择Visual Studio Tools里面的 Visual Studio 命令提示。转到解压后的Boost所在目录&#xff0c;输入Bootstrap&#xff0c;执行完毕会生成b2.exe。输入&#xff08;目录下的bjam.exe和b2.…

Linux信号实践(3) --信号内核表示

信号在内核中的表示执行信号的处理动作称为信号递达&#xff08;Delivery&#xff09;&#xff0c;信号从产生到递达之间的状态&#xff0c;称为信号未决&#xff08;Pending&#xff09;。进程可以选择阻塞&#xff08;Block&#xff09;某个信号。被阻塞的信号产生时将保持在…

第2章 数据认知与预处理

《大数据挖掘及应用》学习笔记。 第2章 数据认知与预处理 2.1 数据分析的定义和流程 数据分析(data analysis)是指用适当的统计分析方法对收集来的大量数据进行分析和解释&#xff0c;提取出有用的信息形成结论&#xff0c;从而对数据加以详细研究和概括总结的过程。 2.1.1 如…

9 C++ Boost 多线程,线程同步

线程的创建 boost_thread,boost_system 多线程的创建 线程的参数传递 线程的创建方式 线程的join 加入join,回收线程线程中断 线程中断2, 线程组 boost 线程的死锁 boost 线程递归锁 线程互斥锁,线程同步 unique_lock 锁,离开作用域自动释放 unique_lock 锁 示例 2,可以显式的释…

命令注入_命令注入绕过方式总结

前言命令注入是web中常见的漏洞之一&#xff0c;由于web应用程序未对用户提交的数据做严格的过滤&#xff0c;导致用户输入可以直接被linux或windows系统当成命令执行&#xff0c;一般都会造成严重的危害。常用符号分号(;)多条语句顺序执行时的分割符号。1cmd1;cmd2管道符(|)cm…

集合的结构示意图

转载于:https://blog.51cto.com/8467007/1364724

第1章 数据分析概述

《Python数据分析基础教程》学习笔记。 第1章 数据分析概述 1.1 数据的性质 1.1.1 数据的概念 所谓数据就是描述事物的符号&#xff0c;是对客观事物的性质、状态和相互关系等进行记载的物理符号或者是这些物理符号的组合。 在计算机系统中&#xff0c;各种文字、字母、数字符…

Android之通过adb shell getprop、netstat命令看dns、ip

1、查看dns 1)、输入adb shell 2 )、输入getprop ,查看配置 3)、getprop | grep dns 过滤dns 4) 、getprop | grep dns 输出dns 5) 、修改dns 需要root ,然后输入 adb shell 然后输

Cache占用过多内存导致Linux系统内存不足问题排查

问题描述Linux服务器内存使用量超过阈值&#xff0c;触发报警。问题排查首先&#xff0c;通过free命令观察系统的内存使用情况&#xff0c;显示如下&#xff1a;total used free shared buffers cached Mem: 24675796 24587144 88652 …

linux之ip route命令

1.基础知识 1.1 路由 &#xff08;Routing&#xff09; 1.1.1 路由策略 &#xff08;使用 ip rule 命令操作路由策略数据库&#xff09; 基于策略的路由比传统路由在功能上更强大&#xff0c;使用更灵活&#xff0c;它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应…

违反Apache 2.0许可证再分发被指控,火山引擎回应

文 | 白开水不加糖出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;针对有关违反 Apache 2.0 许可证&#xff0c;重新发行 SkyWalking 的指控&#xff0c;火山引擎方面作出回应称&#xff1a;火山引擎相关负责人表示&#xff0c;火山引擎接到社区反馈后&a…

linux网络编程之IP协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)和TCP、UDP协议头结构总结

首先声明,这篇博客是几篇博客转载然后总结在一起的,只当是学习笔记,不在意是什么原创和转载了,学到东西就好。 1、IP协议首部格式(IP协议处余网络层) IP数据报首部图片格式: 最高位在左边,记为0 bit;最低位在右边,记为31 bit 头部代码结构如下 //定义IP首部typede…

无线安全***--启程

无线安全将来会成为一个值得重视的领域&#xff0c;现在无线的普及大大的方便我们的生活&#xff0c;同时在带来的便利的同时也会给我带来新的威胁&#xff01;下面我来通过cdlinux以及BT5来演示现在比较常见的无线***之战。攻破解我们都知道现在的个人无线局域网基本都会使用w…

Java读取word文件,字体,颜色

在Android读取Word文件时&#xff0c;在网上查看时可以用tm-extractors&#xff0c;但好像没有提到怎么读取Word文档中字体的颜色&#xff0c;字体&#xff0c;上下标等相关的属性。但由于需要&#xff0c;要把doc文档中的内容&#xff08;字体&#xff0c;下划线&#xff0c;颜…