贪心算法设计与应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

相关文档
最新文档