算法第四章实践报告

一,实践题目

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)

五,心得体会

主要的就是对不同的人对相同题目的思路的感悟,学会怎样去理解别人的思路,理解别人是怎么看待同样的问题的,还有就是对贪心算法与哈夫曼编码的理解更深入了一些

posted @ 2018-12-02 19:56  Psyche6  阅读(163)  评论(0)    收藏  举报