分治算法
icehomegre
我的博客更新啦!详见文章【博客更新】
展开
-
【备忘录】归并排序
没错这是一个备忘录 归并排序思路: 分治,将两个有序的序列合并成一个有序的序列 例如: |1 7 4 2 5 6| 拆分成:|1 7 4|2 5 6| 拆分成:|1|7 4|2|5 6| 第一轮排序:|1|4 7|2|5 6| 第二轮排序:|1 4 7|2 5 6| 第三轮排序:|1 2 4 5 6 7| 形象地说,这种排序会把一个序列均分成两个序列, 然后让这两个序列继续递归,直到区间内只有一个数。 接着返回途中顺便比较排序。 因为两个序列是有序的有序的有序的,所以一次比较时间为O(n)O(n)O(n原创 2021-01-17 18:40:28 · 150 阅读 · 0 评论 -
【备忘录】快速幂
这个算法是针对求a的b次方%p的加速算法。 当我们要求a的b次方时,一般情况会使用pow或者自己循环一个一个乘,但是当b特别大,像是194532681等的大数字,并且需要对p取模时,第一种会爆,第二种会超时。这怎么办呢? 小小铺垫——搞式子 我们先看几个例子: 22×23=22+3 45×47=412 我们发现,当ab1与bb2相乘时,答案就为 ab1+b2。 接着,我们考虑怎么优化循环乘的算...原创 2020-04-26 15:26:29 · 146 阅读 · 0 评论 -
【分治算法】快速排序(c++)
这是主要代码(函数名不怎么好听) 用法(假如有n个数):qw(1,n) void qw(int l,int r) { int i=l,j=r; int mid=a[rand()%(r-l)+l]; while(i<=j) { while(a[i]<mid/*a[i]>mid*/)i++; while(a[j]>mid/*a[j]<mid*/)j--; ...原创 2019-08-13 18:56:23 · 528 阅读 · 0 评论