青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評論-24  文章-0  trackbacks-0
先寫一下最樸素的O(N)算法,為了避免重復計算,這里不使用遞歸,而是采用循環,代碼如下:

 1 int fibonacci(int n)
 2 {
 3     assert(n >= 0);
 4     if (n == 0return 0;
 5     if (n == 1return 1;
 6 
 7     int i = 2, tmp, a = 0, b = 1;
 8     for (; i <= n; ++i)
 9     {
10         tmp = b;
11         b = a + b;
12         a = tmp;
13     }
14     return b;
15 }
16 

這里重點介紹如下兩種方法,一種方法是《編程之美》上的,通過利用如下矩陣關系式:
[f(n), f(n-1)] = [f(1), f(0)] * [1, 1]^(n-1)
                                         [1, 0]
這樣就轉化成了求矩陣[1, 1]的n-1次冪了。
                            [1, 0]
我們知道求a^n的方法有log(N)級別的,類似的,利用分治的思想同樣可以求矩陣的n次冪。
代碼如下:

 1 typedef struct MATRIX
 2 {
 3     int a, b, c, d;
 4 } MATRIX;
 5
 6 MATRIX matrix_multiply(MATRIX A, MATRIX B)
 7 {
 8     MATRIX res;
 9     res.a = A.a * B.a + A.b * B.c;
10     res.b = A.a * B.b + A.b * B.d;
11     res.c = A.c * B.a + A.d * B.c;
12     res.d = A.c * B.b + A.d * B.d;
13     return res;
14 }
15 
16 MATRIX matrix_power(MATRIX A, int n)
17 {
18     assert(n > 0);
19     MATRIX tmp;
20     if (n == 1return A;
21     if (n % 2return matrix_multiply(A, matrix_power(A, n - 1));
22     tmp = matrix_power(A, n / 2);
23     return matrix_multiply(tmp, tmp);
24 }
25 
26 int fibonacci(int n)
27 {
28     assert(n >= 0);
29     if (n == 0return 0;
30     if (n == 1return 1;
31 
32     MATRIX identify = {1110};
33     identify = matrix_power(identify, n - 1);
34     return identify.a;
35 }
36 

其中matrix_multiply()用于計算兩個2*2的矩陣的乘積
matrix_power()用于計算矩陣A的n次冪
算法復雜度全部集中在matrix_power上,因此為log(N)級別

另外一種方法是今天上午靈感突現,想到fibonacci數列遞推式的系數同樣符合fibonacci規律,如下:
f(n) = f(n - 1) + f(n - 2)
      = 2f(n - 2) + f(n - 3)
      = 3f(n - 3) + 2f(n - 4)
      = 5f(n - 4) + 3f(n - 5)
      = f(5)f(n - 4) + f(4)f(n - 5)
      = ...
      = f(i)f(n - i + 1) + f(i - 1)f(n - i)
有了這個公式我們可以得到如下式子:
f(2n) = f(n + 1)f(n) + f(n)f(n - 1) = f(n + 1)f(n) + f(n)[f(n + 1) - f(n)]
f(2n + 1) = f(n + 1)f(n + 1) + f(n)f(n)
所以可以得到:
f(2n) = [2f(n + 1) - f(n)]f(n)
f(2n + 1) = f(n + 1)f(n + 1) + f(n)f(n)
這樣,我們同樣找到了f(2x)與f(x)以及f(x+1)之間的關系,同樣可以得到log(N)級別的時間復雜度
程序如下:

 1 typedef struct MATRIX
 2 {
 3     int a, b;
 4 }MATRIX;
 5 
 6 MATRIX fibo(int n)
 7 {
 8     assert(n >= 0);
 9     MATRIX tmp = {01};
10     if (n == 0return tmp;
11     if (n == 1)
12     {
13         tmp.a = 1, tmp.b = 1;
14         return tmp;
15     }
16     tmp = fibo(n / 2);
17     int f2n = (2 * tmp.b - tmp.a) * tmp.a;
18     int f2n1= tmp.a * tmp.a + tmp.b * tmp.b;
19     if (n % 2)
20     {
21         tmp.a = f2n1, tmp.b = f2n1 + f2n;
22         return tmp;
23     }
24     else
25     {
26         tmp.a = f2n, tmp.b = f2n1;
27         return tmp;
28     }
29 }
30 
31 int fibonacci(int n)
32 {
33     assert(n >= 0);
34     return fibo(n).a;
35 }
36 
posted on 2012-02-09 15:20 myjfm 閱讀(594) 評論(0)  編輯 收藏 引用 所屬分類: 算法基礎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女尤物影院| 在线观看亚洲视频| 国产午夜精品全部视频播放| 日韩视频精品在线观看| 麻豆精品在线播放| 欧美亚洲综合网| 国产精品视频网| 亚洲男人第一av网站| 99精品视频免费观看| 欧美日韩精品二区| 亚洲精品综合久久中文字幕| 欧美成人精品影院| 亚洲欧美日韩高清| 国产欧美精品日韩| 久久久精品国产99久久精品芒果| 亚洲欧美日韩高清| 国产亚洲一区二区精品| 久久久精品欧美丰满| 久久久久久网址| 亚洲国产成人av| 亚洲黄色av| 欧美激情亚洲视频| 中文国产成人精品久久一| 一区二区激情小说| 国产精品夜夜嗨| 久久久噜噜噜久久中文字幕色伊伊| 中文国产成人精品久久一| 国产精品久久午夜夜伦鲁鲁| 欧美一区二区久久久| 欧美一区二区黄| 在线欧美视频| 亚洲精品一二区| 国产精品亚洲一区二区三区在线| 久久理论片午夜琪琪电影网| 久久中文精品| 99精品视频网| 亚洲免费综合| 亚洲国产精品一区二区三区| 亚洲精品久久久蜜桃| 国产精品永久入口久久久| 美女主播一区| 欧美精品尤物在线| 欧美在线视频一区二区三区| 久久久综合激的五月天| av成人手机在线| 欧美亚洲免费电影| 91久久精品国产91久久| 亚洲午夜精品久久| 亚洲国产日韩欧美综合久久| 亚洲国产精品www| 欧美国产一区二区| 欧美在线啊v| 欧美精品在线视频| 久久久99精品免费观看不卡| 欧美久久99| 女人天堂亚洲aⅴ在线观看| 国产精品v片在线观看不卡| 美女尤物久久精品| 国产精品一二一区| 亚洲精品久久久久久一区二区| 国产欧美一区二区精品性 | 亚洲资源av| 亚洲片区在线| 欧美在线视频网站| 亚洲精品在线三区| 久久精品国产第一区二区三区最新章节 | 亚洲午夜精品一区二区三区他趣| 性色av一区二区三区红粉影视| 亚洲欧洲日韩综合二区| 欧美一区三区二区在线观看| 宅男噜噜噜66国产日韩在线观看| 久久香蕉国产线看观看av| 欧美一级视频精品观看| 欧美成人一品| 欧美大片va欧美在线播放| 国产视频在线观看一区| 在线亚洲免费| 亚洲视频在线一区| 欧美久久影院| 亚洲人成在线播放网站岛国| 在线欧美日韩国产| 久久夜色精品亚洲噜噜国产mv | 国产伦精品一区二区三区免费迷 | 亚洲日本aⅴ片在线观看香蕉| 欧美亚洲在线| 欧美亚洲综合另类| 国产精品女主播一区二区三区| 日韩视频中文字幕| 99re66热这里只有精品4| 免费视频一区| 亚洲国产综合视频在线观看| 亚洲精品一区二区三区婷婷月| 久久精品国产免费| 久久综合免费视频影院| 国产主播一区| 久久久久这里只有精品| 欧美bbbxxxxx| 亚洲第一网站免费视频| 久久综合九九| 91久久精品国产91久久性色tv| 亚洲日本成人女熟在线观看| 欧美激情在线狂野欧美精品| 亚洲巨乳在线| 午夜精品久久久久久久久久久久| 国产麻豆综合| 久久精品二区三区| 欧美国产日产韩国视频| 99视频+国产日韩欧美| 欧美日本国产精品| 亚洲综合电影一区二区三区| 久久在精品线影院精品国产| 91久久夜色精品国产网站| 欧美精品一区二区高清在线观看| av成人国产| 亚洲视频一二区| 国产人成一区二区三区影院| 久久久久国产精品午夜一区| 欧美激情一区二区三区全黄 | 看片网站欧美日韩| 日韩视频一区二区三区| 久久国产直播| 亚洲人成高清| 国产精品视频你懂的| 久久尤物视频| 亚洲色诱最新| 久久久久久精| 中文日韩在线| 在线观看一区二区视频| 欧美三区在线| 久久香蕉精品| 亚洲四色影视在线观看| 亚洲第一福利视频| 久久精品青青大伊人av| 亚洲免费不卡| 国产一区白浆| 欧美日韩国产999| 久久狠狠亚洲综合| 一本久久精品一区二区| 欧美成人午夜影院| 欧美在线|欧美| 一区二区不卡在线视频 午夜欧美不卡在 | 在线免费观看欧美| 国模大胆一区二区三区| 国产欧美一区二区三区沐欲 | 欧美本精品男人aⅴ天堂| 久久久噜噜噜久久| 久久精品成人欧美大片古装| 久久成人精品视频| 久久精品99国产精品| 久久超碰97中文字幕| 久久成人精品无人区| 久久国产精品一区二区| 久久久久久久久久久久久女国产乱| 欧美一区二区三区视频免费播放| 欧美一区二区三区婷婷月色 | 欧美不卡高清| 欧美韩日视频| 欧美日韩在线观看视频| 国产精品高潮呻吟久久| 国产精品视频一区二区三区| 国产欧美精品一区二区色综合| 国产欧美亚洲精品| 国内精品久久久久久| 亚洲高清免费视频| 日韩亚洲在线| 新狼窝色av性久久久久久| 久久er精品视频| 免播放器亚洲一区| 亚洲精品黄网在线观看| 在线视频你懂得一区二区三区| 亚洲午夜精品一区二区| 欧美一区综合| 欧美激情一区二区三区在线| 欧美视频一区二区三区四区| 国产欧美不卡| 亚洲国产欧洲综合997久久| 日韩一区二区精品| 欧美一区二区黄色| 欧美aa国产视频| 一区二区三区视频在线观看| 久久国产加勒比精品无码| 欧美成人网在线| 国产精品久久久久一区二区三区共| 国产日韩欧美在线观看| 亚洲欧洲另类国产综合| 亚洲欧美日韩在线综合| 米奇777在线欧美播放| 日韩视频在线观看一区二区| 久久久久久久性| 欧美视频中文在线看| 在线国产欧美| 欧美一区二区三区在线看| 欧美国产日本| 欧美一区二区三区啪啪| 欧美猛交免费看| 亚洲大片在线| 久久久久久国产精品mv| 一本到高清视频免费精品| 理论片一区二区在线| 国产欧美亚洲日本|