杨辉三角(Pascal‘s Triangle)
什么是杨辉三角杨辉三角Pascal’s Triangle这是一个在数学中非常经典的数字三角形具有许多有趣的性质和应用。是一个由数字组成的三角形阵列其中每个数等于它上方两数之和。它的历史可以追溯到中国古代数学家杨辉约1238-1298年因此在中国被称为杨辉三角在西方则因法国数学家帕斯卡Blaise Pascal的研究而被称为帕斯卡三角形。构造方式第0行: 1 第1行: 1 1 第2行: 1 2 1 第3行: 1 3 3 1 第4行: 1 4 6 4 1 第5行: 1 5 10 10 5 1 第6行: 1 6 15 20 15 6 1 ...构造规则每行的第一个和最后一个数都是1中间的每个数等于它正上方和左上方两个数之和第nnn行有n1n1n1个数核心性质1. 组合数表示第nnn行的第kkk个数从0开始计数就是组合数C(n,k)C(n, k)C(n,k)或(nk)\binom{n}{k}(kn)(nk)n!k!(n−k)!\binom{n}{k} \frac{n!}{k!(n-k)!}(kn)k!(n−k)!n!2. 二项式展开系数(ab)n(ab)^n(ab)n的展开式系数正好对应杨辉三角的第nnn行(ab)n∑k0n(nk)an−kbk(ab)^n \sum_{k0}^{n} \binom{n}{k} a^{n-k}b^k(ab)nk0∑n(kn)an−kbk例如(ab)2a22abb2(ab)^2 a^2 2ab b^2(ab)2a22abb2← 对应第2行1, 2, 1(ab)3a33a2b3ab2b3(ab)^3 a^3 3a^2b 3ab^2 b^3(ab)3a33a2b3ab2b3← 对应第3行1, 3, 3, 13. 行和性质第nnn行所有数字之和等于2n2^n2n行数数字和011201 2^012011, 12212 2^122121, 2, 14224 2^242231, 3, 3, 18238 2^38234. 对称性每行数字左右对称即(nk)(nn−k)\binom{n}{k} \binom{n}{n-k}(kn)(n−kn)5. 递推关系帕斯卡法则(nk)(n−1k−1)(n−1k)\binom{n}{k} \binom{n-1}{k-1} \binom{n-1}{k}(kn)(k−1n−1)(kn−1)其他有趣的性质性质说明** hockey-stick 恒等式**从对角线开始连续求和结果指向下方的一个数斐波那契数列沿特定对角线求和得到斐波那契数素数判定若nnn是素数则第nnn行除首尾外都能被nnn整除谢尔宾斯基三角形将奇数涂黑偶数留白形成分形图案自然数、三角形数、四面体数第2、3、4条对角线分别对应这些数列实际应用概率论计算二项分布的概率组合数学计算从nnn个物品中选kkk个的方法数多项式展开快速确定展开式的系数计算机科学动态规划、路径计数问题简单代码实现Pythondefgenerate_pascal_triangle(n):triangle[]foriinrange(n):row[1]*(i1)forjinrange(1,i):row[j]triangle[i-1][j-1]triangle[i-1][j]triangle.append(row)returntriangle# 生成前6行trianglegenerate_pascal_triangle(6)fori,rowinenumerate(triangle):print(f第{i}行:{row})Java 实现杨辉三角publicclassPascalTriangle{// 方法1生成并打印杨辉三角publicstaticvoidprintPascalTriangle(intn){int[][]trianglenewint[n][];for(inti0;in;i){// 每行的长度等于行号1triangle[i]newint[i1];// 打印前导空格形成三角形形状for(intk0;kn-i-1;k){System.out.print( );}for(intj0;ji;j){// 每行的第一个和最后一个元素为1if(j0||ji){triangle[i][j]1;}else{// 其他元素等于上方两个元素之和triangle[i][j]triangle[i-1][j-1]triangle[i-1][j];}// 格式化输出保持对齐System.out.printf(%4d,triangle[i][j]);}System.out.println();}}// 方法2返回指定位置的值组合数计算publicstaticintgetValue(introw,intcol){if(col0||colrow)return1;returngetValue(row-1,col-1)getValue(row-1,col);}// 方法3使用一维数组优化空间只保存上一行publicstaticvoidprintOptimized(intn){int[]prevnewint[n];for(inti0;in;i){// 从后往前更新避免覆盖for(intji;j0;j--){if(j0||ji){prev[j]1;}else{prev[j]prev[j]prev[j-1];}}// 打印前导空格for(intk0;kn-i-1;k){System.out.print( );}// 打印当前行for(intj0;ji;j){System.out.printf(%4d,prev[j]);}System.out.println();}}// 主方法publicstaticvoidmain(String[]args){introws10;System.out.println( 杨辉三角二维数组实现);printPascalTriangle(rows);System.out.println(\n 杨辉三角空间优化实现);printOptimized(rows);// 演示组合数计算System.out.println(\n 组合数验证 );System.out.println(C(5,2) getValue(5,2));// 应为10System.out.println(C(6,3) getValue(6,3));// 应为20}}杨辉三角是数学中一个简单却深刻的结构它将代数、组合数学和数论紧密联系在一起是理解许多高级数学概念的基础工具。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2438518.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!