分治策略在我们的排序算法中的快速排序、归并以及二分查找中经常用到,本文就来探讨一下分治策略。当然,与分治策略密不可分的还有我们经常用到的递归。
目录
一、递归基础
一个直接或间接的调用自身的算法称为递归算法。递归的使用会让我们对于问题的理解更加的清楚。但是并非所有的程序都适合用递归去进行解决。
二、分治策略基础
分治策略的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。递归的解决这些子问题,然后将这些子问题的解合并得到原问题的解。
它缩小的是问题的规模,反复使用分治策略,可以使子问题与原问题类型一致而规模却不断缩小。在分治策略中它的主要思想就是划分,尽可能将问题的规模划分最小。
三、来看几个递归分治的例子
1、快速排序
快速排序是我们八大排序中的一种,它的主要思想就是基于划分的,通过划分,将问题的规模缩小,对子问题进行解决最后合并得到原问题的解。快排的最主要的一点就是做好划分。因此在实现快排的时候,划分部分我们有三种方法。
(1)划分部分
第一是按照通常的做法从第一个开始选取记录,进行划分;
第二是三位取中法,即就是找到原序列中的左中右三个位置的值,找到第二大的数值作为标记;
第三是随机化法,随机选取一个位置的数值,把最左边的值与其进行交换。
(2)排序部分
第一种是按照递归的做法实现排序;
第二种是非递归实现排序,在非递归实现排序的时候可以利用栈、队列、pair等容器作为支持;
具体实现代码:
//划分部分:第一个数值作为记录进行交换
template<class Type>
int Partition(Type *arr,int left,int right)
{
int i = le

本文深入探讨了递归和分治策略,讲解了它们的基础概念和在快速排序、求K大(小)数、最接近点对问题中的应用。递归是直接或间接调用自身解决问题的方法,而分治策略则是将大问题分解为小问题解决,两者常结合使用,如在快速排序中的划分思想。此外,文章还介绍了不同类型的划分方法和递归实现方式。
最低0.47元/天 解锁文章
707

被折叠的 条评论
为什么被折叠?



