算法分析与设计——贪心法实验报告


   算法导论  课程设计


题    目:    贪心法

学院班级:        1613013        

学    号:      16130130216      

姓    名:        库 妍          

主讲教师        张立勇         

日    期:       2019.5.9        

一、Knapsack Problem

1、实验题目

下面有5个具有值和权重列表的项目,背包最多可以包含100磅。解决了分数背包和0/1背包问题。

2、使用的算法

部分背包采用动态规划法,0/1背包采用贪心法。

3、算法分析与设计

(1)0/1背包

①描述最优解的结构:考虑重量至多为W磅的最值钱的一包东西。如果我们从中去掉物品j,余下的必须是从除了j以外的n-1件物品中,可以带走的重量至多为W-wj的最值钱的一包东西。

②递归定义最优解的值 :wi表示第i件物体的重量,vi表示第i件物品的价值。定义二维数组c[i, j],其中每个元素代表一个状态,即前i个物体中若干个放入体积为背包中最大价值。c[i-1,j]代表的就是不将这件物品放入背包,而c[i-1,j-vi] + wi则是代表将第i件放入背包之后的总价值。

0/1背包问题的递归式为:

③按自底向上的方式计算最优解的值。

④由计算出的结果构造一个最优解。

(2)部分背包

①决定问题的最优子结构:考虑我们如果从最优的货物中去掉某物品j的重量w,则余下的货物必须是可以从n-1件原有物品和物品j的wj-w磅中可以带走的、重量至多为W-w的一包东西。

②贪心策略:先对每件物品计算其每磅的价值vi/wi。尽量拿每磅价值大的物品。

4、项目测试(功能与性能)

分数背包问题采用选择单位重量价值最大的物品顺序进行挑选,其算法的时间复杂度为O(nlgn)。0/1背包问题的动态规划解法,时间复杂度是O(n)。

5、实验总结

分数背包问题所采用的贪心策略之不能得到最优解,是由于物品不允许分割,因此,无法保证最终能将背包装满,部分闲置的背包容量使背包的单位重量价值降低了。

一、scheduling problem

1、实验题目

一个简单的调度问题,给予工作编号为J1,J2...Jn,已知所以工作的运行时间分别为T1,T2...TN。有一个单独的处理器,为了安排这些工作以到达减少平均完成时间的最好方法是什么。假定它是一个非抢占式调度:一旦工作开始,它必须运行完成。

a)(j1, j2, j3, j4) : (15,8,3,10)

2、使用的算法

贪心策略

3、算法分析与设计

由于是非抢占式调度,所以应该尽量让时间短的工作先做,然后再让时间长的工作做。这里我们使用堆进行排序,建立一个小顶堆,然后每次拿出小顶堆上的最小元素,并使用sum中的公式就可以算出平均完成时间。堆排序的时间复杂度是O(nlgn),其BuildMinHeap的时间复杂度是O(n),而MinHeap()的时间复杂度是O(lgn)。其中HeapExtractMin()的时间复杂度是O(lgn)。

4、项目测试(功能与性能)

5、实验总结

应用排序算法,让运行时间最短的工作先做。

三、Single-source shortest paths

1、实验题目

以A为源点,求出下图的单源点最短路径。

A   B   C   D   E

     A       -1   3

 B            3   2  2

 C       

 D        1   5

 E                -3

2、使用的算法

由于图中存在负权值,所以Dijkstra算法无法使用,因此采用Bellman-Ford算法求取图的单源点最短路径。

3、算法分析与设计

(1)Bellman-Ford算法通过对边进行松弛操作来渐近地降低从源点A到每个结点的最短路径的估计值,直到该估计值与实际的最短路径权重?(A,v)相同为止。该算法返回TRUE值当且仅当输入图中不包含可以从源结点到达的权重为负值的环路。

(2)Bellman-Ford算法的执行步骤:

①初始化:将除源点外的所有顶点的最短距离估计值d[v]←+∞, d[s]←0;

②迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;运行(|v|-1次)

③检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在d[v]中。

(3)算法适用范围和条件:   

①单源最短路径(从源点A到其它所有顶点v);            

②有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E的有向图); 

③边权可正可负(如有负权回路输出错误提示)。       

4、项目测试(功能与性能)

Bellman-Ford算法的时间复杂度为θ(VE)。

5、实验总结

Bellman-Ford算法能在一般的情况下(存在负权边的情况下),解决单源最短路径问题。对于给定的有向图G=(V, E),其源点为s,加权函数为w:E→R,对该图运行Bellman-Ford算法返回一个布尔值,表示图中是否存在着一个从源点可达的权为负的回路。若存在回路的话,算法说明该问题无解;若不存在这样的回路,算法将产生最短路径及其权值。

四、All-pairs shortest paths

1、实验题目

求题3图中每对结点的最短路径问题。

2、使用的算法

Floyd-Warshall算法。

3、算法分析与设计

(1)最短路径的结构:设G的顶点为V={1,2,3...n},对于任意一对顶点i,j属于V,假设i到j有路径且中间节点皆属于集合{1,2,3...k},P是其中的一条最小权值路径。就是i到j的最短路径P所通过的中间顶点最大不超过k。

(2)解决每对顶点间最短路径问题的一个递归解:设d(k)ij为从结点i到结点j的所有中间结点全部取自结合{1,2,...,k}的一条最短路径的权重。d(k)ij的递归定义为:

(3)自底向上,计算最短路径的权值:

(4)构造一条最短路径

4、项目测试(功能与性能)

Floyd-Warshall算法的时间复杂度为θ(v^3)。

5、实验总结

Floyd-Warshall算法的运行时间是由第3~6行的三重嵌套for循环所决定的。每次执行花费O(1)时间,因此算法的运行时间为Θ(n^3),其代码是紧凑的,而且不包含其他数据结构,因此隐含于Θ记号中的常数是很小的。因此,即便对于中等规模的输入图来说,Floyd-Warshall算法仍然是相当实用的。

原文地址:https://www.cnblogs.com/ku1274755259/p/11108482.html

时间: 2024-11-06 20:29:44

算法分析与设计——贪心法实验报告的相关文章

算法分析与设计——分治法实验报告

   算法导论  课程设计 成 绩 题    目:  算法导论课程设计实验报告 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.6.3         录 分治法 一.Implement exercise 2.3-7................................

嵌入式软件设计第十次实验报告

学号:140201112          姓名:孙佳文 组别:第3组                  实验地点:D19 一.实验目的: 1.了解GSM模块SIM900A的使用方法. 2.掌握使用串口发送AT命令驱动SIM900A的 方法. 二.实验内容: 1.使用AT命令进行模块测试,拨打固定电话. 2.编写程序利用触摸屏完成任意电话的呼叫. 三.实验过程描述及结果展示: 实验器材:STM32F407开发板.LCD显示屏 1.实验原理 SIM900A跳线帽连接方式: 长按PWR_KEY键后网

嵌入式软件设计第12实验报告-140201133-李宇昕

学号:140201133                   姓名:李宇昕 组别:第3组           实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程与嵌入式设备进行交互的方法. 二.实验内容: 1.编写程序把嵌入式开发板采集到的温度信息通过GSM短信传送给指定号码.(每10秒发送1次) 2.编写程序,使手机可以通过短信指令的方式控制嵌入式开发板的蜂鸣器和LED灯.(比如手机编辑"BEEP_ON"和"BEEP_OFF"控制嵌入式开发板的蜂鸣器)

面向对象实验报告二

面向对象分析与设计第二次实验报告   一.类的不同类型的方法,属性的可见性 可见/访问性 在同一类中 同一包中 不同包中 同一包子类中 不同包子类中 public yes yes yes yes yes protected yes yes no yes yes package yes yes no yes no private yes no no no no public  class Student { public String home; protected int age; privat

算法分析与设计——动态规划法实验报告

   算法导论  课程设计 成 绩 题    目:    动态规划法 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.4.11         (1)描述最优子结构:如果最优的加括号的方式将其分解为Ai..k与Ak+1..j的乘积,则分别对Ai..k与Ak+1..j加括号的方式也

南邮算法分析与设计实验3 回溯法

回溯法 实验目的: 学习编程实现深度优先搜索状态空间树求解实际问题的方法,着重体会求解第一个可行解和求解所有可行解之间的差别.加深理解回溯法通过搜索状态空间树.同时用约束函数剪去不含答案状态子树的算法思想,会用蒙特卡罗方法估计算法实际生成的状态空间树的结点数. 实验内容: 1.求24点问题 给定四个1-9之间的自然数,其中每个数字只能使用一次,用算术运算符+,-,*,/构造出一个表达式,将这4个正整数连接起来(可以使用括号),使最终的得数为24.要求根据问题的特征设计具体算法并编程实现,输入数据

C语言设计实验报告(第四次)--循环结构

C程序设计实验报告 实验项目:5.3.1-2求数列的前n项和:5.3.2水仙花数:5.3.4十进制转换:5.3.5-1百马百担问题:5.3.5-2求等差数列:5.3.5-3食品分配问题 姓名:彭佳乐 实验地点:家 实验时间:2020.4.09 一.实验目的与要求 1.巩固对于循环的理解 2.了解一些常见的结构 二.实验内容 1.实验练习:求数列前n项和 (1)问题的简单描述:编写程序,求数列1,-3!,5!,-7!,..,(-1)''-(2n-1)!前n项的和.n的值由键盘输入. (2)实验代码

嵌入式软件设计第8次实验报告-140201236-沈樟伟

嵌入式软件设计第8次实验报告 学号:140201236                   姓名:沈樟伟 组别:第二组                实验地点:D19 一.实验目的: 1.熟悉WWW技术中的CGI(公共网关接口)技术. 2.学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯和蜂鸣器. 二.实验内容: 1.编写代码完成Web服务器端蜂鸣器的驱动. 2.编写代码完成Web服务器端LED灯的驱动.三.实验过程描述及结果展示: 1.实验原理 CGI技术简介:公共网关接口CGI(C

130242014045 林承晖 实验报告一 软件设计的网络支持环境

实验报告一 课程  软件系统设计与体系结构   实验名称   软件设计的网络支持环境     第      页 专业___软件工程_____  班级_ 2班____  学号____130242014045___   姓名  林承晖 实验日期:  2017  年 09  月 14  日 --    年   月   日 一.实验目的 了解主流软件体系结构与设计技术网站,不断丰富软件体系结构和软件设计技术最新知识的学习方法. 二.实验内容 1.概念理解 (1)请根据你的理解和看法,给出'软件体系结构'