vijos P1508 / BZOJ 1492膜拜了这么久的cdq分治,终于有机会亲自来写了。虽然这个思想很好理解,先做前一半,计算前一半对后一半的影响,再做后一半。但是由于我这个傻Ⅹ,以前既没有做过斜率优化,也没有做过维护凸包之类,花了好久时间捣鼓具体做法,而且理解思路后写起来还是有点难度的。主要...
分类:
其他好文 时间:
2014-07-02 20:26:00
阅读次数:
201
题目:最近点对(大数据)。
分析:分治法。首先,将所有点按很坐标排序;然后,利用分治求解。
1.将问题转化为两个相同大小的子区间分别求解;
2.中位点为中心,当前最小距离为半径的区间直接枚举求解;
3.求出上两中情况的最小值返回。
说明:这么经典的题目,今天第一次做。
#include
#include
#in...
分类:
其他好文 时间:
2014-07-02 09:41:14
阅读次数:
202
题目,求一个连续的数组,最大连续和。
(一)O(n3)算法:
利用穷举法的思想,这种方法的效率最差。
代码如下:
#include
#include
#include
#include
using namespace std;
const int MAXN = 1000;
int A[MAXN], n;
int maxsum(int *A, int n) {
int beat...
分类:
其他好文 时间:
2014-07-02 09:15:50
阅读次数:
349
基本枚举、贪心、递归、分治、递推、模拟STL(pair、vector、set、map、queue、string、algorithm)构造、位运算、常数优化数据结构队列、堆、栈、链表排序(插入、冒泡、快速、归并、堆、桶、基数)二分查找、散列表并查集、哈夫曼树排序二叉树、左偏树、平衡树(Splay/Tr...
分类:
其他好文 时间:
2014-07-01 19:09:02
阅读次数:
193
首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2).是一种不稳定的排序方法。基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的非常清楚了,分治法+挖坑法,我就不多说了。就是以某个数为参照,使得左边的都小于他,右边的数都大于他。然后对他的左右两个区间采取同样的方法进行递归...
分类:
其他好文 时间:
2014-07-01 11:07:47
阅读次数:
254
对于 《数据结构与算法分析——C语言描述》 一书第
20 页所描述的算法 3,相信会有很多人表示不怎么理解,下面我由具体问题的求解过程出发,谈谈我自己的理解:
首先,什么是分治法呢?所谓 分治法,就是 将一个问题的求解过程分解为两个大小相等的子问题进行求解,如果分解后的子问题本身也可以分解的话,则将这个分解的过程进行下去,直至最后得到的子问题不能再分解为止,最后将子问题的解逐步合并并可能...
分类:
其他好文 时间:
2014-07-01 11:03:52
阅读次数:
169
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
步骤为:
1,从数列中挑出一个元素,称为 "基准",
2,重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作。
3,递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
4,递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递...
分类:
编程语言 时间:
2014-06-30 08:19:12
阅读次数:
203
题目链接:http://poj.org/problem?id=2299
题目大意:求出排序过程中的最小交换次数
利用归并排序的分治算法解决此题。
代码:
#include
#include
#include
#define N 500001
using namespace std;
int a[N];
int temp[N];
long long ans;
void merge(in...
分类:
其他好文 时间:
2014-06-30 08:18:11
阅读次数:
230
问题:研究表明,在某些应用下,1∶35的比例就会使某些分类方法无效,甚至1∶10的比例也会使某些分类方法无效。
(1)少数类所包含的信息就会很有限,从而难以确定少数类数据的分布,即在其内部难以发现规律,进而造成少数类的识别率低
(2)数据碎片。很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片问题,这样只能在各个独立的子空间中寻找数据的规律,对于少数类来说每个子空间中包含了很少的数据信息...
分类:
其他好文 时间:
2014-06-29 23:01:55
阅读次数:
251
归并排序(Merge Sort)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
归并排序的具体做法:
把原序列不断地递归等分,直至每等份只有一个元素,此时每等份都是有序的。
相邻等份合并,不断合并,直至合并完全。
二路归并
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序最常用的是二路归并,即把两个小的有序的序列和并成一个大的有序序列:合二为一...
分类:
其他好文 时间:
2014-06-27 10:16:41
阅读次数:
315