栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法设计与分析第四章总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法设计与分析第四章总结

 

活动安排问题

  1. 算法思想:

   在活动安排问题中,做出的贪心选择为:每一次都选择结束时间最早并与前一个活动相容的活动。

   证明:设集合A为我们得到的活动E集合中的最大相容子集,活动k为集合A中按活动结束时间排序的第一个元素,若k就是E中第一个元素,则集合A是一个通过贪心选择得到的最优解,若不是,则取B=(A-k)U(1)(E中的第一个元素),则最优解的大小不变,且贪心选择被包含在其中,则贪心性质可被证明。

   设集合A1=A-1是第一步贪心选择后对剩余子集E-1(且与1相容)进行贪心选择得到的最优解,如果存在B>A1,则新解1+A1一定大于A,与A是最优解相矛盾,最优子结构得证。

Dijkstra算法

  1. 算法思想:

   迪杰斯特拉算法是单源最短路径的贪心解法,它的贪心选择是将当前源点所能到达的最近的点加入到起点集合中。

  算法的基本过程分为两部分:更新和选择,从dis数组选择当前距离原点最近的点,并将新加入点所能到达的点的距离更新。

  时间复杂度:每次选择都能确定一个点,n个点的带权有向图最多需要n-1次,而每次更新也需要n次查询,所以时间复杂度为n^2;

Huffman编码

  1. 算法思想:

在解决霍夫曼编码问题的过程中,引入了带权路径长度的概念(叶结点的路径长度与它的权值(字符出现频率)的乘积),要求平均带权路径长度最短,也就是说频率越大的,它的路径越短,编码也就越短。而我们需要得到二进制编码,对应的就是二叉树。

每次我们都从已存在的节点中找到两个权值最小的节点,并将其作为新形成节点的左右子节点,新节点的权值就是左右两节点的和。重复操作,直到只剩下最后一个根节点。

时间复杂度:已知n个节点,每次都会将两个节点合并,n-1,并对n-1个进行排序(nlog(n))时间复杂度大约为n*nlogn;如果使用优先队列,开始需要创建队列,时间复杂度为nlogn,后面进行霍夫曼树的建立时需要再插入一个节点,插入n次,时间复杂度为nlogn,所以总的时间复杂度为nlogn;

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/587772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号