刷题日寄2023.1.4(分治法)

       做了几道运用分治思想的题,分别是洛谷中的P6510(奶牛排队)、P1429(平面最近点对(加强版))、P1908(逆序对)以及“著名”的最大连续子数组问题。

主体思想

       将问题对半分为两个子问题(也可以不只是两个,但是大部分情况下就只用分为两个子问题),总的问题的答案可能出现在这两个子问题中也可能出现在两个子问题之间(所取的元素分别出自两个问题之中)。

举例

       拿最大连续子数组这个问题来举例说明:对于给定一个数组,取中间元素,以中间元素把它分为两半(中间元素不属于两半中的任何一半),那么最大连续子数组可能全在左部分,也可能在全在右部分,也可能包含中间元素,总共三种情况。此时就可以设计一个函数,它的功能是求出一个数组的最大连续子数组,函数中前两种情况直接用递归来求(注意函数的递归出口),只需要考虑最后一种情况,最后一种情况是带着限制条件的(包含中间元素),让求取变得容易,那么最终这三种情况中的最大值即为最终结果。

第三种情况求解方法

       有时候第三种情况求取并不容易,或者无解。比如奶牛排队问题,可能出现求解包含中间元素的朴素求法无解,但是缩小了范围,直接用缩小后的范围递归求解第三种情况。逆序对问题用直接的分治法也不能快速求出(目前还没想到)第三种情况,解决办法是在求解时排序,但是需要先解决子问题再排序,不然会对子问题的求解有影响(实际上就是归并排序中随便求出逆序对),这与平面最近点对问题处理第三种情况时只用考虑7个点的思想类似,都是利用了子问题的结果或者一些处理来使当前的问题求解规模更小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值