作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!😄
一、前言
杨辉三角的历史
杨辉三角按照杨辉于1261年所编写的《详解九章算法》一书,里面有一张图片,介绍此种算法来自于另外一个数学家贾宪所编写的《释锁算书》一书,但这本书早已失传无从考证。但可以肯定的是这一图形的发现我国不迟于1200年左右。在欧洲,这图形称为"巴斯加(Pascal)三角"。因为一般都认为这是巴斯加在1654年发明的。其实在巴斯加之前已经有许多人普及过,最早是德国人阿匹纳斯(Pertrus APianus),他曾经把这个图形刻在1527年著的一本算术书封面上。但无论如何,杨辉三角的发现,在我国比在欧洲至少要早300年光景。
此外杨辉三角原来的名字也不是三角,而是叫做开方作法本源,后来也有人称为乘法求廉图。因为这些名称实在太古奥了些,所以后来简称为“三角”。
在小傅哥学习杨辉三角的过程中,找到了一本大数学家华罗庚的PDF《从杨辉三角谈起 - 华罗庚》。—— 这些数学真的非常重要,每每映射到程序中都是一段把for循环优化成算法的体现,提高执行效率。
二、杨辉三角构造
在开始分享杨辉三角的特性和代码实现前,我们先来了解下杨辉三角的结构构造。
杨辉三角的结构和规律非常简单,除去每次两边的1,中间的数字都是上面两个数字的和。如图示意的三角区域。但也就是如此简单的结构,却有着诸多的数学逻辑体现。包括我们计算的二项式、N选X的种数还有斐波那契数列等,都可以在杨辉三角中体现出来。接下来我们就来看看这些特性。
三、杨辉三角特性
为了方便学习杨辉三角的数学逻辑特性,我们把它按左对齐方式进行排列。
[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]
接下来我们就以这组杨辉三角数列,来展示它的数学逻辑特性。关于杨辉三角的Java代码放已到下文中,读者可以查阅。
1. 二项式展开
大家在上学阶段一定学习过二项式展开,例如:(x+y)^2 = x^2 + 2xy + y^2
其实这个展开的数学逻辑在杨辉三角中可以非常好的展示出来。
组合数是数学中定义的一种数学概念,用于计算有多少种选择可以从一组物品中选择出若干的物品。比如你早上有5种水果可以吃,但你吃不了那么多,让你5种水果中选2个,看看有多少种选择。通过使用公式 c(n,k) = n!/k!(n-k)! 可以计算出,5选2有10种选择。