python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...
优化这种方法的方法不是找出更快的方式来生成排列,而是生成尽可能少的排列。
首先,如果您只想要按排序顺序的组合,您将如何做到这一点?
您不需要生成0到100的所有可能组合,然后对其进行过滤。第一个数字a可以是0到100之间的b任何数字。第二个数字可以是0到(100-a)之间的任何值。第三个数字,c只能是100-ab。所以:for a in range(0, 101):
for b in range(0, 101-a):
c = 100-a-b
yield a, b, c
现在,而不是产生100*100*100组合过滤下来到100*50*1+1,我们只是生成100*50*1+1,为2000X加速。
但是,请记住,仍有X * (X/2)**N答案。因此,X * (X/2)**N及时计算它们而不是X**N最佳 - 但它仍然是指数时间。而且没有办法解决这个问题; 毕竟,你想要一个指数的结果。
你可以寻找方法让第一部分itertools.product与reduceor 结合起来更简洁accumulate,但我认为它最终会降低可读性,并且你希望能够扩展到任意任意N,并且还能得到所有的排列,而不仅仅是排序的。所以,在你这样做之前保持它是可以理解的,然后在你完成之后寻找方法来压缩它。
你显然需要经历N步骤。我认为使用递归比循环更容易理解。
当n为1时,唯一的组合是(x,)。
否则,对于从0到x的每个值a,您可以将该值与总和为xa的n-1个数的所有组合一起使用。所以:def sum_to_x(x, n):
if n == 1:
yield (x,)
return
for a in range(x+1):
for result in sum_to_x(x-a, n-1):
yield (a, *result)
现在你只需要添加排列,你就完成了:def perm_sum_to_x(x, n):
for combi in sum_to_x(x, n):
yield from itertools.permutations(combi)
但是有一个问题:permutations置换位置,而不是价值。所以,如果你有,比如说(100, 0, 0),那六个排列是(100, 0, 0),(100, 0, 0),(0, 100, 0),(0, 0, 100),(0, 100, 0),(0, 0, 100)。
如果N非常小 - 就像在你的例子中那样,N = 3且X = 100-可以很好地生成每个组合的所有6个排列并过滤它们:def perm_sum_to_x(x, n):
for combi in sum_to_x(x, n):
yield from set(itertools.permutations(combi))
......但如果N能够变大,我们也会在那里谈论很多浪费的工作。
这里有很多关于如何在没有重复值的情况下进行排列的好答案。例如,请参阅此问题。借用该答案的实现:def perm_sum_to_x(x, n):
for combi in sum_to_x(x, n):
yield from unique_permutations(combi)def perm_sum_to_x(x, n):
for combi in sum_to_x(x, n):
yield from sympy.multiset_permutations(combi)
def perm_sum_to_x(x, n):
for combi in sum_to_x(x, n):
yield from more_itertools.distinct_permutations(combi)
python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...相关推荐
- 编写python程序、计算账户余额_小明有20w存款存在余额宝中,按余额宝年收益为3.35%计算,用Python编写程序计算,多少年后小明的存款达到30w?...
[判断题]卤素灯泡是在灯泡内充入氟.氯等卤素气体. [单选题]我国刑法第12条关于溯及力的规定采取的是( ). [填空题]本地局域网 LAN 内, () 和无绳电话速率较低,主流带宽是 100kbps ...
- [python]编写程序产生 ISBN 号的校验位。
@MADE BY YWL_XJTU python编写程序产生 ISBN 号的校验位. 编写程序产生 ISBN 号的校验位.任何新出版的图书都配有 ISBN 号, 2007 年以前是由 10 位数字加上 ...
- java编写一个程序_计算已知长和宽的长方形的周长,请教一下大佬们,我们java留了一个作业,编写程序,定义一个接口Comput,声明计算周长和面积的方法...
//编写程序,定义一个接口Compute,声明计算周长calgirth()和面积calarea ()的方法,然后定义一个长方形类RRect和圆类Circle,两个类都实现接口Compute,最后进行测 ...
- java语言编程三角形图形_编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用......
导航:网站首页 > 编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用... 编程题:编写程序输入三角形的3条边长,计算并输出... 求助 ...
- 编写程序,输入百分制成绩,输出其对应的成绩等级。90~100分对应A等, 80~89对应B等,70~79对应C等,60~69对应D等,0~59对应E等。
编写程序,输入百分制成绩,输出其对应的成绩等级.90~100分对应A等, 80~89对应B等,70~79对应C等,60~69对应D等,0~59对应E等. #include<stdio.h> ...
- python编写程序公式计算s_PYTHON程序设计实验2
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名邹缕学号3190505117 成绩 日期 2020.3.22 指导老师修宇 实验二 顺序结构程序设计(验证性 ...
- python编写程序 计算1_《Python程序设计》——第1章 计算与问题求解简介 1.1 计算与Python简介-阿里云开发者社区...
本节书摘来自华章计算机<Python程序设计>一书中的第1章,第1.1节,作者:[美]戴维 I.施奈德(David I. Schneider)著,更多章节内容可以访问云栖社区"华 ...
- 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...
如何计算标准差? 本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪).了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言.Python.Perl等,还 ...
- python编写程序,输出100以内的所有素数
编写程序,输出100以内的所有素数 超简洁 代码 for i in range(2,100):for j in range(2,i):if i%j==0:breakelse:print(i) 运行结果
最新文章
- 11岁少女叫板支付宝!会写代码的孩子,到底多可怕?
- php桶排序,PHP实现桶排序算法
- 2017c语言考核册答案,2017年最新C语言考题带答案
- VTK:图表之SelectedVerticesAndEdgesObserver
- 【详细注释】1058 选择题 (20 分)
- markDown 语法(个人练习篇)
- 跨语言调用Hangfire定时作业服务
- Android Studio 编译失败 Could not read entry ':app:processDebugManifest' from cache taskArtifacts.bin
- 达梦数据库SQL语法
- [SpringBoot]下载excel模板,postman测试接口
- React脚手架项目示例
- 数据库表设计:一对一、一对多、多对多
- centos 7.6编译安装nginx
- 骇客基础知识:第3部分
- 猫眼CEO郑志昊:为什么说产品思维已“死”?
- 如何让血管“返老还童”
- 程序猿怎么利用技术挣钱?——python量化实践
- 【最优化方法】1-最优化方法介绍
- 有一个8位机,采用单总线结构......(计算机组成原理课后习题)
- MFC中如何给控件关联变量
热门文章
- 让我们Core在一起:ASP.NET Core amp; .NET Core
- 用ajax连接mysql_页面用ajax实现简单的连接数据库
- [转]解决Android studio升级到3.5的一些问题
- 【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层
- C#将dataGridView中显示的数据导出到Excel(大数据量超实用版)
- Bit Manipulation —— 位运算
- 用计算机算出你喜欢吃你喜欢的人,Go for it七年级下学期1-12单元(期末复习)句子翻译专练...
- 同一个工作组无法查看计算机,win7系统在同一个工作组看不到其他电脑的解决方法...
- 服务器的响应一直一直发送不过去,zeroRPC:在发送响应后继续运行进程
- 2000多一件的大牌T恤,真实成本有多少?