算法第二章上机实验报告

一、 实验题目名称

    maximum number in a unimodal array

二、 问题描述

    给定一个包含n个不同元素的单峰数组,给出计算运行时间为O(log n)的最大元素的算法。

三、 算法描述

  1. 定义一个int类型的函数BinarySearch(int a[], int n),传入数组a[]和其长度n;
  2. 在函数BinarySearch里,先定义左、右边界int l=0,r=n-1,然后进行循环,循环条件为左边界小于或等于有边界了(l<=r)。在循环里,定义一个左右边界之间的中点变量middle,在通过比较中点与其左右两边所在数组值的大小,判断改点是否为峰值。若是峰值,则返回该峰值;若不是峰值且比右边的值要小,则以此点+1为新的左边界再进行循环;若不是峰值且比左边的值要小,则以此点-1为新的右边界再进行循环;
  3. 在主函数定义数组与其长度,并通过for循环进行输入,再将该数组与其长度代入函数BinarySearch中,并定义一个变量res来接收该函数的返回值,最后再输出res的值。

四、 算法时间及空间复杂度分析

  1. 算法时间复杂度分析:通过调用函数BinarySearch进行二分查找,即时间复杂度为O(logn);
  2. 算法空间复杂度分析:由于没有借助辅助空间,所以空间复杂度为O(1)。

五、 心得体会

   通过这次实验,更加清楚了分治法的优势所在,什么题目什么情况可以去使用分治法,并且可以以更快的效率去解决问题。两个人做实验也可以一起讨论,效率也   比较好。不过自己的编码能力和算法思维还有很大的提升空间。

六、 分治法的个人体会和思考

   分治法即如其名字,分而治之,意思就是把一个计算量庞大而复杂的问题,分成若干个小问题,然后通过解这些小问题,整合起来即可以解决整个大问题。所以在   以后碰到一些比较复杂的问题,为了保证较高的效率,可以思考一下是否可以使用分治法来解决。

posted on 2021-10-07 21:29  PurLinE  阅读(31)  评论(0编辑  收藏  举报