算法:楊輝三角(Pascal's Triangle)


一、楊輝三角介紹

  楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形、巴斯卡三角形,是二項式系數的一種寫法,形似三角形,在中國首現於南宋楊輝《詳解九章算法》得名,書中楊輝說明是引自賈憲的《釋鎖算書》,故又名賈憲三角形。在那之前,還有更早發現這個三角的波斯數學家和天文學家,但相關的內容沒有以圖文保存下來,所以中國的數學家對此研究有很大貢獻。

        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1
  1 6 15 20 15 6 1
 1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1

  以上是楊輝三角的前 9 行,可以看出來每一行的所有數字對應着二項式 (A+B)的展開式系數,這里 n 從第 0 行開始。

二、楊輝三角的一些性質與實現


此三角形的性質有(注:最頂的 1 處於第 0 行):

  • 正整數構成,每一行的數字左右對稱

  • 第(2的冪)行都是奇數

  • 每一行數字之和都是2的冪

  • N行數字個數都是N

  • N行的第K個數字為組合數

  • 除每行最左側與最右側的數字以外,每個數字等於它的左上方與右上方兩個數字之和(也就是說,第 N 行第 K 數字等於第 N-1 行第 K-1 個數字第 K 個數字的)。

  因而固有恆等式:

        

  可用此性質寫出整個楊輝三角形。

 1     /**
 2      * 楊輝三角與 (a+b)^n 二項式系數的展開
 3      *
 4      * @param n
 5      * @param k
 6      * @return
 7      */
 8     private static int binomialCoefficient(int n, int k) {
 9         int res = 1;
10         if (k > n - k) {
11             k = n - k;
12         }
13         for (int i = 0; i < k; i++) {
14             res *= (n - i);
15             res /= (i + 1);
16         }
17         return res;
18     }

  打印楊輝三角的函數:

 1     /**
 2      * 打印楊輝三角
 3      *
 4      * @param n
 5      */
 6     private static void printPascal(int n) {
 7         for (int line = 0; line < n; line++) {
 8             for (int i = 0; i <= line; i++) {
 9                 System.out.print(binomialCoefficient(line, i) + " ");
10             }
11             System.out.println();
12         }
13     }

  算法的時間復雜度大致為 O(N3),這里 N 為所打印楊輝三角的行數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM