叶天帝对战黑暗至尊,多次濒临死境,却创出叶天帝对战黑暗至尊,多次濒临死境,却创出 分治算法(分治算法解决归并排序),小白分治算法(分治算法解决归并排序),小白
也能看懂的归并也能看懂的归并
分治算法分治算法
问题引入问题引入:
前文说到,叶天帝集结天庭众人攻打生命禁区,在此之前发生了一个小插曲,大黑狗偷了叶天帝的空间戒指,使得叶天帝无法携带大量的资源。为此,叶天帝闭关九九八十一
天,创出了 0-1背包大法 ,这才顺利启程,一场大战缓缓拉开帷幕。
这一日,叶天帝与众位黑暗至尊展开了白热化的战斗,叶天帝虽强,但终归是双拳难敌四手,战况岌岌可危,叶天帝险象环生。在这千钧一发之际,只见大黑狗施展“行”字秘
术,来到高空,一声大喝“叶小子,分治啊,逐个击破”,叶天帝突然顿悟,施展法门,将空间划分为若干个部分,后施展一气化三清秘术,化出分身去各个空间逐个击破。
此一战,叶天帝在战斗中濒临死境,却也创出了旷古奇法 分治。
分治的基本概念:分治的基本概念:
把一个任务分成形式和原任务相同,但规模更小的几个部分,然后逐个击破,分别完成,然后再处理完成后的完成后的子任务,将子任务的解进行合并,得到原任务的解。
此算法是许多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)等
分治法所能解决的问题一般具有以下几个特征:分治法所能解决的问题一般具有以下几个特征:
(1)当问题的规模缩小到一定的程度时,就可以使用很简单的方法解决;
(2)该问题可以分解为若干个规模较小的、相同形式的子问题问题;
(3)通过子问题的解可以合并得出为该问题的解;
(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
如:斐波那契数列的求解过程,它虽然也可以采用类似“分而治之”的思路,但是它的多个子问题之间都会有交集,所以就不能采用普通的分治算法解决。
分治法解决问题的一般思路:分治法解决问题的一般思路:
(1)分解。
(2)解决子问题,若不能解决,则再分解。
(3)合并,由子问题的解推出原问题的解。
几个典型分治算法的应用:几个典型分治算法的应用:
(1)排序(快排,归并)
(2)二分查找
(3)二叉树遍历(前序,中序,后序)
(4)大整数乘法
(5)几何问题(最近点对,凸包)
……
分治的典型应用:归并排序分治的典型应用:归并排序
归并排序的思想:
(1)把前一半数组进行排序
(2)把后一半数组进行排序
(3)将前后两部分归并到一个新的有序数组,然后将这个有序数组再“赋值”给原来的数组,归并排序完成。
设计算法:
需要一个辅助数组T,用来存放排序的中间结果。
设定三个指针,po指向辅助数组首元素的位置,p1指向前半个数组的首元素的位置,p2指向后半个数组的首元素的位置。
评论0
最新资源