数据结构和算法分析学习笔记
来源:互联网 发布:gta5帧数优化提高帧数 编辑:程序博客网 时间:2024/05/19 00:48
数据结构
- 逻辑结构
- 集合结构
- 线性结构
- 树形结构
- 图形结构
物理结构
研究数据如何存储到计算机的存储器中,存储器主要针对内存
- 顺序存储
数据元素连续存储在连续的存储单元中,逻辑关系和物理关系是一致的。 - 链式存储
例如医院的排号系统,存储单元不连续
- 顺序存储
1. 线性表
由0个或者多个数据元素组成的有限序列
ADT :线性表(List)DATA :线性表的数据对象集合为{a1,a2,....,an},每个元素类型均为DataTypeOperation: InitList(*L):初始化操作,建立一个空的线性表L ListEmpty(L):判断线性表是否为空表,若为空返回true,否则,返回false ClearList(*L):清空表 GetElem(L,i,*e):将线性表中的第i个位置的元素返回给e LocateElem(L,e):查找L中有与给定值e相等的元素,如果有则返回其在表中的序号表示成功,否则返回0表示失败 ListInsert(*L,i,e):在线性表第i个位置插入元素e ListDelete(*L,i,*e):删除表第i个位置的元素,并用e返回其值 ListLength(L):返回元素个数
抽象数据类型
各种不同的数据类型,主要是考虑到数据在内存中储存的空间,
- 原子类型
- 结构类型
- 自行创建的数据类型
- 顺序储存结构
- 起始位置
- 最大储存容量(可以动态扩容,但是会降低性能)
- 线性表的当前长度
- 线性表从1开始计数而不同于数组从0开始计数,涉及到地址计算方法,存/读时间性能时间复杂度为O(1),插入/删除时间复杂度为O(n),所以它比较适合元素个数比较稳定,不经常插入和删除元素,更多的操作是存和读取数据的应用
- 优缺点
- 无需为表中元素之间的逻辑关系增加额外的储存空间
- 可以快速地存取表中任意位置的元素
- 插入和删除操作需要移动大量的数据
- 当线性表的长度变化较大时难以确定存储空间的容量
- 容易造成存储空间的“碎片”(成块申请内存,小块内存容易浪费)
- 链式存储结构
- 单链表
- 数据域 + 一个指针域(指针/链)= 结点(单链表)
- 单链表第一个结点的存储位置称为头指针,最后个节点的指针为空NULL,c语言中可以用结构指针描述单链表
- 头指针和头结点,头指针是必要元素且不为空,是指向第一个结点(有头结点就是头结点)的指针,头指针会被冠以链表的名字(指针变量的名字);头结点放在第一个元素结点之前,其数据域一般没有意义(可以存放链表长度),有了头结点对链表中所有的元素结点的操作就统一了
- 读取 工作指针后移
- 单链表
算法
案例:高斯算法 1+…+100
n(n+1)/2 复杂度为O(n^2)
1. 特性
- 输入
0个或者多个输入 - 输出
一个或者多个输出 - 有穷性
不会无限循环 - 确定性
每个步骤有确定含义,不具有二义性 - 可行性
每步都必须可行,有限次数完成
2.算法设计要求
- 正确性
- 算法没有语法错误
- 算法对于合法输入要有满足要求的输出
- 算法对于非法输入要有符合规格的说明
- 算法对于故意刁难的测试输入都有满足要求的输出结果
- 可读性
- 健壮性
- 时间效率高存储量低
3.算法效率的度量方法
- 事前分析估算法
编写程序前,依据统计方法对算法进行估算
取决因素:- 算法采用的策略,方案
- 编译产生的代码质量
- 问题的输入规模
- 机器执行命令的速度
4. 时间复杂度和空间复杂度
时间复杂度
O(1) 常数阶O(n) 线性阶(一层循环)O(n^2) 平方阶(双层嵌套循环)O(logn) 对数阶O(nlogn) nlogn阶O(n^3) 立方阶O(2^n) 指数阶看增长率:O(n^n)>O(n!)>指数阶>立方阶>平方阶>nlogn阶>线性阶>对数阶>常数阶
- 函数调用的时间复杂度分析
- 算法分析最坏运行时间和平均运行时间
空间复杂度
案例:
计算某一年是否为闰年
算法一:写计算某年是否为闰年的算法
算法二:建立一个表格存储好多年的数据
空间换时间
4. 未完待续
0 0
- 数据结构和算法分析学习笔记
- 数据结构和算法学习笔记
- 算法和数据结构学习笔记
- 数据结构和算法学习笔记
- 数据结构与算法分析_学习笔记
- 数据结构与算法分析学习笔记
- 数据结构学习笔记(1)算法分析
- 数据结构学习笔记1(算法分析)
- 数据结构与算法分析 学习笔记
- 数据结构与算法分析学习笔记---第一章
- 《数据结构与算法分析》学习笔记
- 数据结构与算法分析学习笔记
- 数据结构与算法分析学习笔记
- 数据结构和算法学习笔记-1
- 数据结构和算法学习笔记-2
- 数据结构和算法学习笔记-3
- 学习笔记1 数据结构和算法绪论
- 《数据结构与算法分析》学习笔记一:表、栈和队列
- URAL 2062 Ambitious Experiment (树状数组)
- 送给进入到计算机世界的自己
- 《道德经》第九章
- 深入浅出JMS(一)--JMS基本概念
- Python命名空间的本质
- 数据结构和算法分析学习笔记
- 301. Remove Invalid Parentheses
- #我的2016#梁定郊和我的江浙行分享贿赠同行友谊
- .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)
- Stone的txl数
- Go 1.8中值得关注的几个变化
- dom4j 复制xml文件/复制xml文件中选中节点到另一个xml文件
- 开源播放框架ijkplayer(iOS版)使用教程
- HDU - 1067 Gap (bfs + hash) [kuangbin带你飞]专题二