• 算法中的数学


    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、随机化算法:

    理解概念原理。。

  • 相关阅读:
    MongoDB优化之一:常见优化方法
    Spark Streaming之一:整体介绍
    Java中实现MongoDB自增主键ID
    RDD之一:总体介绍
    对一致性Hash算法,Java代码实现的深入研究
    MongoDB 创建基础索引、组合索引、唯一索引以及优化
    mongo-查询
    MongoTemplate聚合操作
    RESTLET开发实例(一)基于JAX-RS的REST服务
    Hashtable的实现原理
  • 原文地址:https://www.cnblogs.com/darklights/p/5347954.html
Copyright © 2020-2023  润新知