算法中的数学

Posted codeg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法中的数学相关的知识,希望对你有一定的参考价值。

A、数学:

1、高斯消元法:

概念:数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。不过,如果有过百万条等式时,这个算法会十分省时。一些极大的方程组通常会用迭代法以及花式消元来解决。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。高斯消元法可以用在电脑中来解决数千条等式及未知数。亦有一些方法特地用来解决一些有特别排列的系数的方程组。

模板:

kunagbin:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html

2、概率问题:熟知原理,明确过程即可。

3、GCD问题(最大公约数):

主要使用辗转相除法,辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。

这就是辗转相除法的原理。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29),
∴ (319,58)=(58,29);
∵ 58÷29=2(余0),
∴ (58,29)= 29;
∴ (319,377)=29.
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。
代码:
 1 #include<stdio.h>
 2 
 3 int GCD(int a,int b)
 4 {
 5     return a%b?GCD(b,a%b):b;
 6 }
 7 
 8 int main()
 9 {
10     int x,y;
11     scanf("%d%d",&x,&y);
12     printf("%d",GCD(x,y));
13     return 0;
14 }

B、组合数学:

1、加法原理:类类独立;乘法原理:步步相关。

2、排列组合:http://www.cnblogs.com/PegasusWang/archive/2013/01/22/2872312.html

3、递推关系:http://www.cnblogs.com/skyme/p/3541863.html

4、MoBius反演:百度百科

5、偏序关系:离散数学知识。

6、容斥原理:百度百科

7、抽屉原理(鸽巢原理):百度百科

8、置换群:百度百科

9、Polya定理:http://blog.csdn.net/xuzengqiang/article/details/7476671

当前对自己来说有些难,等把《组合数学》看了再来补充。

C、数论:

1、素数与整除问题:熟知概念即可。

2、进制位:掌握进制间的转换

3、同余模运算: 在这里我们介绍以下三个公式:

                      (a+b)mod n =  ((a mod n)+ (b mod n))mod n;

                      (a-b) mod n = ((a mod n )- (b mod n)+n)mod n;

                      ab mod n = (a mod n) (b mod n) mod n

                      注意,在减法中,由于a mod n 可能小于b mod n,需要在结果上加上n,而在乘法中,需要注意a mod n 和 b mod n相乘是否会溢出,因此这里要注意用long 型保存中间结果。

D、博弈论:

1、极大极小过程:主要用在棋类的使用上,具体可参考以下博客:

极大极小值算法:http://blog.csdn.net/weirenren_027/article/details/10282719

极大极小搜索方法:http://blog.csdn.net/kingkong1024/article/details/7639401

2、Nim问题:

      博弈论经典问题,Nim游戏是一个典型的组合游戏问题,很多游戏问题都可以规约到Nim游戏问题。Nim游戏问题是一个ICG(Impartial Combinatorial Games)问题;

ICG问题的特征是:

       1.两个人参与,交替走棋;

       2.可能的走法在一个有限的集合里选取;

       3.游戏局面无后效性,未来与过去无关;

       4.如果某选手无法走动,则判负;

Nim的理论

      游戏状态只分两种:当前先手必胜,当前先手必败;前者称为N位置,后者称为P位置;

更为严谨的定义是:

      终止状态是P位置;

      能够移动到P位置的状态时N位置;

      只能到N位置的状态时P位置;

Nim问题的解法:

      所有堆的石子数目求异或;为0则是P位置;

证明:

     1,终止状态所有位置都为0,是P位置;

     2,对于一个异或为非0的N位置是能够移动到P位置的(这个还没有想明白……(~ o ~)~zZ);

      3,异或为0的P位置只能移动到N位置,因为对其进行异或运算得到的只能是非0的;

E、随机化算法:

理解概念原理。。

以上是关于算法中的数学的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的算法复杂度

Python代码中的数学之美:用牛顿逼近法计算2的算术平方根

Python代码中的数学之美:用牛顿逼近法计算2的算术平方根

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

片段(Java) | 机试题+算法思路+考点+代码解析 2023

text 数学片段