算法设计与分析实验报告样本

时间:2024.4.21

算法分析与设计实验报告

实验报告题目

实验一 递归与分治策略

开课实验室:数学实验室 指导老师: 时间:2012.9

学院:理学院 专业:信息与计算科学 班级:2010级1班 姓名: 学号:

一、 实验目的

1.加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;

2.提高学生利用课堂所学知识解决实际问题的能力;

3.提高学生综合应用所学知识解决实际问题的能力。

二、 实验内容

题目见P55:2-2,2-3,2-11,2-31,2-33。

三、 实验要求

(1)用分治法求解…问题;

(2 )再选择自己熟悉的其它方法求解本问题;

(3)上机实现所设计的所有算法;

四、 实验过程设计(算法设计过程)

五、 实验结果分析

2012 -2013学年 第一学期

(分析时空复杂性,设计测试用例及测试结果) 时间复杂性:最好情况下,最坏情况下 空间复杂性分析:

六、 实验体会

七、 附录:(源代码)

算法分析与设计实验报告 2012 -2013学年 第一学期


第二篇:算法设计与分析二分查找实验报告


设计题目:         二分查找程序的实现               

专业:              班级:       

设计人:                                        

山 东 科 技 大 学

年   月   日

学院:信息科学与工程学院  专业:         班级:         姓名:     

一、课程设计题目:     二分查找程序的实现                                                  

二、课程设计主要参考资料

(1)      计算机算法设计与分析(第三版)王晓东著                                                               

(2)                                                                       

三、课程设计应解决的主要问题

(1)      二分查找程序的实现                                                          

(2)                                                                 

(3)                                                                

四、课程设计相关附件(如:图纸、软件等):

(1)                                                                

(2)                                                                

五、任务发出日期:  20##-11-21             课程设计完成日期:   20##-11-24                  

指导教师签字:                       系主任签字 :                           

指导教师对课程设计的评语

成绩:               

                                        指导教师签字:                       

年    月    日

二分查找程序的实现

一、   设计目的

算法设计与分析是计算机科学与技术专业的软件方向的必修课。同时,算法设计与分析既有较强的理论性,也有较强的实践性。算法设计与分析的实验过程需要完成课程学习过程各种算法的设计和实现,以达到提高教学效果,增强学生实践动手能力的目标。

用分治法,设计解决二分查找程序的实现问题的一个简捷的算法。通过解决二分查找程序的实现问题,初步学习分治策略。

二、   设计要求

给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。实现二分搜索的递归程序并进行跟踪分析其执行过程。

用顺序搜索方法时,逐个比较a[0:n-1]中的元素,直至找出元素x,或搜索遍整个数组后确定x不在其中。这个方法没有很好的利用n个元素已排好序这个条件,因此在最坏情况下,顺序搜索方法需要O(n)次比较。要求二分法的时间复杂度小于O(n)。

三、   设计说明

  (一)、需求分析

二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情况下用O(logn)时间完成搜索任务。

该算法的流程图如下:

  (二)、概要设计

二分查找的基本思路是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法终止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部分继续搜索x。

由于二分查找的数组不一定是一个整数数组,所以我采用了C++中的模板函数,将排序函数Sort和二分查找函数BinarySort写为了模板函数,这样不尽可以查找整数数组,也可以查找小数数组。

由于查找的数组的长度不固定,所以我用了C语言中的malloc和realloc函数,首先定义一个数组指针,用malloc函数该它分配空间,然后向数组中存数,当数组空间满时,在用realloc函数为数组再次分配空间。由于在随机输入一组数时不知在什么位置停止,所以在输入完一组数之后,按Ctrl+Z键结束输入,然后再用cin.clear()将输入恢复,再继续输入。

  (三)、详细设计

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

using namespace std;

#define N 10//初始空间大小

#define n 10//增加空间大小

template<class Type>

void sort(Type a[],int num){

    double temp;

    for(int i = 1;i <= num-1;i++){

        for(int j = 0;j < num-i;j++){

            if(a[j] > a[j+1])

            {

                temp = a[j];

                a[j] = a[j+1];

                a[j+1] = temp;

            }

        }

    }

}

template<class Type>

int BinarySearch(Type *a,Type x,int m){

    int left=0;

    int right=m-1;

    while(left<=right){

        int middle = (left+right)/2;

        if(x==a[middle])

            return middle;

        if(x>a[middle])

            left=middle+1;

        else

            right=middle-1;

    }

    return -1;

}

int main(){

    int *a,num,length,i = 0;

    a = (int *)malloc(sizeof(int)*N);

    cout<<"请输入一组数(Ctrl+z停止输入)"<<endl;

    while(cin>>a[i]){

        i++;

        if(i>=N){

            a = (int *)realloc(a,sizeof(int)*(length+n));

            length += n;

        }

    }

    sort(a,i);

    for(int j = 0;j <i;j++){

        cout<<a[j]<<"   ";

    }

    cout<<endl;

    cin.clear();

    cout<<"请输入要查找的数:";

    cin>>num;

    if(BinarySearch(a,num,i)!=-1){

        cout<<num<<"在数组中,a["<<BinarySearch(a,num,i)<<"]="<<num<<endl;

    }

    else{

        cout<<num<<"不在数组中";

    }

    double *b,num1;

    int length1,i1 = 0;

    b = (double *)malloc(sizeof(double)*N);

    cout<<"请输入一组数"<<endl;

    while(cin>>b[i1]){

        i1++;

        if(i1>=N){

            b = (double *)realloc(a,sizeof(double)*(length1+n));

            length1 += n;

        }

    }

    sort(b,i1);

    for(int j = 0;j <i1;j++){

        cout<<b[j]<<"   ";

    }

    cout<<endl;

    cin.clear();

    cout<<"请输入要查找的数:";

    cin>>num1;

    if(BinarySearch(b,num1,i1)!=-1){

        cout<<num1<<"在数组中,a["<<BinarySearch(b,num1,i1)<<"]="<<num1<<endl;

    }

    else{

        cout<<num1<<"不在数组中";

    }

       return 0;

}

四、运行结果及分析

运算结果:

分析:

很容易看出,每执行一次算法的while循环,待搜索数组的大小减小一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此,整个算法在最坏情况下的时间复杂性为O(logn)。

五、总结

通过这次试验,解决了二分查找问题,加深了对分治法的理解,收获很大,同时我也理解到学习算法是一个渐进的过程,算法可能一开始不是很好理解,但是只要多看几遍,只看是不够的还要动手分析一下,这样才能学好算法。

更多相关推荐:
算法设计与分析实验报告

算法设计与分析课程报告课题名称算法设计与分析课题负责人名学号同组成员名单角色指导教师评阅成绩评阅意见提交报告时间20xx年6月12日第二章递归与分治策略23改写二分搜索算法1问题描述设a0n1是已排好序的数组请...

算法设计与分析实验报告1

攀枝花学院实验报告实验名称算法设计与分析课程实验实验内容比较排序算法的效率实验日期20xx0326院系数学与计算机姓名吴永昊学号20xx10804043同组人指导老师银星成绩一目的与任务通过算法的程序实现和执行...

算法分析与设计实验报告

排序问题求解实验日志实验题目排序问题求解实验目的1以排序分类问题为例掌握分治法的基本设计策略2熟练掌握一般插入排序算法的实现3熟练掌握快速排序算法的实现4理解常见的算法经验分析方法实验要求1生成实验数据要求编写...

算法设计与分析实验报告格式

算法设计与分析实验报告班级姓名学号20xx年11月18日目录实验一二分查找程序实现01页实验二棋盘覆盖问题04页实验三01背包问题的动态规划算法设计07页实验四背包问题的贪心算法10页指导教师对实验报告的评语成...

算法设计与分析实验报告

算法分析与设计实验报告实验报告题目实验一递归与分治策略一实验目的1加深学生对分治法算法设计方法的基本思想基本步骤基本方法的理解与掌握2提高学生利用课堂所学知识解决实际问题的能力3提高学生综合应用所学知识解决实际...

计算机算法与设计分析实验报告

计算机算法与设计分析实验报告班级姓名学号目录实验一分治与递归11基本递归算法12棋盘覆盖问题23二分搜索34实验小结5实验二动态规划算法51最长公共子序列问题52最大子段和问题73实验小结8实验三贪心算法81多...

算法分析与设计实验报告

计算机算法设计与分析实验报告目录实验一1实验题目1问题描述1算法设计1算法分析1源代码1运行结果2实验二2实验题目2问题描述2算法设计2算法分析2源代码2运行结果4实验三5实验题目5问题描述5算法设计5算法分析...

《程序设计与算法语言》实验报告

程序设计与算法语言实验报告实验名称使用软件班级学号姓名实验时间实验地点

算法分析与设计实验报告

实验一算法实现一一实验目的与要求熟悉CC语言的集成开发环境通过本实验加深对分治法贪心算法的理解二实验内容掌握分治法贪心算法的概念和基本思想并结合具体的问题学习如何用相应策略进行求解的方法三实验题1伪造硬币问题给...

算法分析与设计实验报告

实验一分治策略排序一实验目的1以排序问题为例掌握分治法的基本设计策略2熟练掌握合并排序算法的实现3熟练掌握快速排序算法的实现4理解常见的算法经验分析方法二算法思路1合并排序算法思想分而治之divideconqu...

算法设计与分析实验报告

计算机算法设计与分析实验报告实验题目学院专业班级学号姓名指导教师20xx年20xx年第一学期一实验目的掌握递归和分治法的基本设计思想二实验环境Windows系统VC60三实验内容问题描述有这样一种单片机只支持8...

算法设计与分析实验报告--排序

计算机算法设计与分析实验报告学号20xx211773姓名吕功建班级0411103实验一快速排序一实验目的1以排序分类问题为例掌握分治法的基本设计策略2熟练掌握一般插入排序算法的实现3熟练掌握快速排序算法的实现4...

算法分析与设计实验报告(42篇)