好久沒寫博客了,這個系列就來聊聊數學,我們知道數學是一種工具,更是一種思想,在我們的日常生活和工作中都有廣泛的應用。
比如算法中有一種叫做“遞推思想”,轉化到數學上來說就是“數列”,而我們苦逼的coding,復雜度搞死也只能控制在O(N),但有沒有
想過對這種問題可以一針見血,一刀斃命,這就需要用到“數學”上的知識。猴子吃桃 問題就是一個活生生的例子,評論上給出了很好的解決方
案,學習數學就應該能讓它解決點實際上的問題,下面來推導一下。
為了方便,將遞推公式寫成:
an=2an-1+2 ①
已知首項:a1=1
將①變形得
an+2=2(an-1+2) ②
由②可推導
an-1+2=2(an-2+2) ③
an-2+2=2(an-3+2) ④
...
a3+2=2(a2+2) ...
a2+2=2(a1+2) ...
然后我們將這N-1項相乘,化簡得
an+2=2n-1(a1+2) ⑤
又因為 a1=1 則通項公式為
an=2n-1*3-2 ⑥
根據”遞推公式“我們求出了”通項公式“,現在我們可以秒殺任何一天的桃子數量,現在又來問題了,如何求出前N天的桃子總和,在
數列中對應的就是求前n項和的問題,在得知an的情況下,求Sn也是秒殺效果。
⑥式是典型的{nan+bn}模型,針對這個模型,我們拆分成{nan}+{bn},然后分別計算它們的前n項和,最后合並。
<1> 3*2n-1 的前n項和為: Sn=3*20+3*21+3*22+3*23+...+ 3*2n-1 ⑦
變形⑦可知 2Sn=3*21+3*22+3*23+...+3*2n ⑧
⑦-⑧得(錯位相減)
-Sn=3*20-3*2n
=> Sn=3*2n-3
<2> 2的前n項和為: => Tn=2n
綜合兩部分結果可知:Sm=3*2m-3-2m。
最后我們推導出了 猴子吃桃 問題的前n項和,當你苦逼coding的時候,人家早已推導出了,而且復雜度宇宙第一...
上面的場景只是想讓大家知道數列對我們來說非常重要,后面我會拿算法上的題目用數學來KO,讓你知道不懂數學簡直就弱爆了,
作為數列專題篇,基礎知識必不可少,同樣我也可以鞏固和復習,嘿嘿。
在數列中:通項公式,遞推公式,前n項和始終貫穿於數列學習的始終,首篇要了解下面幾點:
①: 能夠目測簡單數列的通項公式。
比如:1,4,9,16,.....
1,0,1,0....
②: 能夠根據遞推公式求數列的通項公式,比如(猴子吃桃問題)
③: 能夠根據數列的前n項和求數列的通項公式。
an= s1 (n=1)
sn-sn-1 (n>=2)
④: 能夠求數列的前n項的和Sn
常用方法:倒序相加,錯位相減, 分項相消法(有技巧),倍數法。
⑤: 能夠理解{an+bn},{anbn}模型的前N項求和問題。