贪心算法设计与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程算法设计与分析实验实验名称贪心算法设计与应用第 1 页一、实验目的
理解贪心算法的基本原理,掌握贪心算法设计的基本方法及其应用;
二、实验内容
(一)Huffman编码和译码问题:
1.问题描述
给定n个字符在文件中的出现频率,利用Huffman树进行Huffman编码和译码。设计一个程序实现:
1.输入含n(n<=10)个字符的字符集S以及S中各个字符在文件中的出现频
率,建立相应的Huffman树,求出S中各个字符的Huffman编码。
2.输入一个由S中的字符组成的序列L,求L的Huffman 编码。
3. 输入一个二进制位串B,对B进行Huffman译码,输出对应的字符序列;
若不能译码,则输出无解信息。
提示:对应10 个字符的Huffman树的节点个数<211。
2.测试数据
Input
n=5
字符集合S={a, b, c, d, e},
对应的频率分别为
a: 20
b: 7
c: 10
d: 4
e: 18
字符序列L=ebcca
二进制位串B=01100111010010
Output
S中各个字符的Huffman编码:(设Huffman树中左孩子的权<=右孩子的权)a: 11
b: 010
c: 00
d: 011
e: 10
L的Huffman 编码:10010000011
B对应的字符序列: dcaeeb
若输入的B=01111101001,则无解
(二) 加油问题(Problem Set 1702):
1.问题描述
一个旅行家想驾驶汽车从城市A到城市B(设出发时油箱是空的)。给定两个
城市之间的距离dis、汽车油箱的容量c、每升汽油能行驶的距离d、沿途油站数n、油站i离出发点的距离d[i]以及该站每升汽油的价格p[i],i=1,2,…,n。设d[1]=0 2.具体要求 Input 输入的第一行是一个正整数k,表示测试例个数。接下来几行是k个测试例的数据,每个测试例的数据由三行组成,其中第一行含4个正整数,依次为A和B两个城市之间的距离d1、汽车油箱的容量c(以升为单位)、每升汽油 能行驶的距离d2、沿途油站数n (1<=n<=200);第二行含n个实数d 1, d 2 ,…, d n ,表示各油站离出发点的距离(d 1 =0);第三行含n个实数p 1 , p 2 ,…, p n , 表示各油站每升汽油的价格。同一行的数之间用一个空格隔开。 Output 对于每个测试例输出一行,含一个实数,表示从城市A到城市B所要花费的最少油费(输出的结果精确到小数点后一位)。若问题无解,则输出“No Solution”。 3.测试数据 2 1500 50 10 4 0 300.0 800.0 1200.0 4.0 5.0 4.0 4.5 1000 40 10 3 0 500.0 750.0 4.5 5.0 4.2 Sample Output 640.0 No Solution 4.设计与实现的提示 (1)注意考虑无解的情况 (2)对终点站可进行特殊处理 5.扩展内容 (1) 演示时建议采用可视化界面 (2) The Express Mail(Problem Set 1755) (三) 黑白点的匹配(Problem Set 1714):(选作题) 4.问题描述 设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示。一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当xb>=xw和yb>=yw。 若黑点b支配白点w,则黑点b和白点w可匹配(可形成一个匹配对)。在一 个黑点最多只能与一个白点匹配,一个白点最多只能与一个黑点匹配的前提下,求n个白点和n个黑点的最大匹配对数。 5.具体要求 输入的第一行是一个正整数k,表示测试例个数。接下来几行是k个测试例的数据,每个测试例的数据由三行组成,其中第一行含1个正整数n(n<16); 第二行含2n个实数xb 1, yb 1 ,xb 2 , yb 2 ,…, xb n , yb n , (xb i , yb i ),i=1, 2, …, n表示n个黑点的坐标;第三行含2n个实数xw 1, yw 1 ,xw 2 , yw 2 ,…, xw n , yw n , (xw i , yw i ),i=1, 2, …, n表示n个白点的坐标。同一行的实数之间用一个 空格隔开。 Output 对于每个测试例输出一行,含一个整数,表示n个白点和n个黑点的最大匹配对数。 6.测试数据 输入: 1 3 5.0 3.0 5.0 -1.0 4.0 4.0 2.0 3.5 2.0 2.0 -2.0 -2.0 输出: 3 7.扩展内容 (1) 建议采用可视化界面 三、实验环境 硬件:Windows XP计算机、鼠标、键盘、显示器 开发环境:Microsoft Visual C++ 6.0 四、实验步骤 (描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果) ①、点击开始菜单中的程序-Microsoft Visual C++ 6.0 点击菜单栏中的文件—新建—文件—C++ Source File ,在文件名(N)中写入“实验五.(1).cpp”,再点击确定. ②、编写程序如下: #include "stdio.h" #include "stdlib.h" #include "string.h" #define MAX 100 struct HafNode {