当前位置: 首页 > news >正文

数据结构学习笔记(一)----绪论

目录

为什么要学习数据结构

数据结构的研究内容

基本概念和术语 

数据结构(Data Structure)

数据结构的两个层次:

 数据的运算

数据类型

抽象数据类型(ADTs:Abstract Data Types)

算法和算法分析

算法效率的度量

事前分析估计

 事后统计

时间复杂度的渐进表示法 

分析算法时间复杂度的基本方法:

 渐进空间复杂度

算法要占据的空间

结语:本章学习流程图如下:


为什么要学习数据结构

编程基础

计算机及相关专业考研博课程

计算机等级考试课程

程序员考试课程

数据结构的研究内容

N.沃思(Niklaus Wirth)教授提出:

N.沃思(Niklaus Wirth)教授

程序=算法+数据结构

电子计算机的主要用途:

早期:主要用于数值计算

后来:处理逐渐扩大到非数值计算领域,能处理多种复杂的具有一定结构关系的数据

数据结构的研究内容为:

研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作

基本概念和术语 

数据结构(Data Structure)

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

数据结构的两个层次:

逻辑结构:用数据元素间的相互关系

  • 线性结构:线性表、栈、队列、串;
  • 非线性结构:树、图;

存储结构(物理结构):数据元素及其关系在计算机存储器中的存储方式

  • 顺序存储:用元素在储存器的相对位置来表示数据元素间的逻辑关系 ;
  • 链式存储:用元素存储地址的指针来表示数据元素间的逻辑关系;

 数据的运算

常见的运算:插入、删除、修改、查找、排序

数据类型

基本数据类型:char、int、float、double、void

构造数据类型:数组、结构体、共用体、文件

抽象数据类型(ADTs:Abstract Data Types)

  • 预定义常量及类型
  • 内存的动态分配与释放

算法和算法分析

算法定义:解决问题的有限个步骤;

算法效率的度量

算法效率:用依据该算法编制的程序在计算机上执行所消耗的时间来度量

  • 事前分析估计
  • 事后统计

事前分析估计

一个高级语言程序在计算机上运行所消耗的时间取决于:

  • 依据的算法选用何种策略
  • 问题的规模
  • 程序语言
  • 编译程序产生
  • 机器代码质量
  • 机器执行指令速度

同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同,———使用绝

对时间单位衡量算法效率不合适。

 事后统计

利用计算机内的计时功能,不同算法的程序可以用一组或多组相同的统计数据区分

缺点:

  • 必须先运行依据算法编制的程序
  • 所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣

时间复杂度的渐进表示法 

算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:

T(n)=O(f(n))

算法中重复执行次数和算法的执行时间成正比的语句对算法运行时间的贡献最大

n越大算法的执行时间越长

  • 排序:n为记录数
  • 矩阵:n为矩阵的阶数
  • 多项式:n为多项式的项数
  • 集合:n为元素个数
  • 树:n为树的结点个数
  • 图:n为图的顶点数或边数

n * n阶矩阵加法:

for( i = 0; i < n; i++)
   for( j = 0; j < n; j++)
      c[i][j] = a[i][j] + b[i][j];

 

语句的频度(Frequency Count ):

重复执行的次数:n*n;T( n ) = O ( n2)即:矩阵加法的运算量和问题的规模n的平方是同一个量级

分析算法时间复杂度的基本方法:

  • 找出语句频度最大的那条语句作为基本语句
  • 计算基本语句的频度得到问题规模n的某个函数f(n)
  • 取其数量级用符号“O”表示

 

时间复杂度是由嵌套最深层语句的频度决定的

例1:N×N矩阵相乘 

for(i=1;i<=n;i++)
 for(j=1;j<=n;j++)
   {c[i][j]=0;
    for(k=1;k<=n;k++)
      c[i][j]=c[i][j]+a[i][k]*b[k][j];
   }

 

 

 例3:

i=1;
while(i<=n)
i=i*2;

 

 渐进空间复杂度

空间复杂度:

算法所需存储空间的度量,记作:

S(n)=O(f(n))其中n为问题的规模(或大小)

算法要占据的空间

  • 算法本身要占据的空间,输入/输出,指令,常数,变量等
  • 算法要使用的辅助空间

结语:本章学习流程图如下:

 

 

相关文章:

  • Swift中运算符相关内容
  • GJB 5000A与GJB 5000B区别
  • 复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥
  • Java并发 | 18.[锁机制] 轻量级锁(CAS+自旋锁)
  • 【Pytorch】torch.nn.Dropout()
  • 组件通信的方法
  • 【Pytorch】torch. matmul()
  • 【JVM笔记】类型转换字节码指令
  • 聚观早报 | 东方甄选与顺丰、京东合作;拼多多跨境电商平台上线
  • 如何创建并运行java线程呢?
  • dubbo安装跟部署
  • ESP8266-Arduino编程实例-QRE1113红外反射传感器
  • 【Django】REST_Framework框架——Mixin类和GenericAPIView中的视图子类源码解析
  • Springboot、Tomcat启动加载外部指定文件夹下的jar文件
  • MySQL教程 - 索引(Index)
  • 时间复杂度分析经典问题——最大子序列和
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【刷算法】从上往下打印二叉树
  • Android单元测试 - 几个重要问题
  • AWS实战 - 利用IAM对S3做访问控制
  • Making An Indicator With Pure CSS
  • python3 使用 asyncio 代替线程
  • Vue.js 移动端适配之 vw 解决方案
  • 实习面试笔记
  • 突破自己的技术思维
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #define、const、typedef的差别
  • (26)4.7 字符函数和字符串函数
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (补)B+树一些思想
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Mysql的优化设置
  • (转载)Linux网络编程入门
  • (状压dp)uva 10817 Headmaster's Headache
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .axf 转化 .bin文件 的方法
  • .gitattributes 文件
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET建议使用的大小写命名原则
  • .NET开发者必备的11款免费工具
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @Builder用法
  • @ModelAttribute注解使用
  • @requestBody写与不写的情况
  • @RequestBody与@ModelAttribute
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务