|
|
数据结构 作业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、鼓励大家勤交流、勤分享、勤讨论,以设计并实现出优化的程序和系统(但不分享代码!)。
|
|
|
|