算法设计实验——贪心算法

实验时间

11   10  日星期3   第1

实验目的

1. 熟悉C++语言的运行环境的使用。

2. 掌握贪心算法的基本思想以及用贪心算法解决问题的一般技巧。

3. 掌握贪心算法的实现方式。

4. 掌握贪心算法时间复杂度分析的方法和步骤。

实验环境

博思平台

实验内容(步骤、方法、算法、程序)

一、

(1)题目要求:对于给定图G=(V,E,W), V={1,2,…,n},使用Prim算法求解最小生成树,输出最小生成树的边信息,格式参考输出结果。

(2)问题分析: prim算法设计思想:

初始 S = {1},

选择 连 接 S 与 V-S 集 合 的 最 短 边 e ={ i, j },其中 iÎS, j Î V-S.  将 e 加入树T,j 加入 S.

继续执行上述过程,直到 S=V 为止.

(3)算法设计: 伪代码如下(仅供参考):

(4)实验结果:

        例如 给定如下的图G

则输出如下:

最小生成树的边构成为:

3-------1

6-------3

4-------6

2-------3

5-------2

二、

(1)题目要求:给定给定带权有向网络 G=(V,E,W),每条边 e=<i,j>的权 w(e)为非负实数,表示从 i 到 j 的距离.  源点 sÎV,借助Dijkstra算法求解从s出发到达其它结点的最短路径,并输出到各个结点的最短距离,输出格式参照输出结果。

(2)问题分析:Dijkstra算法设计思想如下

(3)算法设计:伪代码如下(仅供参考):

(4)实验结果:

例如:假设给定的有向网络图如下

则输出结果为:

从顶点1到顶点2的最短距离为:5

从顶点1到顶点3的最短距离为:12

从顶点1到顶点4的最短距离为:9

从顶点1到顶点5的最短距离为:4

从顶点1到顶点6的最短距离为:3

部分源程序代码/实验配置

      

实验结果与结论

算法的时间复杂度分析(描述算法的时间复杂度,及其推导过程和结果)

  1. 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边数为V-1。
  2. 假设E表示连接到每个顶点的V-1边。

在最小堆中查找和更新每个相邻顶点的权重为O(log(V))+ O(1)或O(log(V))。

3.因此,从上面的步骤1和步骤2开始,更新顶点的所有相邻顶点的时间复杂度为E *(logV)。或E*logV。

4.因此,所有V个顶点的时间复杂度为V *(E * logV)即O(VElogV)。

指导教师

评议

成绩评定:                 指导教师签名:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值