谈起分治算法,首先从字面意思理解:就是将一个问题划分成多个较小的问题的算法。其实正应题目的意思。其基本设计思想就是:将一个难以直接解决的大问题分解成一些规模较小的相同问题以便各个击破,分而治之。
设计步骤:1)分解:分解成若干子问题
2)求解:求解个子问题
3)合并:将子解合并成原问题的解。
在自考的时候,我们遇到的二路归并算法就...
分类:
编程语言 时间:
2014-10-31 22:12:08
阅读次数:
221
1、归并排序
分治思想:每次从中间分开为两个子问题,对每个子问题排序完成之后,将两个已排序的部分进行归并操作即得到最终排序的结果。
(1)如果数组S中元素个数为0或者1返回
(2)选取中间位置的元素下标,对左半部分SL递归排序,对右半部分SR递归排序
(3)将排好序的SL、SR进行归并后返回最终结果
平均时间复杂度O(NlogN),最坏情况也为O(NlogN),最好情况为O(N)。
...
分类:
编程语言 时间:
2014-10-30 23:57:55
阅读次数:
470
??
一、从Map到Reduce
MapReduce其实是分治算法的一种实现,其处理过程亦和用管道命令来处理十分相似,一些简单的文本字符的处理甚至也可以使用Unix的管道命令来替代,从处理流程的角度来看大概如下:
cat input | grep | sort | uniq -c | cat > output
# Input -> Map -> Shuffle & Sort -> R...
分类:
其他好文 时间:
2014-10-26 17:06:35
阅读次数:
278
1、折半搜索算法
(1)算法代码:
(2)复杂性分析
任何一种以比较为基础的搜索算法, 在最坏情况下所用的时间都不可能低于 (log ) n ? ,因此,也就不可能存在最坏情况下所需时间比折半搜索数量级还低的算法。
2、排序问题
2.1归并排序算法
(1)归并排序算法思想
该算法采用分治方法, 将要排序的数组分成两部分, 先对每部分进行排序,然后将两部分的...
分类:
编程语言 时间:
2014-10-25 21:35:00
阅读次数:
246
最大字数组问题是递归与分治算法中的经典问题:问题:求一个数组中相加可以获得最大值的子数组,子数组是指原数组中任意连续的一段代码:#include<iostream>
usingnamespacestd;
intmax_mid(int*a,intmid,intlow,inthigh)
{
intml=a[mid];
intmr=0;
intsum=ml;
for(inti=..
分类:
编程语言 时间:
2014-10-21 19:54:46
阅读次数:
204
快速排序是排序中常用的,效率据说还不错,它使用分治算法实现将一个大的需要排序的序列,分成两个较小的序列!怎么分呢,需要从序列中找出一个元素作为参考元素,通常的做法是拿第一个元素作为参考元素。当一个序列只有一个元素或者零个元素,就说明这个序列已经排序好 。步骤:1,用一个元素作为参考元2,分割序列,形...
分类:
编程语言 时间:
2014-10-21 17:29:34
阅读次数:
198
摘要:
网上有很多关于分治方法求二维平面上最近点对的讨论,但是没有完整的可运行代码,本文主要对于该问题介绍一完整的可运行代码,
供有兴趣者参考。...
分类:
编程语言 时间:
2014-10-13 16:29:49
阅读次数:
378
主要是是一个分治算法。 形象地看就是 挖坑+递归 1. A[p,r]分为A[p,q-1]和A[q+1,r]两部分,要求A[p,r]<q<A[q+1,r]. 2. 对A[p,r]和A[q+1,r]进行快速排序 #include<stdio.h>
int?partition(int?a[],int?left,in...
分类:
其他好文 时间:
2014-10-07 00:58:03
阅读次数:
203
线段树(interval tree) 是把区间逐次二分得到的一树状结构,它反映了包括归并排序在内的很多分治算法的问题求解方式。
上图是一棵典型的线段树,它对区间[1,10]进行分割,直到单个点。这棵树的特点
是:
1. 每一层都是区间[a, b]的一个划分,记 L = b - a
2. 一共有log2L层
3. 给定一个点p,从根到叶子p上的所有区间都包含点p,且其他区间都不包...
分类:
其他好文 时间:
2014-10-02 09:14:52
阅读次数:
196
近期学习《算法设计与分析基础第二版》,学习到了分治法,被课后习题吸引了,即Trimino拼图问题。想了好久,都没有想到如何去分而治之。然后就是Google到了相关的PPT。一看就明白了。自己就用代码实现了下。理解思想后,代码实现挺容易的。这个谜题实际上可以做成一个小益智游..
分类:
编程语言 时间:
2014-09-19 19:38:56
阅读次数:
381