快速排序模板秦九昭算法模板深度优先搜索DFS广度优先搜索BFS图的遍历逆元中国剩余定理斯特林公式

Posted ACMfans Club

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序模板秦九昭算法模板深度优先搜索DFS广度优先搜索BFS图的遍历逆元中国剩余定理斯特林公式相关的知识,希望对你有一定的参考价值。

快速排序【模板】:

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

快速排序是基于二分思想、递归思想和分治思想而提出来的算法,排序的过程是:

1.选基准数(一般情况下选择第一个数即可)

2.把大于基准数的数放在基准数的右边,小于基准数的数放在基准数的左边(具体实现见代码)

3.快速排序实质上就是每一个基准数归位的过程

很有用的URL(漫画:什么是快速排序?(完整版)):http://www.sohu.com/a/246785807_684445


秦九昭算法【模板】

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

【tip】计算程序耗时工具

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式


深度优先搜索(Depth First Search,DFS)

理解深度优先搜索的关键在于解决“当下该如何做”。至于“下一步如何做”则与“当下该如何做”是一样的。DFS的基本模型:

void dfs( int step )

{

    //判断边界

    //尝试每一种可能for(i=1;i<=n;i++)

    {

       //继续下一步dfs(dtep+1);

    }

    return ;

}

【例程1:走迷宫】

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

上面的dfs函数演示了深度优先搜索算法模型的一般结构,程序定义四个方向向量next二维数组,运用for循环遍历接下来四个有可能走到的坐标,如果坐标在迷宫之外,那么接着判断下一个坐标,直到结束位置;如果在迷宫之内,那么判断是否已经走过(book二维数组标记),是否存在路障,如果都没有,递归使用dfs进入下一步搜索(体现深度),为输出,定义ans数组来标记走过的每一个坐标,如果顺利到达迷宫出口,则把整个ans输出。


广度优先搜索(Breadth First Search,BFS)

BFS,就是从一个节点开始搜索,搜索完毕后,再从它四周的未访问过的节点开始搜索,重复之前的操作.它就像水波扩散一样.

【例程2:走迷宫改编(输出最短路径步数)】

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式


图的遍历

上面提到的BFS和DFS是基于图的遍历思想:

               深度优先遍历

首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点;当没有未访问过的顶点时,则返回到上一顶点,继续试探访问别的顶点,直到所有顶点都被访问过。

无向图的邻接矩阵表示法深度遍历:

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

                广度优先遍历

广度优先遍历主要思想是:首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问他们相邻的未被访问过的顶点,直到所有顶点都被访问过。

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式


数论之 逆元

一般来说,存在:

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

对于除法,取模的分配律不成立,需要用逆元将其转变为乘法,再使用分配律。若ab≡1 (mod m),则称a与b在模m的情况下互为逆元。记b=a1,所以b又叫a的数论倒数。

求逆元:

1.费马小定理:(只适用于模数为质数的情况)               

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

    根据逆元的定义,a mod p 的逆元就是ap-2 ,于是:

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式


2.扩展欧几里得:

x×inv(x)≡1(modp) 其中 x,px,p 都是已知的。这就是一个未知数为 inv(x)inv(x) , 方程右侧的 c=1c=1 的同余方程 , 求 inv(x)inv(x) 的值, 解出此同余方程即可。

3.递推法:(只适用于模数为质数的情况,要解模的逆元的数 , 数量很多,但是连续)

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

4.阶乘逆元法:(只适用于模数为质数的情况)

 

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式


【例程3:乘法逆元模板】

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式


数论之 中国剩余定理初步(From Baidu pedia )

  同余定理:给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。

  孙子定理是中国古代求解一次同余式组的方法。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文数学文献中也会将中国剩余定理称为孙子定理。

求解同余方程组:

快速排序【模板】、秦九昭算法【模板】、深度优先搜索DFS、广度优先搜索BFS、图的遍历、逆元、中国剩余定理、斯特林公式

m1~mk两两互质,求最小解。



组合数学之 stirling公式

斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。


以上是关于快速排序模板秦九昭算法模板深度优先搜索DFS广度优先搜索BFS图的遍历逆元中国剩余定理斯特林公式的主要内容,如果未能解决你的问题,请参考以下文章

深度优先dfs与广度bfs优先搜索总结+例题

算法|图的遍历-深度优先搜索(DFS)

应对笔试手写代码,如何准备深度优先算法 & 广度优先算法?

应对笔试手写代码,如何准备深度优先算法 & 广度优先算法?

图的遍历——DFS和BFS模板(一般的图)

数据结构与算法图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )