猫史档案馆


【编程一小时】【文编院】最简单の算法图解:求多少种排列方法

用户:嗯哼君 渠源嗯哼君 渠源查看:0 回复:4 评论:0 创建时间:2018-12-11T21:07:00


前言

今天我们来学“求多少种排列方法”,依然是通过画图的方式呈现给大家:

我们可能会遇到这么一类问题:现有个N项有序数字组(N个项数的数字列表),且每项直接均差一,问你若两项之间可以重复则有多少种排列方法

这类问题很好解决,我们可以通过找规律的方法推测出来,但若是数很大的话就很尴尬了,我们今天就来学习一下:

我们先暂定为3项有序数字组且三项分别为1、2与3。我们一个一个数得出了以下结果:

center_image

也就是说,共27个

正文

这样子看我们是看不出什么来的,而规律自然亦无处可寻

不过我们可以这样排列成一个三维表格,这样规律就往上逐渐浮喵面了:

center_image

我们可以看到,三维表格中每维项数为三,这样我们就算出了所有的数。

那若是二项有序数字组呢?

center_image

我们只用了二维表格就把它整理起来了,结果是4种。

若是一的话只用一维表格就行了,因为1的排列只有一种:1

你发现了一个规律了没?要排列的数组项数就等于整理起来的表格维度。

因此我们就能推测出:公式为N^N

实践

我们来制作一个小程序,输入是几项数组,返回一个有多少种排列方法

若我跟你说整个程序只有两行你信不信?直接这样就OK了:

center_image

没错,就是这么简单喵。本来一个计算到头炸的问题,就这么轻而易举地被我们搞定了。

扩展

我们之前所说的一切,都是基于第一项为1的情况下的,若不为一咋整呢?

我们已经知道了,公式为“项数^项数”,因此我们只需改变一下项数的计算就OK了

我们以3与2为例,同样整理成一个N维表格:

center_image

我们发现,他只用三维表格就整理好了。而若为2、3、4,嗯哼君整理出来的是三维表格,在这里就不放图了。

我们又得出来了一个规律:项数=最后一项-第一项+1

这个公式在首项为1的时候同样成立欧

因此我们可以改进一下我们的小程序,从而可以实现更高水平的计算:

center_image

由于大多数人的习惯,因此嗯哼君贴心地先输入第一项后输入最后一项,a-b=-(b)+a

这样,我们就阔以求任意有序差一数组的排列方法的总数啦~~~

PS:但一定要小心,嗯哼君刚才作喵后Python就一直卡了······

center_image


回复

上一页1 页 / 共 1下一页
黄金体验黄金体验

emotion_编程猫_点赞

点赞0


评论


活动喵活动喵

恭喜文编院发布编程一小时帖子/作品一篇,工作室积分+2,积分累计截止到12月12日,活动详情请查看链接:https://www.codemao.cn/community/167979
再接再厉,活动喵相信你们工作室能成功拿下前六,获得工作室专属荣誉及奖品!

点赞0


评论


哲学喵哲学喵

给大佬打call

点赞0


评论


喵队长喵队长

center_image

 

 

 

 

搬好板凳来学习

点赞0


评论