首页 > 其他 > 详细

2020/1/17课堂笔记——分治

时间:2020-01-17 13:08:01      阅读:99      评论:0      收藏:0      [点我收藏+]

标签(空格分隔): 课堂笔记


采用了分治思想的例子:快速排序,归并排序。

归并排序:

void mergesort(int l,int r)
{
    if(l==r)return ;
    int mid = l+r>>1;
    mergesort(l,mid);
    mergesort(mid+1,r);
    int i = l, j = mid + 1, tot = l-1;
    while(i<=mid&&j<=r)
    {
        if(j==r||a[i]<=a[j]) 
            tmp[++tot] = a[i++];
        else
            tmp[++tot] = a[j++];
        for(int i = 1; i <= r; i++){
            a[i] = tmp[i];
        }
    }
}

逆序对

头疼掉线了,之后补。

快速幂

给你A,B,C,求A的B次方模C的余数

A,C<=10^9,B<=10^18

[原题模板题][1]

矩阵乘法快速幂

听不懂
[1]: https://www.luogu.com.cn/problem/P1226

棋盘覆盖

相传在一个国家,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子的形状有所规定,只能有四种选择(如下所示):
11 11 10 01
10 01 11 11
并且每一方格只能用一层地毯,迷宫的大小为(2^K)*(2^K)的方形。
请你给出一种方案
分而治之
递归进行,将大块分成四个小块,公主必然在四个之中某一个,对于剩下的三个,铺一块能遮住三个各一块,将遮住的想象成公主,继续向下递归求解。
是很巧妙的求法。
晚上老师会补充代码(看他咕不咕)

第k小元素

给你一个长度为N的序列,要求你求出其中的第k小元素
1<=K<=N<=2000000
※不可以直接排序再找第k小,这道题只允许O(N)算法
1、对快速排序进行修改
2、好像有个stl的函数
引自某大佬:在c++的stl库中,提供了nth_element这样一个函数
它的用法是nth_element(a+l,a+k,a+r)
这样它会使a这个数组中区间[l,r)内的第k小的元素处在第k个位置上(相对位置)
但是它并不保证其他元素有序。
stl万岁!

2020/1/17课堂笔记——分治

原文:https://www.cnblogs.com/qmings/p/12204980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!