番外篇:分享一道用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基础+蒙特卡洛算法实现陈列组合的题目(附源码) ????是不是觉得很惊诧?明明上周刚发布了这篇: 共享一道用Python基础+蒙特卡洛算法实现陈列组合的题目(附源码),今日又来一篇,名曰番外篇!其实今日是想给大家共享【??(这是月亮的背面)】大佬的解法,拍案叫绝! 前情回顾 ????前几天在才哥沟通群里,有个叫【Rick Xiang】的粉丝在Python沟通群里问了一道关于陈列组合的问题,初步一看觉得很简约,实际上的确是有难度的。 ????题目是:一个列表中有随机15个数,没有反复值。从列表里面任意选5个数,如何选出来包含a, a+1的全部组合。a可以是15个数中的任意一个。 ????关于思路和处理方法,这篇文章 共享一道用Python基础+蒙特卡洛算法实现陈列组合的题目(附源码)中供应了【张老师】和【有点意思】大佬的想法和处理方案,一共有5份代码,足够大家学习了,感爱好的小伙伴快去学习吧,干货满满。 二、新代码 ????上周五的时候,发布了这篇 共享一道用Python基础+蒙特卡洛算法实现陈列组合的题目(附源码)原创文章,很庆幸还有粉丝亲身实践,并给出了建设性的方案,如下图所示。 ????这里先给出【??(这是月亮的背面)】大佬的伪代码,这样看上去大家也愈加好理解一些。 # -*- coding: utf-8 -*- # 模块化 import random import numpy as np import time # 取出随机的15个数值 def get_random15(): random_array = [np.array(random.sample(range(2000), 15)) for i in range(100000)] random5 = {get_random5(random15) for random15 in random_array} return [i for i in random5 if i] # 遍历随机的15个数值,取相邻的两个随机数,推断后前往满足条件的值 def get_random5(random_15): random_5 = set(random_15[random.sample(range(15), 5)]) # np.array的索引替换choice取值 # 利用set特性推断元素能否含有给定的元素 random_5_resp = {True if len(random_5.intersection({num, num + 1})) == 2 else False for num in random_5} return tuple(random_5) if True in random_5_resp else () if __name__ == __main__: start_time = time.time() final_result = get_random15() print(共%d个符合题意的列表 % len(final_result)) print(分别是:%s % final_result) end_time = time.time() used_time = end_time - start_time print() ????print(本次程序用时:{}.format(time.strftime(%H(小时):%M(分钟):%S(秒),?time.gmtime(used_time)))) ????这个代码写的真的很好,没有Python基础的小伙伴看上去确定有些费劲的,小编本人初看的时候,也觉得有点难以吸取,需要多看几遍,领悟。 ????这个代码亲测有效,用之前的代码或许需要12秒,改用这个只需要1.5秒。 ????他这里做了三个优化,其一是之前从15个数中随机取5个值耗时较长,这里用使用了numpy.array的特性来优化代码,在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简约,Python list 无法直接运算, Numpy Array 可直接运算;其二是删除了之前的去重函数,这里他也用set去优化,所以在这块也节省了时间;其三是使用了集合的交集运算(Intersection),较之前的if推断来说,节省了时间。 ????想到这里,不得不感叹一下,【人生苦短,我用python】! 三、总结 ??? 我是Python进阶者。本文基于粉丝针对陈列组合问题的提问,给出了一个利用Python基础+蒙特卡洛算法的处理方案,基本上可以达到了粉丝的要求。 ????不过话说回来,这个方案虽是当

文档评论(0)

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

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

1亿VIP精品文档

相关文档