分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码).docxVIP

分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
共享一道用Python基础+蒙特卡洛算法实现陈列组合的题目(附源码) 前言 ????前几天在才哥沟通群里,有个叫【Rick Xiang】的粉丝在Python沟通群里问了一道关于陈列组合的问题,初步一看觉得很简约,实际上的确是有难度的。 ????题目是:一个列表中有随机15个数,没有反复值。从列表里面任意选5个数,如何选出来包含a, a+1的全部组合。a可以是15个数中的任意一个。 一、思路 ????这个问题看似简约,思路正如上图的【张老师】说的那样,分两步走,理论上来说,的确是可以实现。正常我们计算陈列组合公式,用下图中的组合公式计算是没问题的。 ????但是这道题目的实现,涉及到用Python程序进行实现,当然计算一个数值,对于Python和我们来说并不难,难的是需要回归陈列组合本来的形态,然后用程序进行实现。本文借用了群成员【有点意思】所说的蒙特卡洛算法和代码进行实现,下面一起来看看吧! ????这里引用【张老师】提及的其次种方案,先随机取14个数,然后从14个随机数中随机取一个,然后自增1,作为第15个随机数,之后再从这15个随机数中进行随机取5个随机数,再进行if推断,看看连续值能否同时存在同一个列表中,之后把满足条件的列表append到一个空列表中去,最终再去用set集合去重,得到最终的结果。 二、处理方法 1)伪代码 ????这里先给出【有点意思】大佬的伪代码,这样看上去大家也愈加好理解一些,如下图所示。其实下面这个代码也不算是伪代码,现在Python也支持中文变量,下面这个代码也是完全可以跑起来的,只不过看上去要比下文中的纯英文代码要愈加好理解一些。 ????下面给出具体的实现过程,这里给出5份代码,欢迎大家乐观尝试。 2)代码一 # coding: utf-8 import random def quchong(list_data): list2 = [] for i in list_data: if i not in list2: list2.append(i) return list2 # 从随机的15个数值中随机取出5个数,放到一个数组 # 生成不反复的14个随机数 random_14 = [random.randint(0, 100) for i in range(14)] # 这个写法简约消灭随机值反复 random_14 = random.sample(range(100), 14) print(random_14) random_1 = random.choice(random_14) random_2 = random_1 + 1 random_14.append(random_2) random_15 = random_14 print(random_1, random_2) final_list = [] for i in range(100): select = [random.choice(random_15) for j in range(5)] quchong_select = set(select) if random_1 in quchong_select and random_2 in quchong_select: final_list.append(quchong_select) fina_result = quchong(final_list) print(len(fina_result)) ? ? 乍一看,这个方法的确可以实现,但是这里会有一个小bug,那就是random.randint()函数生成的随机中会有反复值,而题目要求是生成不反复的随机值。那么这个问题,将在代码二中得到处理。 3)代码二 ? ? 使用random.sample()函数,这个函数可以随机产生随机值,而且不会反复,还是很奈斯的。另外,使用了numpy.random.choice()函数,可以直接选择随机的5个数,效率比代码一更高一些。 # -*- coding: utf-8 -*- import numpy as np import?random def quchong(list_data): list2 = [] for i in list_data: if i not in list2: list2.append(i) return list2 # 从随机的15个数值中随机取出5个数,放到一个数组 #?生成不反复的14个随机数 random_14 = random.sample(range(100), 14) print(ra

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档