当前位置:   article > 正文

递归与分治java策略实验报告_分治策略实验报告.doc

递归与分治实验报告

PAGE PAGE 0综合性、设计性实验报告姓名________学号_专业 计算机科学与技术 班级2008级 班实验课程名称 算法设计与分析 指导教师及职称 开课学期 2010 至 2011 学年 上 学期上课时间 2010年 10 月 11 日 PAGE 一、实验设计方案实验名称:分治策略实例编程实验时间: 2010-10-11小组合作: 是○ 否○小组成员:1、实验目的: 理解分治策略的基本思想掌握分治策略的一般设计模式针对具体问题,能应用分治策略设计有效算法用C++实现算法,并且分析算法的效率2、实验设备及材料:(注意:请自行填写,按实际情况写,各位同学的实验报告应有所区别)硬件设备: pc机器配置: AMD Athlon(tm)II x2 240 2.80GHz 、2.0GB内存操作系统: Windows xp开发工具: vc++6.03、实验内容: ①问题描述给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。②编程任务对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。③样例例如,S={1,2,2,2,3,5}。多重集S的众数是__2______,其重数为_________3____。 4、实验方法步骤及注意事项:(注意:此部分为本实验的关键部分,请自行填写,不得雷同!)①分治算法的设计模式(参考教材15页自行填写)将原问题分为n个子问题(n为最合适)设计程序的递归算法调试算法②解题思路(注意:以下部分仅为提示,请自行填写;若表格不够,可自行拉伸。)首先用自然语言概述分治法求解众数问题的算法步骤。从文件中读取数据对数据进行升序排列。当i==0时,将q1[0][0]加1(i下标元素出现的次数),将q[0]赋给q1[0][1](保存i下标元素)当i!=0时,先对q[i]与q1[k][1]进行比较,判断q[i]是否出现过,如在q1[k][1]中出现,则对q1[k][0]加1,否则将将q[i]存入q1[k+1][1]中,并对q1[k+1][0]进行加1操作。当i==n时,退出算法.如i!=n,将i+1,调用此算法,进行下一元素的判断。给出使用分治策略求解众数问题的算法,用C++语言描述。Static int k=0; void zhongshu(int *q,int **q1,int n,int i){ if(i==0) { q1[0][0]++;q1[0][1]=q[0]; } else { if(q[i]==q1[k][1]) q1[k][0]++; else { k++; q1[k][0]++; q1[k][1]=q[i]; } } if(i==n) return ; zhongshu(q,q1,n,i+1);}5.实验数据处理方法:①数据输入输入数据由文件名为input.txt的文本文件提供。文件的第1行多重集S中元素个数n;接下来的n 行中,每行有一个自然数。②结果输出程序运行结束时,将计算结果输出到文件output.txt中。输出文件有2 行,第1 行给出众数,第2 行是重数。 6.参考文献:《计算机算法设计与分析(第3版)》 王晓东著 电子工业出版社《算法设计与实验题解》王晓东著 电子工业出版社指导老师对实验设计方案的意见:指导老师签名: 2010 年 10 月 17 日二、实验报告1、实验目的、设备与材料、实验内容、实验方法步骤见实验设计方案2、实验现象、数据及结果(请自行填写真实结果)序号输入文件(input.txt)输出文件(output.txt)0.6231222351.101521321211212.50386371113153103125147185613113147751014121241410511115113123121555111443119对实验现象、数据及观察结果的分析与讨论:本实验顺利通过测试。以上面序号为0进行分析,首先对数据进行升序排列,1为未在[k][1]中出现,则将1存入另一二维数[i][1]中,并对[i][0]进行加1 操作,表示此元素出现的次数,当循环到下一元素2时, [k][1]与2不等,则将k=k+1(表示另一新元素出现),[k][1]=2,[k][0]++, 再次循环到第2个2 时,[k][1]中存在2,则只将[k][0]加1,…….,一直到最后一个元素。4、结论:算法正确,算法采用递归

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号