前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python是如何利用穷举法去解数学问题?

python是如何利用穷举法去解数学问题?

作者头像
叶子陪你玩
发布2020-03-22 10:40:45
2K0
发布2020-03-22 10:40:45
举报

前言

本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。

前几天收到一个问题,说有下面这样一道题,问我该怎样计算,我直接说4x3x2=24。这个问题用数学方法就是非常简单,就是排列组合的问题;但是要把它转化为计算机去求解,不知道如何下手。

其实很多人用数学会解决问题,用计算机不会解决,除了多计算机的一些基本规则不了解外,更多其实还是自己无法将自己的想法描述出来,我一直觉得,如果你能用文字或者语言描述清楚问题,那么你就可以用编程语言去解决。

但是绝大多数时刻,我们其实就是记住了一个公式,如果这里不能套用公式,可能就不知道如何求解了,这个时候其实回归定义或者从最笨的方法下手,便于我们从新跳出框架理解问题。

这道题我的思路就是用语言描述就是从ABCD中随机选取一个字母,有4种可能,剩下的字母继续有3种可能选择,最后有2种选择可能。组合一起就是24种。

转换成编程,就是编程要如何去实现从4个字母中如何选择一个字母呢?然后再从剩下的当中继续选取。可能你又会发现新的问题,如何保证这次选择的和上次不一样?如何又可以保证所有的情况都已经找出来了?继续想可能你会觉得变的很复杂了。

不知道如何下手我们就用最笨的方法,一个个去组合列举,满足的就打印,不满足的就不打印,为了防止漏掉某种情况,我们就按照顺序来;

第一个是A,第二个可以BCD;第二个是B,那第三个可以CD;结果--ABC--ABD第二个是C,那么第三个可以BD;结果--ACB--ACD第二个是D,那么第三个可以BC;结果--ADB--ADC

上面一轮的所有情况就列举出来了,一共6种;同理往下推理就是第一个是B,第二个可以是ACD,根据上面的数据结果,其实我们已经可以知道结果就是4x6=24种了。只要按照这个方法下去,每一种情况都可以列举出来。

一个个元素去列举出来,这个我们很清楚,用循环就可以了。三个字母我们就用三次循环嵌套,这里会出现重复的情况,上面人工列举的时候我们是自动过滤掉重复字母情况的,在编程中,你只要把我们刚才过滤的规则用编程语言描述出来就可以了,就是第一个,第二个,第三个不相等。

求解代码:

鸡兔同笼问题

上面用到的其实就是列举法或者叫做穷举法,类似的问题有很多,比如下面比较有名的鸡兔同笼的问题:

用数学的方法解:

假设 鸡有 x只,兔子有y只,根据关系可以列出下面的等式。

x+y = 352x+4y = 94

用编程的方法求解:

这里使用穷举法,其实就是一个个去套,假设 鸡有1只,兔子有34只,结果不满足;假设 鸡有2只,兔子有33只,结果不满足,以此类推,直到情况满足,得到一个结果,这就是所谓的穷举法,这里的情况虽然不多,但是如果人自己一个个去套还是有些麻烦的,如果给计算机去套,还是非常简单的,只要告诉它规则就可以了,满足规则输出结果。

(全文完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 鸡兔同笼问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档