随笔分类 -  分治法

摘要:基本思想:在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较大的记录一次就能交换到后面单元,关键字较小的记录一次就能交换到前面单元,记录每次移动的距离较大,因而总的比较和移动次数较少。 在排序之前,先设定一个哨兵值,一般选择a[0],将其值赋给一个临时变量:x=a[0];然后开始左右移动下 阅读全文
posted @ 2016-02-05 20:33 Gladitor 阅读(387) 评论(0) 推荐(0)
摘要:基本思想:将待排序元素分成大小大致相同的2个子集合, 分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。 #include <iostream> using namespace std; int a[100],b[100]; /*参数的传递是将实参的值赋给形参。 *然而对于 阅读全文
posted @ 2016-02-05 19:32 Gladitor 阅读(205) 评论(0) 推荐(0)
摘要:棋盘覆盖问题 问题描述: 在一个2^k×2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不同的特殊棋盘. 下图–图(1)中的特殊棋盘是当k=3时16个特殊棋盘中的一个: 阅读全文
posted @ 2016-02-03 23:09 Gladitor 阅读(817) 评论(0) 推荐(0)
摘要:#include <iostream> #include <algorithm> using namespace std; bool binarySearch(int a[],int x,int n) { int left = 0,right = n-1; while(left <= right) 阅读全文
posted @ 2016-02-03 21:06 Gladitor 阅读(203) 评论(0) 推荐(0)
摘要:将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1 阅读全文
posted @ 2016-02-03 20:47 Gladitor 阅读(497) 评论(0) 推荐(0)
摘要:算法思想:假定有一个数组,int[] = {1,2,3,4,5}; 1.先看数组的最后两个元素:{4,5},它的全排列即是45,54. 2.再看数组的最后三个元素:{3,4,5},它的全排列即是345,354,435,453,534,543. 3.N个元素S = {r1,r2,r3,...,r(n- 阅读全文
posted @ 2016-02-03 18:00 Gladitor 阅读(1732) 评论(0) 推荐(0)
摘要:输入: 数组A[i,…,j] 输出:数组A[i,…,j]中的max和min 1. If j-i+1 =1 Then 输出A[i],A[i],算法结束 2. If j-i+1 =2 Then 3. If A[i]< A[j] Then输出A[i],A[j];算法结束 4. k<--(j-i+1)/2 阅读全文
posted @ 2016-01-31 17:19 Gladitor 阅读(534) 评论(0) 推荐(0)