算法第四章实践报告
一,实践题目
7-1 最优合并问题
二,问题描述
给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。
三,算法描述
int number = n,result=0,s[n]; int i,j,temp; for(i=0; i<n; i++){ s[i]=a[i]; } while(number>1){ for(i=0;i<number;i++){ for(j=i+1;j<number;j++){ if(s[i]>s[j]){ temp=s[i];s[i]=s[j];s[j]=temp; } } } s[0]=s[0]+s[1]; result+=s[0]-1; number--; for(i=1;i<number;i++) s[i]=s[i+1]; } return result;
四,算法时间及空间复杂度分析
时间复杂度:O(n^2logn)
空间复杂度:O(n)
五,心得体会
主要的就是对不同的人对相同题目的思路的感悟,学会怎样去理解别人的思路,理解别人是怎么看待同样的问题的,还有就是对贪心算法与哈夫曼编码的理解更深入了一些