You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
6 years ago | |
|---|---|---|
| .. | ||
| .vscode | 6 years ago | |
| 192181-30+雷宇辰+作业1 | 6 years ago | |
| Benchmark.cpp | 6 years ago | |
| Benchmark.h | 6 years ago | |
| CMakeLists.txt | 6 years ago | |
| Partition.txt | 6 years ago | |
| PartitionPerf.h | 6 years ago | |
| PartitionTest.cpp | 6 years ago | |
| Timer.h | 6 years ago | |
| Utilities.h | 6 years ago | |
| YourFib.h | 6 years ago | |
| YourPartition.h | 6 years ago | |
| hw1Test.cpp | 6 years ago | |
| hw1Test.gcda | 6 years ago | |
| hw1_2.xlsx | 6 years ago | |
| readme.txt | 6 years ago | |
readme.txt
数据结构 作业1 2020年春 目标:本次作业练习C++语言程序设计、算法时间复杂度分析,体会数据结构课程的学习目标 开始: (1)解压hw1.rar,得到hw1文件夹。hw1文件夹包含一个hw1_2.xlsx、YourFib.h、PartitionPerf.h、YourPartition.h和hw1Test.cpp。 hw1_2.xlsx是作业1第2题的Excel文件,要求完成其中的表(1)、表(2)。第3小题 图(1)选作。 hw1Test.cpp文件中main()函数的第一部分实现测试Fib类,第二部分实现测试Partition操作。 YourFib.h文件包含2阶斐波那契数列项Fib类的定义和(你的)实现。 YourPartition.h包含(你的)数组划分算法,算法中需要分别合计算法中元素移动次数、元素值比较次数和辅助空间字节数并返回。 PartitionPerf.h文件获取并输出数组划分算法性能数据,包括测试数据的生成、所耗时间的统计等。具体测试方法是分别对随机生成的大小为 5 - 600 (间隔为 5)的200个数组进行划分,累加所耗时间、元素移动次数、元素值比较次数和辅助空间字节数。程序会自动输出测试数据统计结果在Partition.txt中,请你将其中的数据分别粘贴在 https://docs.qq.com/sheet/DTFVNdlhqQVVDUU9L 四个汇总表中你的姓名位置相应处(hw1_4耗费总时间、hw1_4元素移动总次数、hw1_4元素移动总次数、hw1_4辅助空间总字节数)。 (2)建立一个空项目,添加hw1Test.cpp、fib.h、PartitionPerf.h、PartitionTest.cpp和YourPartition.h文件到项目中。 (3)任务hw1_3(选做) fib.h中Fib类的成员函数Value()实现计算2阶斐波那契数列第n项数值的功能。要求你设计Value()函数,并把代码填在fib.h文件的Value()函数中。编译、链接、调试程序,直至运行结果正确。 例如,测试用例如下 n Fib(n) 0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 分析Value()函数的时间复杂度。 (4)任务hw1_4 已知整数数组Vector[0..n-1],检测整个数组进行划分,以Vector[0]为基准元素,通过将小于基准的交换到左侧或大于基准的交换到右侧,将基准元素定位,并返回基准元素的位置。试编写YourPertition.h中的 int Partition(int x[], int n, int &movenum, int &compnum,int &bytesnum)函数实现划分,函数返回基准元素的定位位置,并统计算法中元素移动的次数、元素值比较的次数和使用辅助空间的字节数。其中movenum返回元素移动总次数,compnum返回元素值比较的总次数,bytesnum返回使用辅助空间的总字节数。 例如 数组: [20 23 66 23* 19 09],n=6 处理后可能的数组状态1:[09 19] 20 [23* 23 66], 返回值为2。 处理后可能的数组状态2:[19 09] 20 [23 23* 66], 返回值为2。 处理后可能的数组状态3:[19 09] 20 [66 23* 23], 返回值为2...... 要求仅扫描数组一次。如果完成算法,进一步优化算法,使得算法使用更少的缓存和更少的元素移动次数、更少的元素值比较次数。 统计说明: 算法中如果Vector[i](0<=i<=n-1)出现在赋值号“=”两端,则movenum需累加一次。 调用一次swap函数,movenum需累加三次。 凡出现Vector[i]和Vector[j](0<=i,j<=n-1)比较大小,则compnum需累加一次。 凡出现定义辅助变量或数组,则bytesnum需累加相应的字节数。C++中sizeof(int)为4。 (5)编写你自己的readme.txt文件:按照结构体程序设计方法或面向对象程序设计方法 展示你的算法以及设计过程,分析Value()的时间复杂度,Partition()函数的时间复杂度和空间复杂度。 (6)压缩 hw1_2.xlsx+.h+.cpp+.exe+.dsw/.dsp+readme.txt+你的测试数据.txt 成包(.zip\.rar)。命名规则:班级-序号+姓名+作业1,提交到datastructurecp@163.com。 说明: 1、程序都在Visual Studio 2013 编译通过。 2、鼓励大家多思考多分析,做出自己想要的优化的程序和系统。 3、鼓励大家多查找学习网上资料、程序,并将它们整理、分享到群里。 4、鼓励大家勤交流、勤分享、勤讨论,以设计并实现出优化的程序和系统(但不分享代码!)。