UTF8gbsn
本講其實主要是在講數值部分.所以內容偏理論也比較少.
卡塔蘭數(Catalan Numbers)
關於這個Catalan numbers的直接定義我們先給出來.
然後再來看看它在實際生活中的一些例子.
C0Cn+1=1=k=0∑nCkCn−k,n⩾0
這個數列的枚舉如下.
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=a0⋅a1⋅a2⋯an,共有(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=xi−f′(xi)f(xi)
乘法的複雜度
樸素的兩個n位乘法的複雜度爲θ(n2), 即便採用下面的方法.
xy00=x1⋅rn/2+x0x1= high half =y1⋅rn/2+y0x0= low half ≤x0,x1<rn/2≤y0,y1<rn/2
z=x⋅y=x1y1⋅rn+(x0⋅y1+x1⋅y0)rn/2+x0⋅y0
時間複雜度也是θ(n2)
更快的乘法
Karatsuba’s Method:
z0z2z1z=x0⋅y0=x1⋅y1=(x0+x1)⋅(y0+y1)−z0−z2=x0y1+x1y0=z2⋅rn+z1⋅rn/2+z0
這個時間複雜度爲:
T(n)=3T(n/2)+θ(n)=θ(nlog23)=θ(n1.5849625⋯)
還有更快的算法麼? 請自行搜索 Integer multiplication in time O(nlogn)