东 华 大 学
《算法分析设计与综合实践》实验报告
学生姓名:XX 学号:171310402 指导教师:章昭辉
实验时间:2019-3-13 实验地点:图文信息楼三号机房
-
实验名称
众数问题
-
实验目的
对于给定的由n个自然数组成的多重集S,计算S的众数及其重数。
-
实验内容
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集合S中重数最大的元素称为众数。例如{1,2,2,2,3,5}。多重集合S的众数为2,其重数为3。
数据输入:
输入第一行为多重集S中元素的个数n;在接下来的n行中,每行有一个自然数。
结果输出:
输出由两行,第一行为众数,第二行时重数
-
实验过程
在理解题意的基础上,寻找可以使用的数据结构和算法,用codeblocks编写代码。并将代码转移到记事本编写注释,完成后截图写进实验报告。
-
结果分析
这个结果是我用数组的办法编写的。所用的时间为9.683s
这个结果是我用分治法的办法编写的。所用的的时间为5.352s
由此可见,用分治法解这道题效率更高
-
实验总结
刚开始我没有想到可以用分治法来做,用的是数组来做。做完以后发现算法太过复杂,而且处理较大的n时,时间复杂度和空间复杂度都比较大。于是我参考了算法答案那本书,学到了分治法来解决这道题。但是在完成了用分治法的代码以后,我发现了问题:
输出应该为:
2
4
分治法解决这道题有一个大前提:多重集中的元素是有序的(递增或者递减),所以很有必要给多重集加入一个排序的算法.
附录:(要求代码里各行要有注释)
自己的代码(性能不够好,太过复杂)
参照答案和csdn博客所改的代码:
https://www.cnblogs.com/yangykaifa/p/7162192.html
https://blog.csdn.net/chencong3139/article/details/52863629