杨辉三角斜列规律及与循环层数的关系

杨辉三角斜列规律及与循环层数的关系

文章目录

    • 杨辉三角斜列规律及与循环层数的关系
        • 一、杨辉三角简介
        • 二、杨辉三角斜列规律
        • 三、特殊多层循环嵌套
        • 四、杨辉三角与特殊循环嵌套的联系

一、杨辉三角简介

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

杨辉三角是中国数学史上的一个伟大成就。如图所示:
杨辉三角斜列规律及与循环层数的关系_第1张图片

在本文中,重点不是二项式系数,因为二项式系数是基于水平数列考虑的,如1 5 10 10 5 1,而本文则基于斜列考虑,如下图:
杨辉三角斜列规律及与循环层数的关系_第2张图片

二、杨辉三角斜列规律

定义斜列第一层为:1 2 3 4 5 6 . . .

则:

第二层:1 3 6 10 15 21 28 36 . . .

第三层:1 4 10 20 35 56 84 . . .

第四层:1 5 15 35 70 126 . . .

那么对于第m层的第n个数,将该数记为 (m)X(n),简记为X(n),则有

(m)X(n) = A(n+m-1, m) / m !,即X(n) = A(n+m-1, m) / m !

其中,A(n+m-1, m)为排列数,例如:A(5, 3) = 5 * 4 * 3 = 60

m !为m的阶乘,例如:m = 4,m ! = 4 * 3 * 2 * 1 = 24

可自行检验上述数据,这里举出一个:

第三层:1 4 10 20 35 56 84

由题可得:m = 3,可得公式:X(n) = A(n+2, 3) / 6

检验:

n = 1, X(1) = A(3, 3) / 6 = 3 * 2 * 1 / 6 = 1

n = 2, X(2) = A(4, 3) / 6 = 4 * 3 * 2 / 6 = 4

n = 3, X(3) = A(5, 3) / 6 = 5 * 4 * 3 / 6 = 10

…成立

三、特殊多层循环嵌套

for (int i = 1; i <= n; ++ i)
  ​    语句一;

当仅有一个for()循坏时,语句一被执行的次数仅与n有关,这里把语句一执行的频数记为Y,Y与n的关系表示为:Y(n) = …,这里显然 Y(n) = n

 for (itn i = 1; i <= n; ++ i)for (int  j = 1; j <= i; ++ i)

 ​          语句一;

注意如果第二层循环判断条件为 j <= n,那么这显然是一个O(n^2)的算法

Y(n) = n * n,但不是这样

这里直接给出结论,语句一执行次数与循环层数的关系:

对于m层类似上述的循环嵌套,语句一执行次数与n的关系为:

Y(n) = A(n+m-1, m) / m !

四、杨辉三角与特殊循环嵌套的联系

由此可见,杨辉三角与循环具有共同的公式,循环的层数对应杨辉三角斜列层数,对于不同n的值,也有斜列第n个数与之对应,举例如下:
所以,例如严蔚敏《数据结构习题解析与实验指导》,注:是习题册

P4. 10,求

for (int i = 1; i <= n; ++ i)for (int j = 1; j <= i; ++ j)for (int k = 1; k <= j; ++ k)

​              x ++;

求x++这句执行的频度

显然,循环为3层,m = 3;

Y(n) = A(n+m-1, m) / m! = n(n+1)(n+2) / 6,选 D


本文得到结论的方式为类推,没有经过公式的证明,但是通过了程序的测试,想与大家分享一些我的发现,如有错误,欢迎指出,如有疑惑,评论讨论一下啊~

你可能感兴趣的:(#,数据结构与习题,数据结构,算法)