数据结构与算法(算法)给自己写的笔记

排序:

本章大部分内容假设整个排序工作能在主存中完成,因此元素个数较小(10的六次方)内部排序

在磁盘或磁带上完成的排序也很重要,这种排序成为外部排序

我们假设N是排序例程中的元素个数,对于所有的排序,数据都将在位置0开始

1、插入排序

插入排序保证元素是已经排过序的

 如果输入数据已预先排序,那运行时间为O(N²)

通过交换相邻元素进行排序的任何算法要花费Ω(N²)

希尔排序:

它通过比较一定间隔的元素来排序,间隔的距离随着算法的进行而减小,直到比较相邻元素(插入排序),所以也叫缩小增量排序

 通过角标不变并拆分成几个小数组的方法

然后各自改变每一个小数组的方式来排序

关键是要选择一个增量序列ht(间隔的元素)

每个元素相隔hk

 建议的序列就是把N个元素除以2并向下取整

直到取到hk为1(插入排序)

以上的序列还可改进

代码

堆排序:

优先队列可以花费O(NlogN))时间排序,基于该想法的算法叫堆排序

实践中却慢与Sedgewick增量序列的希尔排序

通过第二个数组记录deletemin的值

因为使用了第二个数组,所以存储需求增加一倍

所以可以在deletemin时把值记录在最后一个空穴,最后堆就会以递减的方式存储。

也就是把第一个元素和最后一个元素交换,空间得以重复利用

哈夫曼树(最优二叉树):

路径:从树的一个结点到另一个结点之间的分支构成这两个结点间的路径

结点的路径长度:两结点间路径上的分支数

树的路径长度·:从树根到每一个结点的路径长度之和,记作TL

结点数相同的二叉树中,完全二叉树是路径长度最短的二叉树

将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权`

结点的带权路径长度:

从根节点到该结点之间的路径长度与该结点的权的乘积·

树的带权路径长度

树中所有叶子结点的带权路径长度之和记作WPL

哈夫曼树:最优树(带权路径长度(WPL)最短的树

带权路径长度最短,是在度相同的树中比较而得的,因此有最优二叉树,最优三叉树等

哈夫曼树:最优二叉树(带权路径长度(WPL)最短的二叉树

 贪心算法:构造哈夫曼树时首先选择权值小的叶子结点

哈夫曼算法:·

构造森林全是根:

(1)根据n个权值构成n颗二叉树的森林,每个数的根节点就是权值

选用两小造新树:

(2)在森林里选取权值最小的树作为左右子树构造一棵新的二叉树,新树的根节点权值为其左右子树上根结点的权值之和

删除两小提添新人

(3)删除这两棵树,并将新得到的二叉树加入森林

重复2、3剩单根

(4)重复(2)(3)直到森林只有一棵树,这棵树即为哈夫曼树

 总结:

 哈夫曼树的实现:

 因为哈夫曼树有2n-1个节点,所有使用数组时大小为2n(从0开始)

哈夫曼编码:

1、统计字符集中每个字符在电文中出现的平均概率

2、利用哈夫曼树的特点:权越大的叶子离根越近,将每个字符的概率值作为权值,构造哈夫曼树,则概率越大的结点,路径越短

3、在哈夫曼树的每个分支上标0或者1

        结点的左分支标0,右分支标1

        把从根到每个叶子的路径标号连起来,作为该叶子代表的字符的编码

 前缀码即使不会发生重码

求哈夫曼编码 

图:

G=(V,E)

V:顶点的有穷非空集合

E:边的有穷集合

无向图:每条边都是没方向的

有向图:每条边都是有方向的

完全图:任意两个点都有一条边相连

 稀疏图:有很少边或弧的图(e<nlogn)】

稠密图:有较多边或弧的图

网:边/弧带权的图

邻接:有边/弧相连两个顶点之间的关系

存在(vi, vj)则称vi和vj互为邻接点(圆括号无先后关系,无向图)

存在<vi, vj>则称,vi邻接到vj,vj邻接与vi(尖括号表示vi到vj是有序的序偶,有向图)

关联(依附):边/弧度与顶点的关系

存在(vi,vj)或<vi, vj>则称该边/弧依附于vi和vj

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值