(MIT6.006) lecture11 数值-I

UTF8gbsn

本讲其实主要是在讲数值部分.所以内容偏理论也比较少.

卡塔兰数(Catalan Numbers)

关于这个Catalan numbers的直接定义我们先给出来.
然后再来看看它在实际生活中的一些例子.

C 0 = 1 C n + 1 = ∑ k = 0 n C k C n − k , n ⩾ 0 \left. \begin{aligned} C_0&=1\\ C_{n+1}&=\sum_{k=0}^{n}C_kC_{n-k}, n\geqslant 0 \end{aligned} \right. C0Cn+1=1=k=0nCkCnk,n0

这个数列的枚举如下.

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900,
2674440, 9694845, 35357670, 129644790, 477638700, 1767263190,
6564120420, 24466267020, 91482563640, 343059613650, 1289904147324,
4861946401452, 18367353072152, 69533550916004, 263747951750360,
1002242216651368

我们来看几个例子.

  • 出栈次序问题:一个栈(无穷大)的进栈序列为1,2,3,…n,有多少个不同的出栈序列?

  • 找零钱(找一半):
    有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?

  • 三角网格 :
    形如这样的直角三角形网格,从左上角开始,只能向右走和向下走,问总共有多少种走法?

  • 括号排列: 矩阵连乘:
    P = a 0 ⋅ a 1 ⋅ a 2 ⋯ a n P=a_0\cdot a_1\cdot a_2\cdots a_n P=a0a1a2an,共有(n+1)项,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?或者说:有n对括号,可以并列或嵌套排列,共有多少种情况?

  • 球盒问题:
    球分两种颜色,黑色和白色分别各有n只,盒子数量和球的个数相同,每个盒子里面只能放一只球,并且必须满足如下限制,即每一个白球必须和一只黑球配对(白球在黑球前,允许嵌套)。

    例.用0表示白猫,1表示黑猫,则:

    0011,010101,001011合法。

    1100,101010,010101不合法。

  • 最适合理解的模型:
    n个0和n个1组成一个2n位的2进制数,要求从左到右扫描时,1的累计数始终都小于等于0的累计数,求满足条件的数有多少?

  • 类似题目

    • (1).将多边行划分为三角形问题。将一个凸多边形区域分成三角形区域的方法数?

    • (2).有N个节点的二叉树共有多少种情形?

    • (3).一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

    • (4).在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

上面的例子来自于百度百科.

牛顿法

牛顿法是一个求根的方法. 我们先来看看迭代公式.

x i + 1 = x i − f ( x i ) f ′ ( x i ) x_{i+1}=x_{i}-\frac{f\left(x_{i}\right)}{f^{\prime}\left(x_{i}\right)} xi+1=xif(xi)f(xi)

在这里插入图片描述

乘法的复杂度

朴素的两个n位乘法的复杂度为 θ ( n 2 ) \theta(n^2) θ(n2), 即便采用下面的方法.

x = x 1 ⋅ r n / 2 + x 0 x 1 =  high half  y = y 1 ⋅ r n / 2 + y 0 x 0 =  low half  0 ≤ x 0 , x 1 < r n / 2 0 ≤ y 0 , y 1 < r n / 2 \begin{aligned} x &=x_{1} \cdot r^{n / 2}+x_{0} \quad x_{1}=\text { high half } \\ y &=y_{1} \cdot r^{n / 2}+y_{0} \quad x_{0}=\text { low half } \\ 0 & \leq x_{0}, x_{1}<r^{n / 2} \\ 0 & \leq y_{0}, y_{1}<r^{n / 2} \end{aligned} xy00=x1rn/2+x0x1= high half =y1rn/2+y0x0= low half x0,x1<rn/2y0,y1<rn/2

z = x ⋅ y = x 1 y 1 ⋅ r n + ( x 0 ⋅ y 1 + x 1 ⋅ y 0 ) r n / 2 + x 0 ⋅ y 0 z=x \cdot y=x_{1} y_{1} \cdot r^{n}+\left(x_{0} \cdot y_{1}+x_{1} \cdot y_{0}\right) r^{n / 2}+x_{0} \cdot y_{0} z=xy=x1y1rn+(x0y1+x1y0)rn/2+x0y0

时间复杂度也是 θ ( n 2 ) \theta(n^2) θ(n2)

更快的乘法

Karatsuba’s Method:

z 0 = x 0 ⋅ y 0 z 2 = x 1 ⋅ y 1 z 1 = ( x 0 + x 1 ) ⋅ ( y 0 + y 1 ) − z 0 − z 2 = x 0 y 1 + x 1 y 0 z = z 2 ⋅ r n + z 1 ⋅ r n / 2 + z 0 \begin{aligned} z_{0} &=x_{0} \cdot y_{0} \\ z_{2} &=x_{1} \cdot y_{1} \\ z_{1} &=\left(x_{0}+x_{1}\right) \cdot\left(y_{0}+y_{1}\right)-z_{0}-z_{2} \\ &=x_{0} y_{1}+x_{1} y_{0} \\ z &=z_{2} \cdot r^{n}+z_{1} \cdot r^{n / 2}+z_{0} \end{aligned} z0z2z1z=x0y0=x1y1=(x0+x1)(y0+y1)z0z2=x0y1+x1y0=z2rn+z1rn/2+z0

这个时间复杂度为:

T ( n ) = 3 T ( n / 2 ) + θ ( n ) = θ ( n l o g 2 3 ) = θ ( n 1.5849625 ⋯ ) T(n)=3T(n/2)+\theta(n)=\theta(n^{log_2 3})=\theta(n^{1.5849625\cdots}) T(n)=3T(n/2)+θ(n)=θ(nlog23)=θ(n1.5849625)

还有更快的算法么? 请自行搜索 Integer multiplication in time O ( n l o g n ) O(n log n) O(nlogn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值