寻找排列的奥秘
———— 16级药学专业 山红
他是我的一位尊敬的老师,
一位职院的数学建模指导教师,
我知道数学的世界很奇妙,
但我却常常远离这个世界。
我只是向老师学了一月数学建模,
就被他的数学才智所震撼,
数学有趣吗?
我听着老师的介绍在思考,
谁知老师将趣味数学展示给了我们,
我们被震撼了,
是老师的教导让不爱数学的人产生了兴趣,
老师对数字研究的热情影响着周围的人。
他的网名叫大山的情怀,
这是因为他喜欢大山吗?
我最后才知道,
他不仅仅是喜欢大山,
还具有大山般的情怀,
甚至还影响了他的学生,
也是由于大山情的这个原因,
我的网名就变成了“山红”。
有一天他又进入了一座数字大山,
他用那睿智的方式,
拨开层层数字的密林,
找出了千年宝藏,
然后向全世界公告。
是的,那天他兴奋异常,
这就是他多年要寻找的宝吗?
数学就是一种令人兴奋的寻宝游戏,
他把自己寻找到的宝叫做排列函数。
有一次,老师给我出了一道题,
他让我把“更上一层楼”五个字的所有排列写出来,
这也太麻烦了吧,
我拒绝完成这个任务。
谁知他只是想讲一个故事。
回想当年,他忘不了,
怎么也忘不了那个高中女孩,
那女孩要罗列出5个字母的全排列,
120个排列她用了好久好久的时间。
凌乱易重复的关系,
最后她被气糊涂了,
她把自己发晕的头撞在了墙上。
女孩的前额有个大泡,
作为老师的他知道了,
他惊讶竟然是因为那个排列问题。
从此他大脑里出现了一个奇怪的念头。
他想建立一个函数,
通过输入一个自然数,
而获得任何一个全排列,
他把这个问题叫做排列函数。
从此他与排列函数结缘了,
这其实是一个奇怪的想法,
许多人认为这是不可能实现的,
除非你用表格方法来表示函数。
关于6的全排列,
6!是720。
输入1至720,
咋样得到720个全排列呢?
自变量是1函数值是123456,
自变量是2函数值是123465,
……
自变量是720函数值是654321。
他就是这样想的,
两个似乎毫无关系的集合,
用什么样的关系式才能在两个集合之间搭起一座桥?
这是一座美丽的彩虹桥,
在这个世界上从来没有过。
虽然人们对函数很熟悉,
虽然人们对排列也很清楚。
可是函数就是函数,
排列就是排列。
可是他不服气,
因为他感到排列中明明有一种很严格的对应关系。
万事开头难,
但是它的开头很简单,
因为他是从1开始研究的,
一个数的排列只有一个,
1=1,f(1)=1,
用函数表示就是y=x。
这是多么简单的一个式子啊!
2!=2,12与21,一共两个全排列,
他用二元函数来表示:{x,3-x},
这样输入1就得到{1,2},
输入2就得到{2,1}。
第二步他也很容易的成功了,
但第三步6个全排列,
就已经令他无法理清其中的头绪。
但他不断地用一流的解法捶打那个问题,
他那艰难的探索,
是为了许多畏惧数学的学生。
回想起那时的岁月,
他脑海中浮现了一个个计算公式,
一个个新鲜的想法。
那时是2009年,
他在电子表格上获得了一大串的推导,
虽然那些推导非常复杂,
但他终于把自然数与排列在电子表格上对应起来了,
这算是他的初步成就。
他写成文章让一位老师发表在杂志上。
他晓得那些数学公式不会随着时间的推移而显得落伍或陈旧,
因为数学公式是永恒的。
多少年中他仍然挂念着他最初的思想,
幻方的研究,
帮助他不断地向目标前进前进。
终于在2015年3月,
他展现了熠熠生辉的才思。
在电子表格里,
终于将自然数和排列形成了简单的一 一对应。
他自己也认为这是一个神奇的大手笔。
他一边想着他的那些计算公式,
一边体会着书上记载着的古时候的数学家们,
他体验出了各种妙法里有一种创新的成就感。
即便是三百多年前,
牛顿与莱布尼茨的创造,
利用的是一个变上限的函数。
最开始的探索也是那样的复杂,
但最后变得越来越简单起来,
那著名的定积分公式,
[丿f(x)dX] (a,b)=F(b)-F(a),
简洁的令人感叹,
受到了许许多多人的赞赏。
我的老师现在正追求着这种简洁的美,
他一边追溯一套新理论,
一边埋头苦思着自己所建立的嵌套函数,
他一直不满足自己现在的创作,
他在比拼智力,
日思夜想有时想得整夜睡不着觉,
他还在寻找最牛的解法,
数学就是这样一场激烈的战斗。
后来他开始使用名叫Exle的VBA武器,
但是那种武器往往过于艰深,
很长时候他不能进入那个门槛,
进去看看也是一片云雾,
最初他突然发现了一些程式,
但他无法灵活操控。
稍微有一点新思路也要请教别人,
他很难控制对程序设计的下一个步骤,
这种感觉正如他很难操控自己年轻时的青涩。
在2018年三八妇女节晚上21:58时,
这是一个重要的时刻。
在延安职业技术学院里,
这是一个重要的地点。
他成功编成一个新的排列函数对应关系,
只用了mod与int两个函数,
其中包含三层的演算,
每层各变量的推导是一个又一个的嵌套关系。
那天晚上他做的仍然是六个元素的全排列。
他想在电子表格中建立自定义函数表达式,
他用pl6(x)表示这个函数,
编程以后,
经过试用一切都是那样如意,
在过年的时候,人们都相互祝愿对方万事如意。
没想到在这里他实现了万数如意。
从此人们调用任一个全排列,
只需轻轻输一个数字即可。
他高兴地把这好消息,
粘贴在各个群里。
他是这样宣告网友的:
热烈庆祝电子表格中自定义的排列函数终于问世了。
但人们肯定不懂,
为什么建立一个函数还需要庆祝?
这能算作一个创作吗?
这是因为人们不知道他在创作这个函数过程中的酸甜苦辣,
人们不知道这其实是一个非常困难的数学问题。
人们可能想都没敢想自然数和排到之间能够建立一个函数关系。
不过他自己是非常明白的,
他知道这个创作是一个前无古人的大作,
但一定会有众多来者去改进。
这是他十多年的努力的结果,
虽然编这个程序只用了四天时间。
他的成功在数学的发展历史中是重要的,
这一成就将为大数据的搜索提供了一个锐利的武器,
这一成就将为智能时代的发展添砖加瓦。
从此他的名字应该与他创造的这个名称一起流芳千古。
是的我们应该记住,
让老师的名字高治源与排列函数一起闪耀。
2020年疫情期间,
他学习vb编程解决趣味数学问题,
在学会一些编程方法后,
他仍然思考着如何通过编程获取排列函数的自动控制,
其中发现他的排列函数居然可以逆推,
给定一个 排列可以找到对应的自变量数,
这个对应方法就是排列的逆序数,
他首先想到的是九宫图,
九宫图492357816,
各数的逆序数分别是(3,7,1,1,1,2,2,0,0),
他根据数字所占的位数给予赋值,
这个值就是n!,其中n=0,1,2……,8,
计算出来就是:40320,5040,720,120,24,6,2,1,1
这些数他已经很熟悉了,
他把两个数组当作向量作了一个数量积:
3×40320+7×5040+1×720+1×120+1×24+2×6+2×2+0×1+0×1
=120960+35280+720+120+24+12+4+0+0=157120。
是的,你没有看错,157120+1就是这个自变量,
它就是九宫图492357816排列对应的自变量,
他不放心就代入源程序计算,
果然pl9(157121)=492357816,
他感到十分欣慰,
虽然157121是一个自然数,
但它却反映了数字排列492357816的逆序数问题。
显然排列的奥秘被他解开了,
原来排列的本质特性与高等代数连接起来了,
从中他看到了排列函数为什么能够从一个数准确获得一组对应排列的奥秘。
通过不断努力,
他成功了,
程序越来越简单,
方法越来越多样,
这是位置数表达式:
y=mod(x-1,k!)/(k-1)!
这是排列元素缩减式:
MID(z,1,y)&MID(z,y+2,11-y)
这里的z其实就是下面一串串字母:
123456789ABC
123456789ABC
23456789ABC
3456789ABC
456789ABC
45689ABC
5689ABC
568ABC
568AC
56AC
6AC
6A
6
这些不断减小的符号就像我们下楼梯那样好玩,
这就像诗行一般地引人注目,
每个位置的排列数就是通过上面的计算确定。
用位置数确定每一行排列的一个位置:
MID(z,y+1,1)
这是12位元素在输入自变量123654得到的结果:
(1,2,3,7,4,9,B,8,5,C,A,6)
这是他学习编程的最大收获,
这是他学以致用的成就。
最终,他把排列函数VB程序编成功了,
开始是那样的复杂,
但随着他对VBA程序中数组的理解,
他的程序也跟着变得简单起来。
附录:排列函数程序
Sub pl12( )
Dim y(12) As Integer
Dim k, i, j As Long
Dim dataArr()
s = 2
t = 2
a = Cells(1, 2) - 1
For k = 12 To 1 Step -1
y(k - 1) =
Int((aMod Application.WorksheetFunction.Fact(k))
\Application.WorksheetFunction.Fact(k- 1))
Cells(2, s) = y(k - 1): s =s + 1
Next k
dataArr = Array(1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11, 12)
For j = 11 To 0 Step -1
Cells(3, t) = dataArr(y(j)):t = t + 1
For i = y(j) ToUBound(dataArr) - 1
dataArr(i) = dataArr(i +1)
Next i
ReDimPreservedataArr(UBound(dataArr))
Next j
End Sub
就是这一溜溜沟沟,
就是这一道道坎坎。
这沟沟坎坎坡坡岇岇,
组成了大山。
那数学中的排列函数就在那大山里诞生。
1,2,6,24,120,720,5040……
这里有许许多多个台阶,
象大山坡里的梯田。
没有大山的情怀,
是无法破解那深奥的数学秘密。
他喜欢唱陕北民歌,
此时他应该站在高山上高唱一曲。
这座由排列函数构造的数字大山,
是我的老师的辛勤创造,
学生们早就相信了,
老师就是有着大山一样的情怀。
他的智慧给予了数学研究,
他的热情也奉献给了我们学生的教育,
这是一座太阳底下十分酷威的大山,
这是一座学生心中永久屹立的数之美大山。
———— 16级药学专业 山红
他是我的一位尊敬的老师,
一位职院的数学建模指导教师,
我知道数学的世界很奇妙,
但我却常常远离这个世界。
我只是向老师学了一月数学建模,
就被他的数学才智所震撼,
数学有趣吗?
我听着老师的介绍在思考,
谁知老师将趣味数学展示给了我们,
我们被震撼了,
是老师的教导让不爱数学的人产生了兴趣,
老师对数字研究的热情影响着周围的人。
他的网名叫大山的情怀,
这是因为他喜欢大山吗?
我最后才知道,
他不仅仅是喜欢大山,
还具有大山般的情怀,
甚至还影响了他的学生,
也是由于大山情的这个原因,
我的网名就变成了“山红”。
有一天他又进入了一座数字大山,
他用那睿智的方式,
拨开层层数字的密林,
找出了千年宝藏,
然后向全世界公告。
是的,那天他兴奋异常,
这就是他多年要寻找的宝吗?
数学就是一种令人兴奋的寻宝游戏,
他把自己寻找到的宝叫做排列函数。
有一次,老师给我出了一道题,
他让我把“更上一层楼”五个字的所有排列写出来,
这也太麻烦了吧,
我拒绝完成这个任务。
谁知他只是想讲一个故事。
回想当年,他忘不了,
怎么也忘不了那个高中女孩,
那女孩要罗列出5个字母的全排列,
120个排列她用了好久好久的时间。
凌乱易重复的关系,
最后她被气糊涂了,
她把自己发晕的头撞在了墙上。
女孩的前额有个大泡,
作为老师的他知道了,
他惊讶竟然是因为那个排列问题。
从此他大脑里出现了一个奇怪的念头。
他想建立一个函数,
通过输入一个自然数,
而获得任何一个全排列,
他把这个问题叫做排列函数。
从此他与排列函数结缘了,
这其实是一个奇怪的想法,
许多人认为这是不可能实现的,
除非你用表格方法来表示函数。
关于6的全排列,
6!是720。
输入1至720,
咋样得到720个全排列呢?
自变量是1函数值是123456,
自变量是2函数值是123465,
……
自变量是720函数值是654321。
他就是这样想的,
两个似乎毫无关系的集合,
用什么样的关系式才能在两个集合之间搭起一座桥?
这是一座美丽的彩虹桥,
在这个世界上从来没有过。
虽然人们对函数很熟悉,
虽然人们对排列也很清楚。
可是函数就是函数,
排列就是排列。
可是他不服气,
因为他感到排列中明明有一种很严格的对应关系。
万事开头难,
但是它的开头很简单,
因为他是从1开始研究的,
一个数的排列只有一个,
1=1,f(1)=1,
用函数表示就是y=x。
这是多么简单的一个式子啊!
2!=2,12与21,一共两个全排列,
他用二元函数来表示:{x,3-x},
这样输入1就得到{1,2},
输入2就得到{2,1}。
第二步他也很容易的成功了,
但第三步6个全排列,
就已经令他无法理清其中的头绪。
但他不断地用一流的解法捶打那个问题,
他那艰难的探索,
是为了许多畏惧数学的学生。
回想起那时的岁月,
他脑海中浮现了一个个计算公式,
一个个新鲜的想法。
那时是2009年,
他在电子表格上获得了一大串的推导,
虽然那些推导非常复杂,
但他终于把自然数与排列在电子表格上对应起来了,
这算是他的初步成就。
他写成文章让一位老师发表在杂志上。
他晓得那些数学公式不会随着时间的推移而显得落伍或陈旧,
因为数学公式是永恒的。
多少年中他仍然挂念着他最初的思想,
幻方的研究,
帮助他不断地向目标前进前进。
终于在2015年3月,
他展现了熠熠生辉的才思。
在电子表格里,
终于将自然数和排列形成了简单的一 一对应。
他自己也认为这是一个神奇的大手笔。
他一边想着他的那些计算公式,
一边体会着书上记载着的古时候的数学家们,
他体验出了各种妙法里有一种创新的成就感。
即便是三百多年前,
牛顿与莱布尼茨的创造,
利用的是一个变上限的函数。
最开始的探索也是那样的复杂,
但最后变得越来越简单起来,
那著名的定积分公式,
[丿f(x)dX] (a,b)=F(b)-F(a),
简洁的令人感叹,
受到了许许多多人的赞赏。
我的老师现在正追求着这种简洁的美,
他一边追溯一套新理论,
一边埋头苦思着自己所建立的嵌套函数,
他一直不满足自己现在的创作,
他在比拼智力,
日思夜想有时想得整夜睡不着觉,
他还在寻找最牛的解法,
数学就是这样一场激烈的战斗。
后来他开始使用名叫Exle的VBA武器,
但是那种武器往往过于艰深,
很长时候他不能进入那个门槛,
进去看看也是一片云雾,
最初他突然发现了一些程式,
但他无法灵活操控。
稍微有一点新思路也要请教别人,
他很难控制对程序设计的下一个步骤,
这种感觉正如他很难操控自己年轻时的青涩。
在2018年三八妇女节晚上21:58时,
这是一个重要的时刻。
在延安职业技术学院里,
这是一个重要的地点。
他成功编成一个新的排列函数对应关系,
只用了mod与int两个函数,
其中包含三层的演算,
每层各变量的推导是一个又一个的嵌套关系。
那天晚上他做的仍然是六个元素的全排列。
他想在电子表格中建立自定义函数表达式,
他用pl6(x)表示这个函数,
编程以后,
经过试用一切都是那样如意,
在过年的时候,人们都相互祝愿对方万事如意。
没想到在这里他实现了万数如意。
从此人们调用任一个全排列,
只需轻轻输一个数字即可。
他高兴地把这好消息,
粘贴在各个群里。
他是这样宣告网友的:
热烈庆祝电子表格中自定义的排列函数终于问世了。
但人们肯定不懂,
为什么建立一个函数还需要庆祝?
这能算作一个创作吗?
这是因为人们不知道他在创作这个函数过程中的酸甜苦辣,
人们不知道这其实是一个非常困难的数学问题。
人们可能想都没敢想自然数和排到之间能够建立一个函数关系。
不过他自己是非常明白的,
他知道这个创作是一个前无古人的大作,
但一定会有众多来者去改进。
这是他十多年的努力的结果,
虽然编这个程序只用了四天时间。
他的成功在数学的发展历史中是重要的,
这一成就将为大数据的搜索提供了一个锐利的武器,
这一成就将为智能时代的发展添砖加瓦。
从此他的名字应该与他创造的这个名称一起流芳千古。
是的我们应该记住,
让老师的名字高治源与排列函数一起闪耀。
2020年疫情期间,
他学习vb编程解决趣味数学问题,
在学会一些编程方法后,
他仍然思考着如何通过编程获取排列函数的自动控制,
其中发现他的排列函数居然可以逆推,
给定一个 排列可以找到对应的自变量数,
这个对应方法就是排列的逆序数,
他首先想到的是九宫图,
九宫图492357816,
各数的逆序数分别是(3,7,1,1,1,2,2,0,0),
他根据数字所占的位数给予赋值,
这个值就是n!,其中n=0,1,2……,8,
计算出来就是:40320,5040,720,120,24,6,2,1,1
这些数他已经很熟悉了,
他把两个数组当作向量作了一个数量积:
3×40320+7×5040+1×720+1×120+1×24+2×6+2×2+0×1+0×1
=120960+35280+720+120+24+12+4+0+0=157120。
是的,你没有看错,157120+1就是这个自变量,
它就是九宫图492357816排列对应的自变量,
他不放心就代入源程序计算,
果然pl9(157121)=492357816,
他感到十分欣慰,
虽然157121是一个自然数,
但它却反映了数字排列492357816的逆序数问题。
显然排列的奥秘被他解开了,
原来排列的本质特性与高等代数连接起来了,
从中他看到了排列函数为什么能够从一个数准确获得一组对应排列的奥秘。
通过不断努力,
他成功了,
程序越来越简单,
方法越来越多样,
这是位置数表达式:
y=mod(x-1,k!)/(k-1)!
这是排列元素缩减式:
MID(z,1,y)&MID(z,y+2,11-y)
这里的z其实就是下面一串串字母:
123456789ABC
123456789ABC
23456789ABC
3456789ABC
456789ABC
45689ABC
5689ABC
568ABC
568AC
56AC
6AC
6A
6
这些不断减小的符号就像我们下楼梯那样好玩,
这就像诗行一般地引人注目,
每个位置的排列数就是通过上面的计算确定。
用位置数确定每一行排列的一个位置:
MID(z,y+1,1)
这是12位元素在输入自变量123654得到的结果:
(1,2,3,7,4,9,B,8,5,C,A,6)
这是他学习编程的最大收获,
这是他学以致用的成就。
最终,他把排列函数VB程序编成功了,
开始是那样的复杂,
但随着他对VBA程序中数组的理解,
他的程序也跟着变得简单起来。
附录:排列函数程序
Sub pl12( )
Dim y(12) As Integer
Dim k, i, j As Long
Dim dataArr()
s = 2
t = 2
a = Cells(1, 2) - 1
For k = 12 To 1 Step -1
y(k - 1) =
Int((aMod Application.WorksheetFunction.Fact(k))
\Application.WorksheetFunction.Fact(k- 1))
Cells(2, s) = y(k - 1): s =s + 1
Next k
dataArr = Array(1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11, 12)
For j = 11 To 0 Step -1
Cells(3, t) = dataArr(y(j)):t = t + 1
For i = y(j) ToUBound(dataArr) - 1
dataArr(i) = dataArr(i +1)
Next i
ReDimPreservedataArr(UBound(dataArr))
Next j
End Sub
就是这一溜溜沟沟,
就是这一道道坎坎。
这沟沟坎坎坡坡岇岇,
组成了大山。
那数学中的排列函数就在那大山里诞生。
1,2,6,24,120,720,5040……
这里有许许多多个台阶,
象大山坡里的梯田。
没有大山的情怀,
是无法破解那深奥的数学秘密。
他喜欢唱陕北民歌,
此时他应该站在高山上高唱一曲。
这座由排列函数构造的数字大山,
是我的老师的辛勤创造,
学生们早就相信了,
老师就是有着大山一样的情怀。
他的智慧给予了数学研究,
他的热情也奉献给了我们学生的教育,
这是一座太阳底下十分酷威的大山,
这是一座学生心中永久屹立的数之美大山。