(MIT6.006) lecture11 數值-I

UTF8gbsn

本講其實主要是在講數值部分.所以內容偏理論也比較少.

卡塔蘭數(Catalan Numbers)

關於這個Catalan numbers的直接定義我們先給出來.
然後再來看看它在實際生活中的一些例子.

C0=1Cn+1=k=0nCkCnk,n0\left. \begin{aligned} C_0&=1\\ C_{n+1}&=\sum_{k=0}^{n}C_kC_{n-k}, n\geqslant 0 \end{aligned} \right.

這個數列的枚舉如下.

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=a0a1a2anP=a_0\cdot a_1\cdot a_2\cdots a_n,共有(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條線段不相交的方法數?

上面的例子來自於百度百科.

牛頓法

牛頓法是一個求根的方法. 我們先來看看迭代公式.

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

在這裏插入圖片描述

乘法的複雜度

樸素的兩個n位乘法的複雜度爲θ(n2)\theta(n^2), 即便採用下面的方法.

x=x1rn/2+x0x1= high half y=y1rn/2+y0x0= low half 0x0,x1<rn/20y0,y1<rn/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}

z=xy=x1y1rn+(x0y1+x1y0)rn/2+x0y0z=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}

時間複雜度也是θ(n2)\theta(n^2)

更快的乘法

Karatsuba’s Method:

z0=x0y0z2=x1y1z1=(x0+x1)(y0+y1)z0z2=x0y1+x1y0z=z2rn+z1rn/2+z0\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}

這個時間複雜度爲:

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

還有更快的算法麼? 請自行搜索 Integer multiplication in time O(nlogn)O(n log n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章