算法第4章实践报告
Posted pak-ho
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第4章实践报告相关的知识,希望对你有一定的参考价值。
1.实践题目
7-1 最优合并问题
2.问题描述
给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。
3.算法描述
该题与课堂中讲的哈弗曼编码问题类似。将序列合并生成新的序列,排序排序,再次合并。
#include <iostream> #include <algorithm> using namespace std; int main() { int n,a[1005],b[1005]; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; b[i]=a[i]; } int min=0,max=0; sort(a,a+n); sort(b,b+n); for(int i=0;i<n-1;i++) { min=min+a[0]+a[1]-1; a[0]=a[0]+a[1]; a[1]=99999; sort(a,a+n); max=max+b[n-2]+b[n-1]-1; b[n-1]=b[n-2]+b[n-1]; b[n-2]=-99999; sort(b,b+n); } cout<<max<<" "<<min; }
4.算法时间及空间复杂度分析
时间复杂度:for循环O(n),sort函数o(nlogn),时间复杂度为n^2logn。
空间复杂度:O(n)。
5.心得体会
课堂上听懂了,但解题时还是遇到不少困难,要多做题来巩固知识。
以上是关于算法第4章实践报告的主要内容,如果未能解决你的问题,请参考以下文章