数据结构和算法分析学习笔记

来源:互联网 发布: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
原创粉丝点击