算法第二章实践报告

  • 实践题目名称

          7-1 maximum number in a unimodal array

  • 问题描述

          从大小为n的数组中找出最大值(单调递增再递减),由于题目要求时间复杂度为O(log n),所以为分治法。

  • 算法描述

          本题的时间复杂度为O(log n),采用二分搜索方式对数组不断地二分

          若a[mid]大于相邻的两个数,则说明a[mid]就是我们要找的数(因为单峰值函数)

          若a[mid]<a[mid-1],则说明峰值在mid的左边,需要缩小范围向mid左边二分

          若a[mid]>a[mid+1],则说明峰值在mid的右边,需要缩小范围向mid右边二分

          直到找到正确的mid为止

  • 算法时间及空间复杂度分析

        时间复杂度:每执行一次算法的while循环,带搜索的数组大小就减少一半,因此,在最坏的情况下,while循环被执行了O(logn)次。循环体内运算时间O(1),因此整个算法在最坏情况下的计算时间复杂度为O(logn)。

        空间复杂度:该算法并没借助辅助空间,只是对大小为n的数组进行操作,所以为O(1)。

  • 心得体会

         本次算法上机课,由二人小组共同完成,对两个人帮助都很大,会做题不一定会讲题,真正把题能给他人讲清楚才是真正的懂了。同时,让我们对分治法有了更深刻的认识,意识到了使用它大大减少的时间复杂度,但在做2,3题时仍然面临不少困难,希望以后可以进步。

  • 分治法的个人体会和思考

         分治法的基本思想就是将一个问题规模为n的问题分解为k个规模较小的子问题,这些子问题规模相同且,互相独立且与原问题相同。总之,通过本次学习,我意识到很多题用到二分搜索会大大减少复杂度,也更为便捷,希望自己今后可以对二分搜索更为熟练。

 

 

 

posted @ 2021-09-29 17:34  半个一加冰  阅读(33)  评论(0编辑  收藏  举报