数据结构

时间复杂度:

在规模为 n 的所有输入中,选择执行时间最长者作为 T(n),并以 T(n)度量该算法的时间复杂度

 将 T(n)定义为算法执行基本操作的总次数,即 T(n)决定于组成算法的所有语句各自的执行次数,及其中所含基本操作的数目

空间复杂度:

算法所需要的存储空间的大小,一般不对其专门考察,因为任何一个算法的任何一次运算过程中消耗的存储空间,都不会多于其间所执行基本操作的累计次数,所以时间复杂度是空间复杂度的天然上界

常数时间复杂度,对数时间复杂度,线性时间复杂度,多项式时间复杂度等

数组到容器:

数组的读取、修改等基本操作可以在常数时间内完成,只要从数组所在空间的起始地址A出发,即可根据每一元素的编号,经过一次乘法运算和一次加法运算,获得访问元素的物理地址。

将数组结构做一般性推广就是容器(vector),经过这个抽象后,不在限定同一容器中的各元素都属于同一基本类型,他们本身是来自于更一般性的某一类对象,各元素也不见得同时具有某种数值属性,故而并不保证他们可以比较大小

不在需要的向量应该借助析构函数及时清理,以释放其占用的系统资源,同一对象只能有一个析构函数,不能重载

动态空间管理,执行 insert 操作前都是检查空间是否够,如果不够,就重新申请一个大空间,将元素搬过去。同理,容器缩容一样

size()和get()等静态操作可以在常数时间内完成,insert()和remove()等动态操作需要线性时间

列表:

列表和容器一样同属序列结构的范畴,其中元素也构成一个线性逻辑次序,但元素的物理地址是可以任意的,列表逻辑上是前驱和后继的关系

使用动态存储策略,可以大大降低动态操作的成本,但静态操作的成本增大

列表是链表结构的一般化推广,其中的元素称作节点

二叉树:

节点的孩子总数叫做度,无孩子的节点称为叶节点,包括根在内的其余节点称为内部节点

节点所有的后代及其之间的联边称为子树

二叉树每个节点的度不超过2

不含一度节点的二叉树称为真二叉树

满二叉树,所有层的节点数都达到最大

完全二叉树,除了最后一层,其他层节点数都是满的,最后一层如果不满,所有的节点都在左边

完全二叉树度为 1 的节点个数是 0 或者 1 

度为 0 的节点个数等于度为 2 的节点个数加 1

二叉树的所有节点 N = N0+N1+N2  ,度为 0,1 2 的节点数之和,或者 N = N1 +2N2+1 

二叉树的遍历 

中序遍历(左根右)

先序遍历(根左右)

后序遍历(左右根)

已知先序遍历和中序遍历,可以唯一知道二叉树

已知后序遍历和中序遍历,可以唯一知道二叉树

已知后序遍历和先序遍历,不可以唯一知道二叉树

根据先序遍历确定根节点,然后再其他顺序中确定左右子树,递归下去

二叉排序树

二叉排序树 (BST) 是一棵具有下列性质的二叉树。

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结构的值
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结构的值
  • 它的左子树和右子树都是二叉排序树

哈夫曼树

哈夫曼树也叫做最优二叉树

在权为 w1,w2,w3,...,wn 的 n 个叶子节点的所有二叉树中,带权路径长度 WPL 最小的二叉树称为赫夫曼或最优二叉树

树的带权路径就是树中所有的叶子节点的路径长度。


哈夫曼树的构造(哈夫曼算法)




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值