1.基本思想 快速排序利用了分治策略。分治策略可以分为3个步骤: 分解:将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小。 解决:递归的求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。 合并:将子问题的解组合成原问题的解。 对一个典型的子数组A[p..r]进行快速排序的分治...
分类:
编程语言 时间:
2014-11-27 18:21:34
阅读次数:
260
合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解。 合并排序的模式一般如下: 1.分解:将 n 个元素分解为各含 n/2 个元素的两个序列; 2.解决:用分治排序法对两个子序...
分类:
编程语言 时间:
2014-11-25 20:13:40
阅读次数:
263
采用分治策略找出第K小的元素!要求程序的时间复杂度为线性函数。
#include
#include
#include
#include
#include
using namespace std;
/*
*选择问题(线性时间复杂度)
*在beg和end之间查找第k个元素
*/
int Fast_find(vector &vec,int beg,int end,int k)
{
if(k>end...
分类:
其他好文 时间:
2014-11-20 13:42:08
阅读次数:
234
最大子数组问题方法一:暴力求解方法我们可以很容易地设计出一个暴力方法来求解本问题:简单地尝试没对可能的子数组,共有O(n2)种#includeusing namespace std;#define INT_MIN 0x80000000int main(){ int arr[10]={9,8,-...
分类:
编程语言 时间:
2014-11-01 21:45:16
阅读次数:
296
C/C++中存在精度问题,很难做到大整数的加法和乘法操作,这里给出大整数的模拟乘法运算。
模拟原理:
模拟每一个位的值进行相乘,并使其加到对应的位置上,最后保证每一位的数都小于10,即从尾到头扫描一遍进位即可。
主要代码:
k=(mx-i)+(mbx-j);//相乘后的位置
c[k-1]+=sum%10;
c[k]+=sum/10;
...
分类:
编程语言 时间:
2014-10-23 00:03:32
阅读次数:
337
分治策略中,我们递归地求解了一个问题,在每层递归都应用了三步1.分解,将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小2.解决,递归地求解出子问题,如果子问题的规模足够小,则停止递归,直接求解3.合并,把子问题的解给合并为原问题的解当子问题足够大的时候,需要递归,那就是递归情况当问题足...
分类:
编程语言 时间:
2014-10-14 19:40:09
阅读次数:
165
1:合并排序 合并排序算法使用分治策略实现对n个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最后总将排好序的子集合合并成所要求的排好序的集合。算法描述如下:void MergeSort(Typr a[],int left,int right....
分类:
其他好文 时间:
2014-09-16 12:15:50
阅读次数:
163
在某些情况下,需要处理很大的整数,它无法在计算机中精确的表述和处理。若要精确的表示大整数,就必须使用软件的方法来实现大整数的运算。最常用的解决大整数运算的方法是使用一个二重循环,其算法时间复杂度为O(m*n)(其中m,n分别为两个大整数的长度);而选用分治方法则可..
分类:
其他好文 时间:
2014-09-15 03:23:48
阅读次数:
280
这个问题是算法导论的一个示例,为了讲解分治。 1 //算法导论中的分治策略版本 2 3 4 #include 5 using namespace std; 6 int maxCrossSum(int a[], int begin, int mid, int end) 7 { 8 int ...
分类:
其他好文 时间:
2014-08-06 01:48:10
阅读次数:
195