分治法之众数问题

东 华 大 学

《算法分析设计与综合实践》实验报告

   

 

学生姓名: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

       

       

       

猜你喜欢

转载自www.cnblogs.com/171310402CCh/p/10595204.html