![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
bear-bear11
软件工程的学生一枚
展开
-
归并排序 (分治)
分治的基本概念 把一个任务,分成形式和原任务相同,但规模更小的几个部分任务(通常是两个部分),分别完成,或只需要选一部完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。 分治的典型应用: 归并排序 数组排序任务可以如下完成: 1) 把前一半排序 2) 把后一半排序 3) 把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。 #include原创 2018-02-02 13:18:03 · 159 阅读 · 0 评论 -
快速排序 (分治)
void Swap(int &a,int &b) //位运算交换两数 { if(a!=b) { a^=b; //a=(a^b) b^=a; //b=b^a=b^(a^b)=0^a=a a^=b; //a=a^b=(a^b)^a=0^b=b } } void QuickSort(int a[],int s,int e)原创 2018-02-04 22:12:50 · 162 阅读 · 0 评论 -
求排列的逆序数(分治)
一个排列含有逆序的个数称为这个排列的逆序数。例如排列263451含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆序数就是8。 例题: 求排列的逆序数 笨办法: O(n2) 分治O( nlogn) : 1) 将数组分成两半,分别求出左半边的逆序数和右半边的逆序数 2) 再算有多少逆序是由左半边取一个数和右半边原创 2018-02-06 20:11:17 · 2693 阅读 · 0 评论 -
快速幂 (分治)
int Pow(int a,int b) {//快速求a^b,复杂度log(b) if(b==0) return 1; if(b&1) //b是奇数 return a*Pow(a,b-1); else { int t=Pow(a,b/2); return t*t; } }用位运算优化 int原创 2018-02-06 20:54:15 · 345 阅读 · 0 评论 -
NYOJ 45( 分治,大数)
试题链接分治的方法:http://blog.csdn.net/acm_JL/article/details/50938164根据分治的思想可以推导出递推式:f(k)=4*f(k-1)+1,且f(1)=1;可知需要用到大数乘法和加法。#include <iostream> #include <cstring> using namespace std; int main() ...原创 2018-03-17 09:39:09 · 194 阅读 · 0 评论