
分治
桃三岁
这个作者很懒,什么都没留下…
展开
-
算法设计——二维最接近点对问题(递归分治)
问题给定二维平面上乱序的n(n > 1)个坐标点,求相距最近的两个坐标点是哪两个点,并且输出最近距离,若答案不唯一,输出任意一组满足情况的结果。思路我们已知n个点的坐标,要求距离最近的两个点以及其之间的距离,可以通过以下划分过程划分过程:我们可选取一个点,求其左边所有点的最小距离,求其右边所有点的最小距离,还有一种情况就是跨越中间点的两个点的最小距离,由此可以划分处理为三部分。处...原创 2020-04-15 09:38:26 · 3666 阅读 · 1 评论 -
算法设计——循环赛日程表(分治)
问题有n个人参加比赛,两两进行比赛且每天只有一场,求日程表安排分析n个人可划分为2组n/2的人参赛,继续划分,当只有两个人时,直接安排即可。重点是左上角给右下角,左下角给右上角的赋值代码实现#include<stdio.h>#define N 100int a[N][N]={0};void table(int n,int k){ int i,j; if(n==...原创 2020-03-15 23:02:16 · 1180 阅读 · 2 评论 -
算法设计——归并排序(分治)
问题将一个乱序数组进行排序输出思路即将一个大数组划分为小数组进行排序后合并为大数组过程需要内存辅助代码实现#include<stdio.h>void merge(int a[],int b[],int left,int mid,int right){ int i=left,j=mid+1,k=0; while(i<=mid&&j<=rig...原创 2020-03-14 16:02:46 · 464 阅读 · 0 评论 -
算法设计——棋盘问题(分治)
问题分析当棋盘大小为1时,结束当大小为2时,可找到L骨牌覆盖当大小大于2时,我们可将棋盘分解为四个相同大小的棋盘的覆盖问题,当某个棋盘不存在特殊方格时,我们则设置特殊方格如(b)再深入处理小棋盘我们求解时,首先是设置特殊方格的覆盖,所以设置的特殊方格在某一块棋盘中处于最先覆盖,即数字最小代码实现#include<stdio.h>#include<string...原创 2020-03-14 11:16:48 · 1845 阅读 · 0 评论 -
算法设计——大整数乘法(分治)
关于这个乘法,重点就是公式的化简使得子问题的规模减小问题求X*Y的值思路将X、Y分别分为两部分即X=a10^n/2+b ,n为X的位数Y=c10^m/2+d ,m为Y的位数理想情况下m=n,那么XY=ac10^n + bd+ (ad+bc)*10^n/2(ad+bc)*10^n/2 =((a-b)(d-c)+ac+bd)*10^n/2由此推广到XY位数不相等的情况...原创 2020-03-13 12:00:29 · 1012 阅读 · 0 评论 -
算法设计——strassen矩阵乘法(分治)
问题求两个矩阵相乘的结果思路传统矩阵相乘Strassen矩阵乘法我们可以不断把规模大的矩阵缩小为一半的矩阵,由此减小了规模通过减小规模,我们成功把时间复杂度为O(n^3) 降到了O(n^log7) 即O(n^2.81)代码实现这里我们只考虑矩阵规模为2的倍数的矩阵乘法#include<stdio.h>#include<stdlib.h>#incl...原创 2020-03-13 17:12:01 · 5822 阅读 · 1 评论 -
快排
《啊哈,算法》中的方式#include<stdio.h>int a[101],n;int main(){void qart(int letf,int right);int i,j;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}qart(0,n-1);for(i=0;i<n;i++...原创 2019-08-01 23:59:18 · 202 阅读 · 0 评论