算法第四章上机实践报告

一、程序存储问题

1.实践题目

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。

输入格式:

第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。

输出格式:

输出最多可以存储的程序数。

输入样例:

在这里给出一组输入。例如:

6 50 
2 3 13 8 80 20

输出样例:

在这里给出相应的输出。例如:

 5

2.问题描述

参数:n 表示文件个数;L表示磁带的长度。

输入:第一行 n L ;第二行 n个程序放在磁带上的长度

输出:最多可以存储的程序个数

3.算法描述

  1.用一个数组保存输入的n个程序在磁带上的长度

  2.对数组进行从小到大的排序

  3.从左往右,用temp保存选中的程序在磁带上的长度

  4.如果temp<L,则证明可以选择这个程序,于是选中程序个数cnt+1

  5.直到temp>L,输出cnt的值

贪心策略:每次都选择磁带长度最小的那个程序

证明:假设最优子结构里不包括一个最小的程序,但是把最有子结构里的一个程序与最小的程序替换,结果反而更好,说明最优子结构包括最小的程序,假设不成立

4.算法时间及空间复杂度分析

  1.时间复杂度:基本运算输入数组为n, sort方法的时间复杂度为nlogn, 后面的时间是6n,综合起来就是 O(nlogn)

  2.空间复杂度:开辟了空间为n的数组,为常数,所以空间复杂度为O(1)

二、 删数问题

1.实践题目

给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。

输入格式:

第 1 行是1 个正整数 a。第 2 行是正整数k。

输出格式:

输出最小数。

输入样例:

在这里给出一组输入。例如:

178543 
4 

输出样例:

在这里给出相应的输出。例如:

  13

2.问题描述

参数:a表示正整数;k表示要删掉的个数

输入:第一行 a;第二行 k;

输出:剩下数字组成的新数最小的数

3.算法描述

  1.先得出a的长度len

  2.把a的每一位保存在数组arr里

  3.res保存剩下的位数

  4.把指针位于start=0,end=start+n 找出最小的数来确定最左的位数保存在数组ans(例如一个数有个十百千位,先确定最小千位,其次确定百位,十位,个位)

  5.把指针移到start=刚选中的数字的后一位,end++;选出下一位,直到end+len

  6.最后删掉前面的0;如果结果为0,保留一位0;

  7.输出结果

贪心策略:选择数字每一位最小的数,先选最高位,其次是最低位

证明:假设最优子结构,不包括,有一位数选择最小的,那么这个最有子结构比选择了最小的数还要大,矛盾,所以假设不成立,最优子结构包括每一位数最小的

4.算法时间及空间复杂度分析

  1.时间复杂度:输入数组用了常数时间,其他为一次方,所以时间复杂度为O(n)

  2.空间复杂度:开辟了空间为a ,和空间为a-k的数组,为常数,所以空间复杂度为O(1)

三、最优合并问题

1.实践题目

给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。

输入格式:

第一行有 1 个正整数k,表示有 k个待合并序列。 第二行有 k个正整数,表示 k个待合并序列的长度。

输出格式:

输出最多比较次数和最少比较次数。

输入样例:

在这里给出一组输入。例如:

4
5 12 11 2 

输出样例:

在这里给出相应的输出。例如:

  78 52

2.问题描述

参数:k 表示待合并序列的长度;

输入:第一行:k; 第二行:k个要合并的序列

输出:两个数:最多比较次数和最少比较次数

3.算法描述

 

  1.从队列中选出两个最小的数进行合并

  2.在队列中删除选出的两个数

  3.把新合成数加入队列中

  4.不断合并,直到合并完

贪心策略:每次选择最小的两个数

4.算法时间及空间复杂度分析

  1.时间复杂度:O(nlogn)

  2.空间复杂度:开辟了两棵树O(n)

四、心得体会(对本次实践收获及疑惑进行总结)

对贪心算法有更深的体会,能更好地对贪心策略和最优子结构进行证明。对哈夫曼树还不是很了解,多看书,做题,继续努力

 

posted on 2019-11-18 15:13  行星9  阅读(145)  评论(0)    收藏  举报

导航