zoukankan      html  css  js  c++  java
  • 计数问题学习笔记

    计数问题学习笔记

    组合计数

    插板法: 略

    阶乘幂:

    上升阶乘幂:

    [(x)^{(n)} = x(x+1)(x+2)cdots(x+n-1) = frac{(x+n-1)!}{(x-1)!} ]

    下降阶乘幂:

    ((x)_{(n)})

    卡特兰数:

    定义式

    [h_n = displaystylesum^{n-1}_{k=0}h_kh_{n-1-k} ]

    通项式

    [h_n = binom{2n}{n}- binom{2n}{n-1} = frac{ binom{2n}{n}}{n+1} ]

    应用: 括号序列数量, 方格行走数, 凸多边形划分数, 二叉树数量

    通项证明:

    2n步选n步向斜上走方案数为( binom{2n}{n})

    如果走到负区域, 则一定与2n步选n-1步斜向上走的方案数相同

    在一条路径第一次触到直线y=-1时, 将其以后的路径关于y=-1对称

    走2n步最终到达点(2n, -2)

    每一条到达点(2n, -2)的路径都可以如此转化

    第一类斯特林数:

    $ S_u(n, m)$表示n个不同元素构成恰好m个圆排列的方案数

    (S_u(n,m) = S_u(n-1,m-1) + (n-1) * S_u(n-1,m))

    有符号: (S_s(n, m) = (-1)^{n+m}S_u(n,m))

    有符号的生成函数: ((x)_{(n)}) (x的n次下降幂)

    第二类斯特林数:

    (S(n,m))表示n个不同元素拆分成m个非空集合方案数

    [S(n,m) = S(n-1,m-1) + m * S(n-1, m) ]

    生成函数

    [S(n,m) = frac{1}{m!}sum(-1)^k binom{m}{k}(m-k)^n ]

    贝尔数为第二类斯特林数之和

    拆分数:

    (f_n)表示大小为n的正整数拆分成若干无序的正整数之和的方案数

    dp求解

    方案一:

    f[i][j]表示拆分成若干不超过j的方案数

    f[i][j] = f[i-j][j] +f[i][j-1]

    方案二:

    g[i][j]表示拆分j个数字的方案数

    g[i][j] = g[i-1][j] + g[i-j][j]

    优化:

    易知任意一个复杂度都是(n^2)

    结合两者, 复杂度为(nsqrt{n})

    首先用方案一跑出所有用不超过(sqrt{n})数字大小拼出1~n的方案数

    复杂度(nsqrt{n}) 存疑

    生成函数

    基础闭形式:

    (sum_{n ge 0} x^n=frac{1}{1-x})

    (sum_{n ge 1} x^n=frac{x}{1-x})

    (sum_{n ge 1} x^n=x*(sum_{n ge 0} x^n))

    (sum_{n ge 1} n x^n=)?

    ((sum_{n ge 0} x^n)'=(frac{1}{1-x})')

    (sum_{n ge 0} (n+1)x^n=frac{1}{(1-x)^2})

    (sum_{n ge 0} (n+1)x^{n+1}=frac{x}{(1-x)^2})

    ((sum_{n ge 0} x^n)*(sum_{n ge 0} x^n)=sum_{n ge 0} (n+1)x^n=frac{1}{(1-x)^2})

    (sum_{n ge 0} frac{1}{n!}x^n=e^x)

    • 加法意义: 合并

    • 乘法意义:拼接

    例: 求斐波那契数列的通项公式

    因为F(x) = F(x-1) + F(x-2)

    [~~~~~~F(0)~~~F(1)~~~~F(2)~~~~F(3)~~~~F(4)\~~~~~~~~~~~~~~~~~ F(0)~~~~F(1)~~~~F(2)~~~~F(3)\​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~F(0)~~~~F(1)~~~~F(2) ]

    发现最上面的生成函数由下面两个推出

    所以(F(x) = x cdot F(x-1) + x^2 cdot F(x-2)) + 1

    解得F(x)的闭形式为(frac{1}{1-x-x^2})

    那么如何求通项公式呢?

    前置:

    (sum_{n ge 0} x^n=frac{1}{1-x})

    (sum_{n ge 0} (kx)^n=frac{1}{1-kx}) (将x变为kx即可)

    (sum_{n ge 0} ax^n=frac{a}{1-x})

    发现如果把它化成类似(frac{a}{1-kx})的形式是再好不过了

    所以将(1-x-x^2)因式分解, 再进行裂项

    (t_1, t_2)为其的两根

    最后化成(frac{a}{1-t_1x} - frac{b}{1-t_2x})的形式

    (A_n = a cdot t_1^n - b * t_2^n)

    好像不是很难的鸭子

    指数级生成函数:

    处理有标号问题时, 通常使用指数级生成函数

    生成函数: (displaystylesum _{nge0}frac{A_n}{n!}x^n)

  • 相关阅读:
    MJExtension使用
    使用html5结构化元素
    我的第一个html页面
    编写delegate(明天补充)
    iOS 获取系统相册数据(不是调系统的相册)
    CocoaLumberjack+XcodeColor(输出带有颜色的日志)在安装过程中遇到的问题
    iOS基础-UIKit框架-高级视图-UIPickerView-实例1:点菜(列与列之间无关系)
    iOS基础-UIKit框架-基础视图-UIScrollView
    OC与iOS开发
    Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法---1-2章
  • 原文地址:https://www.cnblogs.com/Hs-black/p/11906353.html
Copyright © 2011-2022 走看看