分治
bear-bear11
软件工程的学生一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序 (分治)
分治的基本概念把一个任务,分成形式和原任务相同,但规模更小的几个部分任务(通常是两个部分),分别完成,或只需要选一部完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。 分治的典型应用: 归并排序数组排序任务可以如下完成:1) 把前一半排序2) 把后一半排序3) 把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。 #include原创 2018-02-02 13:18:03 · 227 阅读 · 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 · 225 阅读 · 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 · 2894 阅读 · 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 · 419 阅读 · 0 评论 -
NYOJ 45( 分治,大数)
试题链接分治的方法:http://blog.youkuaiyun.com/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 · 253 阅读 · 0 评论
分享