PKU 数据结构与算法笔记——概论

数据结构

涉及数据间的逻辑关系、数据在计算机中的存储和表示和在这种结构上能执行的操作或运算三个方面面

三要素

  • 逻辑结构
  • 存储(物理)结构
  • 运算

逻辑结构

具体问题的数学抽象,反映事物组成和逻辑关系

节点的类型

  • 整数类型
  • 实数类型
  • 字符类型
  • 指针类型
  • 复合数据类型(如数组、结构类型等)

结构关系的分类

  • 线性结构
  • 树型结构
  • 图结构

存储结构

逻辑结构在计算机中的物理存储表示,存储结构建立一种逻辑结构到物理结构的映射

四种基本存储映射方法

  1. 顺序

    节点按地址相邻关系顺序存储,例如数组

    顺序存储是紧凑存储结构

    紧凑指除了有用数据之外没有附加信息

  2. 链接

    利用存储结构中的指针指向来表达两个节点的逻辑关系,分为数据字段指针字段两部分

    优点:增删容易

    缺点:定位困难

  3. 索引

    是顺序存储的一种推广,建立一个把结点的整数索引值映射到节点存储地址的索引函数

  4. 散列

    是索引方法的延申和扩展,定义一个把关键码映射到非负整数散列函数

抽象数据类型

用数学方法定义对象集合运算集合,仅通过运算的性质刻画数据对象

目的:隐藏运算实现的细节和内部数据结构

组成部分

  • 数据对象
  • 数据关系
  • 数据操作

算法

算法的性质

  • 通用性
  • 有效性
  • 确定性
  • 有穷性

算法的分类

  • 穷举法——万能、低效

  • 搜索(BFS、DFS)

  • 贪心法

  • 递归分治(二分检索、快速排序、分治排序)

  • 动态规划

算法分析

时间复杂度

大O表示法

存在正数c和n0,使得对任意 n ≥ n 0 n\ge n_0 nn0都有 f ( n ) ≤ c g ( n ) f(n)\le cg(n) f(n)cg(n),则称f(n)是O(g(n))的

  • f ( n ) → O ( g ( n ) ) 且 g ( n ) → O ( h ( n ) ) , 那么 f ( n ) → O ( h ( n ) ) f(n)\to O(g(n))\text{且}g(n)\to O(h(n)),\text{那么}f(n)\to O(h(n)) f(n)O(g(n))g(n)O(h(n)),那么f(n)O(h(n))

  • f ( n ) → O ( h ( n ) ) 且 g ( n ) → O ( h ( n ) ) , 那么 f ( n ) + g ( n ) → O ( h ( n ) ) f(n)\to O(h(n))\text{且}g(n)\to O(h(n)),\text{那么}f(n)+g(n)\to O(h(n)) f(n)O(h(n))g(n)O(h(n)),那么f(n)+g(n)O(h(n))

  • c n k → O ( n k ) cn^k\to O(n^k) cnkO(nk)

  • f ( n ) = c g ( n ) , 则 f ( n ) → O ( g ( n ) ) f(n)=cg(n),\text{则}f(n)\to O(g(n)) f(n)=cg(n),f(n)O(g(n))

  • ∀ a , b ∈ Z + , b ≠ 1 , l o g a n → O ( l o g b n ) \forall a,b\in Z^+,b\neq 1,log_an\to O(log_bn) a,bZ+,b=1,loganO(logbn)任何对数函数无论底数如何都具有相同的增长率

  • f ( n ) + g ( n ) → O ( m a x ( f ( n ) , g ( n ) ) ) , f ( n ) ⋅ g ( n ) → O ( f ( n ) ⋅ g ( n ) ) f(n)+g(n)\to O(max(f(n),g(n))),f(n)\cdot g(n)\to O(f(n)\cdot g(n)) f(n)+g(n)O(max(f(n),g(n))),f(n)g(n)O(f(n)g(n))

Ω \Omega Ω表示法

存在正数c和n0,使得对任意 n ≥ n 0 n\ge n_0 nn0都有 f ( n ) ≥ c g ( n ) f(n)\ge cg(n) f(n)cg(n),则称f(n)是 Ω \Omega Ω(g(n))的

Θ \Theta Θ表示法

如果f(n)是O(g(n))的也是 Ω \Omega Ω(g(n))的,那么f(n)是 Θ \Theta Θ(g(n))的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值