日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

斐波那契序列 集锦

發(fā)布時(shí)間:2023/12/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斐波那契序列 集锦 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[定理1] 標(biāo)準(zhǔn)Fibonacci序列(即第0項(xiàng)為0,第1項(xiàng)為1的序列)當(dāng)N大于1時(shí),一定有f(N)和f(N-1)互質(zhì)

其實(shí),結(jié)合“互質(zhì)”的定義,和一個(gè)很經(jīng)典的算法就可以輕松證明
對(duì),就是輾轉(zhuǎn)相除法
互質(zhì)的定義就是最大公約數(shù)為1

數(shù)學(xué)歸納法是很有用的證明方法,我們接下來這個(gè)定理用數(shù)學(xué)歸納法就很好證明:
[定理2]若i為奇數(shù), f(i)*f(i)=f(i-1)*f(i+1)+1,否則f(i)*f(i)=f(i-1)*f(i+1)-1
對(duì),這個(gè)定理用數(shù)學(xué)歸納法可以輕松證明,大家有興趣可以自己嘗試

[定理3] f(n)=f(i)*f(n-i-1)+f(i+1)*f(n-i)

f(n)=f(1)*f(n-2)+ f(2)*f(n-1)
??? =f(2)*f(n-3)+ f(3)*f(n-2)
??? =f(3)*f(n-4)+ f(4)*f(n-3)
看來沒有錯(cuò),證明方法就是這樣

這個(gè)公式也可以用來計(jì)算較大的fibonacci數(shù)除以某個(gè)數(shù)的余數(shù)

設(shè)i=n/2 不過,為了保證計(jì)算能延續(xù)下去 需要每次保留三個(gè)值
這樣,下一次計(jì)算就可以利用這三個(gè)值來求出兩個(gè)值,再相加就可以得到第三個(gè)值
譬如,計(jì)算出f(5),f(6),f(7),可以計(jì)算出f(11)、f(12),然后推出f(13)
就是剛才洛奇的悲鳴(364738334)所提到的矩陣方法
我們知道我們?nèi)粢唵斡?jì)算f(n),有一種方法就是先保存
a=f(0),b=f(1),然后每次設(shè):
a'=b b'=a+b

并用新的a'和b'來繼續(xù)這一運(yùn)算

如果大家熟悉利用“矩陣”這一工具的話,就知道,如果把a(bǔ)、b寫成一個(gè)向量[a,b],完成上述操作相當(dāng)于乘以矩陣
0 1
1 1
也就是說,如果我們要求第100個(gè)fibonacci數(shù),只需要將矩陣
[0,1]乘上
0 1
1 1
的一百次方,再取出第一項(xiàng)

因?yàn)槲覀冎?#xff0c;矩陣運(yùn)算滿足結(jié)合律,一次次右乘那個(gè)矩陣完全可以用乘上那個(gè)矩陣的N次方代替,更進(jìn)一步,那個(gè)矩陣的N次方就是這樣的形式:
f(n-1) f(n)
f(n) f(n+1)

而求矩陣的N次方,由于矩陣乘法滿足結(jié)合律,所以我們可以用log(N)的算法求出——這個(gè)算法大家都會(huì)么?
一個(gè)是二分,一個(gè)是基于二進(jìn)制的求冪

二分的原理:要求矩陣的N次方A(N),設(shè)i=N/2若N%2==1, 則 A(N)=A(i)*A(i)*A(1)若N%2==0, 則 A(N)=A(i)*A(i)

基于二進(jìn)制的原理:將N拆為二進(jìn)制數(shù),譬如13=1101那么 A^13= A^8 * A^4 * A^1 (這里^表示冪運(yùn)算)

也就是說,由A^1開始,自乘得到A^2,然后自乘得到A^4,如果N對(duì)應(yīng)位為1,則將這個(gè)結(jié)果乘到目標(biāo)上去

這樣的話,將所有乘法改為模乘,就可以得到一個(gè)較大Fibonacci數(shù)除以M的余數(shù)

若不用遞歸,其實(shí)類似

http://acm.pku.edu.cn/JudgeOnline/problem?id=3070
這里用的fib矩陣略有不同,是
f(n+1) f(n)
f(n) f(n-1)
但實(shí)際上可以驗(yàn)證效果是一樣的

這題是要求求F(n)的最后四位數(shù),所有乘法過程增加一個(gè)模10000的步驟即可,大家可以收藏稍候AC

關(guān)于矩陣我們告一段落,等下會(huì)回來繼續(xù)探討利用矩陣來解決復(fù)雜些的Fibonacci問題

http://acm.hdu.edu.cn/showproblem.php?pid=1568
我們來看這題,這題要求求出Fibonacci某項(xiàng)的前四位

當(dāng)然,用矩陣也可以解決這道題——只要將乘法改為乘并保留前四位

我們采用double 保留整數(shù)部分四位 這題最好還是double吧

不過顯然有更好的解法——如果我們知道Fibonacci序列的通項(xiàng)公式

F(n) = (((1+Sqrt(5))/2)^n - ((1-Sqrt(5))/2)^n)*1/Sqrt(5)

不過組合數(shù)學(xué)里也有這一公式的推導(dǎo)方法 叫做“線性齊次遞推式”

這個(gè)解法的核心是,通解是某個(gè)數(shù)的冪 將f(n)=x^n代入遞推方程,可以解出三個(gè)通解 0和 (1+sqrt(5))/2

通常把“0”稱作平凡解,那么特解就是通解的某個(gè)線性組合

再代入f(0)=0 f(1)=1,就可以得出我們剛才的公式

不過通常情況下,我們只需要記住那個(gè)公式就可以了

提醒大家,記憶公式的時(shí)候千萬別忘記了系數(shù)1/sqrt(5)

因?yàn)?1-sqrt(5))/2的絕對(duì)值小于1

所以當(dāng)i較大的時(shí)候,往往可以忽略掉這一項(xiàng)
f(i)≈((1+Sqrt(5))/2)^n/sqrt(5);

所以,剛才列舉出的HDOJ的1568,可以很簡單的30以內(nèi)直接求解,30以上采用這個(gè)公式,還是用log(N)求冪的算法求解
恩,就是公式的前半部分

http://acm.hdu.edu.cn/showproblem.php?pid=1021
http://acm.zju.edu.cn/show_problem.php?pid=2060
Fibonacci某項(xiàng)是否被3整除

[定理5] 標(biāo)準(zhǔn)Fibonacci序列對(duì)任意大于2的正整數(shù)的余數(shù)序列,必然是以“0 1”為循環(huán)節(jié)開頭的序列

顯然0、1是序列開頭,也就是說序列開頭就是循環(huán)節(jié)開頭

循環(huán)長度的計(jì)算貌似是個(gè)比較難的問題,我一時(shí)還沒有想到有效解法,不過,要說明的是,計(jì)算復(fù)雜度時(shí),這個(gè)循環(huán)節(jié)長度應(yīng)該按復(fù)雜度O(N^2)計(jì)算

恩,證明方法是利用同余定理、反證法,還有我們之前證明過的相鄰項(xiàng)一定互質(zhì)的定理,留給大家家庭作業(yè)

http://acm.hdu.edu.cn/showproblem.php?pid=1588
這是前天比賽關(guān)于Fibonacci的一道題,大家先看看題。
Description看后半部分就行了

現(xiàn)在告訴大家一種正確解法,然后大家就可以去搞定這道題向別人炫耀了

首先,我們將問題整理一下,就是對(duì)等差數(shù)列 ai=k*i+b,求所有的f(ai)之和除以M的余數(shù)

當(dāng)0<=i<N

大家有沒有想到,因?yàn)閍i是等差數(shù)列,倘若f(ai)也是個(gè)等什么序列,那說不定就有公式求了

f(ai)顯然不是等差數(shù)列,直接看上去也不是等比數(shù)列

但是如果把f(ai)換成我們剛才所說的Fibonacci矩陣呢?

是的,可是我們對(duì)矩陣是直接求冪即可,由于矩陣加法的性質(zhì),我們要求A^ai的右上角元素之和,只要求A^ai之和的右上角元素

就矩陣這個(gè)東西來說,完全可以看作一個(gè)等比數(shù)列,
首項(xiàng)是:A^b
公比是:A^k
項(xiàng)數(shù)是:N

呵呵,我們可以把問題進(jìn)一步簡化

因?yàn)榫仃嚨募臃▽?duì)乘法也符合分配律,我們提出一個(gè)A^b來,形成這樣的式子:
A^b*( I + A^k + (A^k)^2 + .... + (A^k)^(N-1) )

A^b 和 A^k 顯然都可以用我們之前說過的方法計(jì)算出來,這剩下一部分累加怎么解決呢

簡單起見,設(shè)A^k=B
要求 G(N)=I + ... + B^(N-1),設(shè)i=N/2
若N為偶數(shù),G(N)=G(i)+G(i)*B^i
若N為奇數(shù),G(N)=I+ G(i)*B + G(i) * (B^(i+1))

呵呵,這個(gè)方法就是比賽當(dāng)時(shí)ACRush用的
而農(nóng)夫用的則是更精妙的方法,大家可想知道

我們來設(shè)置這樣一個(gè)矩陣
B I
O I
其中O是零矩陣,I是單位矩陣

將它乘方,得到
B^2 I+B
O?? I
乘三方,得到
B^3 I+B+B^2
O?? I
乘四方,得到
B^4 I+B+B^2+B^3
O?? I

既然已經(jīng)轉(zhuǎn)換成矩陣的冪了,繼續(xù)用我們的二分或者二進(jìn)制法,直接求出冪就可以了

http://online-judge.uva.es/p/v110/11089.html
大家來讀讀這一題

Fibinary數(shù)是指沒有相鄰的兩個(gè)1的二進(jìn)制數(shù)。給N,求出第N大的Fibinary數(shù)

相對(duì)于二進(jìn)制中每一位的值是2的冪,十進(jìn)制中每一位的值是十的冪,
Fibonacci進(jìn)制是每一位的值是對(duì)應(yīng)Fibonacci數(shù)的一種計(jì)數(shù)系統(tǒng)。
???? 8 5 3 2 1
1?????1
2?????1 0
3?????1 0 0
4?????1 0 1
5?????1 0 0 0
6?????1 0 0 1
7?????1 0 1 0
8???? 1 0 0 0 0
9???? 1 0 0 0 1
10?? 1 0 0 1 0
11?? 1 0 1 0 0
12?? 1 0 1 0 1
以上是前12個(gè)數(shù)字對(duì)應(yīng)的十進(jìn)制到Fibonacci進(jìn)制的表格

Fibonacci的運(yùn)算方法很奇怪。首先,它每一位上非0即1,而且不同于二進(jìn)制的逢二進(jìn)一或者十進(jìn)制的逢十進(jìn)一,它的進(jìn)位方法是逢連續(xù)兩個(gè)1,則進(jìn)1

譬如
1010110==> 1011000 ==> 1100000==>10000000

在最低位有個(gè)特殊情況,最低位既可以逢2進(jìn)1,也可以和次低位一起逢相鄰進(jìn)1
這種奇怪的進(jìn)位方法,換句話描述就是,不存在兩個(gè)連續(xù)的1
因?yàn)镕ibonacci數(shù)其實(shí)也增長很快,int范圍內(nèi)好像只有46個(gè),本題只需要用最簡單的辦法轉(zhuǎn)換成Fibonacii進(jìn)制即可
其中一題是
http://www.mydrs.org/program/down/ahoi2004day1.pdf
中的第二題,叫做數(shù)字迷陣
還有一題是PKU上的很出名的取石子問題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1067

這題相當(dāng)復(fù)雜,大家可以自己思考,往Fibonacci上想,也可以閱讀這里的論文:
http://episte.math.ntu.edu.tw/articles/mm/mm_03_2_02/index.html
http://acm.pku.edu.cn/JudgeOnline/problem?id=2967

另外這題 可以利用Fibonacci判斷數(shù)據(jù)范圍進(jìn)行優(yōu)化設(shè)計(jì)。不過貌似可以水過去,僅僅給大家提供個(gè)思路罷

關(guān)于Fibonacci和黃金分割,還有很多更高明的結(jié)論和定理,希望大家也繼續(xù)討論,將自己的知識(shí)和他人共享
http://episte.math.ntu.edu.tw/articles/mm/mm_02_4_10/index.html
中例3詳細(xì)講述了用生成函數(shù)來計(jì)算Fibonacci數(shù)公式的運(yùn)算過程。http://acm.hdu.edu.cn/showproblem.php?pid=1568
Fibonacci 求fibonacci前4位

http://acm.hdu.edu.cn/showproblem.php?pid=1588
Gauss Fibonacci
http://acm.pku.edu.cn/JudgeOnline/problem?id=1067
取石子問題
http://episte.math.ntu.edu.tw/articles/mm/mm_03_2_02/index.html 是報(bào)告
http://acm.pku.edu.cn/JudgeOnline/problem?id=3070
Fibonacci矩陣
http://acm.hdu.edu.cn/showproblem.php?pid=1021

http://acm.zju.edu.cn/show_problem.php?pid=2060
Fibonacci某項(xiàng)是否被3整除
http://acm.pku.edu.cn/JudgeOnline/problem?id=2116
Fibonacci進(jìn)制計(jì)算
http://acm.pku.edu.cn/JudgeOnline/problem?id=2967
利用Fibonacci判斷數(shù)據(jù)范圍進(jìn)行優(yōu)化設(shè)計(jì)。
http://online-judge.uva.es/p/v110/11089.html
Fi-binary numbers,Fibonacci進(jìn)制。
http://www.mydrs.org/program/down/ahoi2004day1.pdf
第二題 數(shù)字迷陣?? 這些,是今天涉及到的資料和網(wǎng)頁

轉(zhuǎn)載于:https://www.cnblogs.com/Knuth/archive/2009/09/04/1559951.html

總結(jié)

以上是生活随笔為你收集整理的斐波那契序列 集锦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。